Merge branch 'master' into NLPCRAFT-160
# Conflicts:
# nlpcraft/src/main/scala/org/apache/nlpcraft/examples/lightswitch/lightswitch_model.yaml
diff --git a/KEYS b/KEYS
deleted file mode 100644
index 1c5b337..0000000
--- a/KEYS
+++ /dev/null
@@ -1,163 +0,0 @@
-pub rsa4096 2020-04-11 [SC]
- 4793 17FA 7AFD 44AC A4CC 0778 C7C4 3555 607F E2EF
-uid [ultimate] Nikita Ivanov <nivanov30@gmail.com>
-sub rsa4096 2020-04-11 [E]
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-=5XS0
------END PGP PUBLIC KEY BLOCK-----
-
-pub rsa4096 2020-03-31 [SC] [expires: 2024-03-31]
- 223A2AADD175994F4450467491D161EDD8405C82
-uid [ultimate] Aaron Radzinski <aradzinski@datalingvo.com>
-sig 3 91D161EDD8405C82 2020-03-31 Aaron Radzinski <aradzinski@datalingvo.com>
-sub rsa4096 2020-03-31 [E] [expires: 2024-03-31]
-sig 91D161EDD8405C82 2020-03-31 Aaron Radzinski <aradzinski@datalingvo.com>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-U1vaIvVhIXD6xZ6ug/RDsFUJSQ==
-=O7in
------END PGP PUBLIC KEY BLOCK-----
-
-pub rsa3072 2020-08-23 [SC] [expires: 2022-08-23]
- CD57A1B6C91F3D512C1D8B07825F1640958F5D27
-uid [ultimate] Aaron Radzinski <aradzinski@datalingvo.com>
-sub rsa3072 2020-08-23 [E] [expires: 2022-08-23]
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-=2LXc
------END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/README.md b/README.md
index 20e7e82..d481c59 100644
--- a/README.md
+++ b/README.md
@@ -50,8 +50,19 @@
### English Focused
NLPCraft focuses on processing English language delivering the ease of use and unparalleled comprehension for the language spoken by more than a billion people.
+### By Devs - For Devs
+Built with a singular focus - provide developers with unprecedented productivity and efficiency when building modern NLI applications.
+
+### Advanced NLP Toolset
+Combines easy-of-use and development productivity with state-of-the-art NLP capabilities like short-term-memory (STM) support, advanced intent DSL with deterministic matching, and composable NEs.
+
### Java-First
-REST API and Java-based implementation natively support world's largest ecosystem of development tools, programming languages and services.
+REST API and Java-based implementation natively support world's largest ecosystem of development tools, multiple programming languages, frameworks and services.
+
+<a target=_ href="https://www.oracle.com/java/"><img src="https://nlpcraft.apache.org/images/java2.png" height="32px" alt=""></a>
+<a target=_ href="https://scala-lang.org/"><img src="https://nlpcraft.apache.org/images/scala-logo.png" height="24px" alt=""></a>
+<a target=_ href="https://groovy-lang.org/"><img src="https://nlpcraft.apache.org/images/groovy.png" height="32px" alt=""></a>
+<a target=_ href="https://kotlinlang.org/"><img src="https://nlpcraft.apache.org/images/kotlin.png" height="32px" alt=""></a>
### Model-As-A-Code
Model-as-a-code convention natively supports any system development life cycle tools and frameworks in Java eco-system.
@@ -138,7 +149,7 @@
- "{<ACTION>|shut|kill|stop|eliminate} {off|out} <LIGHT>"
- "no <LIGHT>"
intents:
- - "intent=ls conv=false term(act)={groups @@ 'act'} term(loc)={id == 'ls:loc'}*"
+ - "intent=ls term(act)~{groups @@ 'act'} term(loc)~{id == 'ls:loc'}*"
```
### Model Implementation
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/alarm/alarm_model.json b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/alarm/alarm_model.json
index a076fa7..0e17713 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/alarm/alarm_model.json
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/alarm/alarm_model.json
@@ -34,6 +34,6 @@
}
],
"intents": [
- "intent=alarm term={id=='x:alarm'} term(nums)={id=='nlpcraft:num' && ~nlpcraft:num:unittype=='datetime' && ~nlpcraft:num:isequalcondition==true}[0,7]"
+ "intent=alarm term~{id=='x:alarm'} term(nums)~{id=='nlpcraft:num' && ~nlpcraft:num:unittype=='datetime' && ~nlpcraft:num:isequalcondition==true}[0,7]"
]
}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/lightswitch/lightswitch_model.yaml b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/lightswitch/lightswitch_model.yaml
index 8793f50..44419c5 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/lightswitch/lightswitch_model.yaml
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/lightswitch/lightswitch_model.yaml
@@ -52,4 +52,4 @@
- "{<ACTION>|shut|kill|stop|eliminate} {off|out} <LIGHT>"
- "no <LIGHT>"
intents:
- - "intent=ls conv=true term(act)={groups @@ 'act'} term(loc)={id == 'ls:loc'}*"
\ No newline at end of file
+ - "intent=ls term(act)={groups @@ 'act'} term(loc)={id == 'ls:loc'}*"
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
index 05c94aa..250c492 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
@@ -51,7 +51,6 @@
*/
@NCIntent("" +
"intent=action " +
- "conv=false " + // No conversation support.
"term={id == 'phone:act'} " +
// Either organization, person or a phone number (or a combination of).
"term(rcpt)={id == 'google:organization' || id == 'google:person' || id == 'google:phone_number'}[1,3]"
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
index 931f7ac..a837967 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModel.scala
@@ -277,15 +277,15 @@
* @param limitTokOpt Limit token. Optional.
*/
@NCIntent(
- "intent=commonReport conv=true " +
- "term(tbls)={groups @@ 'table'}[0,7] " +
- "term(cols)={id == 'col:date' || id == 'col:num' || id == 'col:varchar'}[0,7] " +
- "term(condNums)={id == 'condition:num'}[0,7] " +
- "term(condVals)={id == 'condition:value'}[0,7] " +
- "term(condDates)={id == 'condition:date'}[0,7] " +
- "term(condFreeDate)={id == 'nlpcraft:date'}? " +
- "term(sort)={id == 'nlpcraft:sort'}? " +
- "term(limit)={id == 'nlpcraft:limit'}?"
+ "intent=commonReport " +
+ "term(tbls)~{groups @@ 'table'}[0,7] " +
+ "term(cols)~{id == 'col:date' || id == 'col:num' || id == 'col:varchar'}[0,7] " +
+ "term(condNums)~{id == 'condition:num'}[0,7] " +
+ "term(condVals)~{id == 'condition:value'}[0,7] " +
+ "term(condDates)~{id == 'condition:date'}[0,7] " +
+ "term(condFreeDate)~{id == 'nlpcraft:date'}? " +
+ "term(sort)~{id == 'nlpcraft:sort'}? " +
+ "term(limit)~{id == 'nlpcraft:limit'}?"
)
@NCIntentSample(Array(
"order date, please!",
@@ -339,15 +339,15 @@
* @param limitTokOpt Limit token. Optional.
*/
@NCIntent(
- "intent=customSortReport conv=true " +
- "term(sort)={id == 'sort:best' || id == 'sort:worst'} " +
- "term(tbls)={groups @@ 'table'}[0,7] " +
- "term(cols)={id == 'col:date' || id == 'col:num' || id == 'col:varchar'}[0,7] " +
- "term(condNums)={id == 'condition:num'}[0,7] " +
- "term(condVals)={id == 'condition:value'}[0,7] " +
- "term(condDates)={id == 'condition:date'}[0,7] " +
- "term(condFreeDate)={id == 'nlpcraft:date'}? " +
- "term(limit)={id == 'nlpcraft:limit'}?"
+ "intent=customSortReport " +
+ "term(sort)~{id == 'sort:best' || id == 'sort:worst'} " +
+ "term(tbls)~{groups @@ 'table'}[0,7] " +
+ "term(cols)~{id == 'col:date' || id == 'col:num' || id == 'col:varchar'}[0,7] " +
+ "term(condNums)~{id == 'condition:num'}[0,7] " +
+ "term(condVals)~{id == 'condition:value'}[0,7] " +
+ "term(condDates)~{id == 'condition:date'}[0,7] " +
+ "term(condFreeDate)~{id == 'nlpcraft:date'}? " +
+ "term(limit)~{id == 'nlpcraft:limit'}?"
)
@NCIntentSample(Array(
"What are the least performing categories for the last quarter?"
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
index 696529e..63b7090 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
@@ -92,7 +92,7 @@
* @param cityTok Token for 'geo' term.
* @return Query result.
*/
- @NCIntent("intent=intent2 conv=true term={id=='x:time'} term(city)={id=='nlpcraft:city'}")
+ @NCIntent("intent=intent2 term~{id=='x:time'} term(city)~{id=='nlpcraft:city'}")
@NCIntentSample({
"What time is it now in New York City?",
"What's the current time in Moscow?",
@@ -119,7 +119,7 @@
* @param ctx Intent solver context.
* @return Query result.
*/
- @NCIntent("intent=intent1 conv=false term={id=='x:time'}")
+ @NCIntent("intent=intent1 term={id=='x:time'}")
@NCIntentSample({
"What's the local time?"
})
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherModel.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherModel.java
index 872cb03..46dcfad 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherModel.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherModel.java
@@ -124,11 +124,10 @@
*/
@NCIntent(
"intent=req " +
- "conv=true " + // Support conversation context (i.e. short term memory).
- "term={id == 'wt:phen'}* " + // Zero or more weather phenomenon.
- "term(ind)={groups @@ 'indicator'}* " + // Optional indicator words (zero or more).
- "term(city)={id == 'nlpcraft:city'}? " + // Optional city.
- "term(date)={id == 'nlpcraft:date'}?" // Optional date (overrides indicator words).
+ "term~{id == 'wt:phen'}* " + // Zero or more weather phenomenon.
+ "term(ind)~{groups @@ 'indicator'}* " + // Optional indicator words (zero or more).
+ "term(city)~{id == 'nlpcraft:city'}? " + // Optional city.
+ "term(date)~{id == 'nlpcraft:date'}?" // Optional date (overrides indicator words).
)
// NOTE: each samples group will reset conversation STM.
@NCIntentSample({
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContext.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContext.java
index 385c834..9e5028d 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContext.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCContext.java
@@ -24,7 +24,7 @@
* Data model query context. This context defines fully processed user input and its associated data that
* the model's intents need to process and return the result.
*
- * @see NCIntentMatch
+ * @see NCIntentMatch#getContext()
*/
public interface NCContext extends Serializable {
/**
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentMatch.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentMatch.java
index 669a0e3..8552856 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentMatch.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentMatch.java
@@ -32,6 +32,7 @@
* @see NCIntent
* @see NCIntentTerm
* @see NCIntentSkip
+ * @see NCIntentSample
* @see NCIntentRef
*/
public interface NCIntentMatch extends Serializable {
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSkip.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSkip.java
index f3e7c85..b196632 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSkip.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCIntentSkip.java
@@ -36,6 +36,7 @@
* @see NCIntent
* @see NCIntentTerm
* @see NCIntentRef
+ * @see NCIntentSample
* @see NCIntentMatch
* @see NCModel#onMatchedIntent(NCIntentMatch)
*/
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java
index c51d093..4913286 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCToken.java
@@ -20,10 +20,17 @@
import java.util.*;
/**
- * Detected model element. A token is a detected model element and is a part of a
- * parsed user input. Sequence of tokens represents fully parsed (see {@link NCContext#getVariants()} method) user input. A single
+ * Detected model element. A token is a detected model element and is a part of the
+ * parsed user input. Sequence of tokens represents a fully parsed (see {@link NCContext#getVariants()} method) user input. A single
* token corresponds to a one or more words, sequential or not, in the user sentence.
* <p>
+ * Note that tokens can be used to define other tokens (i.e. tokens are composable). Because of that tokens naturally
+ * form a tree hierarchy - see methods {@link #findPartTokens(String...)}, {@link #getAliases()}, {@link #isOfAlias(String)}
+ * and {@link #getPartTokens()}.
+ * Note also that detected model elements that tokens represent also form another hierarchy, namely a model element hierarchy that
+ * user can also access via {@link #getAncestors()}, {@link #getParentId()} methods. These two hierarchies should be not
+ * be confused.
+ * <p>
* <b>Configuring Token Providers</b><br>
* Token providers (built-in or 3rd party) have to be enabled in the REST server <a href="https://nlpcraft.apache.org/server-and-probe.html">configuration</a>.
* Data models also have to specify tokens they are expecting the REST server and probe to detect. This is done to
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
index fa56ba2..edb8591 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentDslCompiler.scala
@@ -43,7 +43,6 @@
*/
class FiniteStateMachine extends NCIntentDslBaseListener {
// Intent components.
- private var conv: Boolean = true
private var ordered: Boolean = false
private var id: String = _
private val terms = ArrayBuffer.empty[NCDslTerm] // Accumulator for parsed terms.
@@ -52,6 +51,7 @@
// Currently parsed term.
private var termId: String = _
+ private var termConv: Boolean = _
// Current min/max quantifier.
private var min = 1
@@ -70,7 +70,7 @@
require(id != null)
require(terms.nonEmpty)
- NCDslIntent(id, conv, ordered, flow.toArray, terms.toArray)
+ NCDslIntent(id, ordered, flow.toArray, terms.toArray)
}
/**
@@ -101,7 +101,11 @@
override def exitTermId(ctx: NCIntentDslParser.TermIdContext): Unit = {
termId = ctx.ID().getText
}
-
+
+ override def exitTermEq(ctx: NCIntentDslParser.TermEqContext): Unit = {
+ termConv = ctx.TILDA() != null
+ }
+
override def exitMinMaxRange(ctx: NCIntentDslParser.MinMaxRangeContext): Unit = {
val minStr = ctx.getChild(1).getText
val maxStr = ctx.getChild(3).getText
@@ -118,10 +122,6 @@
id = ctx.ID().getText
}
- override def exitConvDecl(ctx: NCIntentDslParser.ConvDeclContext): Unit = {
- conv = ctx.BOOL().getText == "true"
- }
-
override def exitOrderedDecl(ctx: NCIntentDslParser.OrderedDeclContext): Unit = {
ordered = ctx.BOOL().getText == "true"
}
@@ -131,10 +131,15 @@
val p = predStack.pop
- terms += new NCDslTerm(termId, new java.util.function.Function[NCToken, java.lang.Boolean]() {
- override def apply(tok: NCToken): java.lang.Boolean = p.apply(tok)
- override def toString: String = p.toString() //ctx.item().getText
- }, min, max)
+ terms += new NCDslTerm(
+ termId,
+ new java.util.function.Function[NCToken, java.lang.Boolean]() {
+ override def apply(tok: NCToken): java.lang.Boolean = p.apply(tok)
+ override def toString: String = p.toString() //ctx.item().getText
+ },
+ min,
+ max,
+ termConv)
// Reset.
termId = null
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala
index e42c92c..db41dd0 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/NCIntentSolverEngine.scala
@@ -114,7 +114,6 @@
usedTokens: List[UsedToken],
weight: Weight
) {
- lazy val minIndex: Int = usedTokens.minBy(_.token.index).token.index
lazy val maxIndex: Int = usedTokens.maxBy(_.token.index).token.index
}
@@ -163,7 +162,6 @@
variantIdx: Int // Variant index.
)
val req = ctx.getRequest
- val conv = ctx.getConversation.getTokens
startScopedSpan("solve",
"srvReqId" → req.getServerRequestId,
@@ -187,17 +185,17 @@
// Isolated conversation tokens.
val convToks =
- if (intent.conv)
+ if (intent.terms.exists(_.isConversational))
Seq.empty[UsedToken] ++
// We shouldn't mix tokens with same group from conversation
// history and processed sentence.
- conv.
+ ctx.getConversation.getTokens.
filter(t ⇒ {
val convTokGroups = t.getGroups.sorted
!senTokGroups.exists(convTokGroups.containsSlice)
}).
- map(UsedToken(false, true, _))
+ map(UsedToken(used = false, conv = true, _))
else
Seq.empty[UsedToken]
@@ -418,7 +416,7 @@
solveTerm(
term,
senToks,
- convToks
+ if (term.isConversational) convToks else Seq.empty
) match {
case Some(termMatch) ⇒
if (ordered && lastTermMatch != null && lastTermMatch.maxIndex > termMatch.maxIndex)
@@ -511,6 +509,7 @@
termWeight ++= t._2
Some(TermMatch(term.getId, termToks, termWeight))
+
case None ⇒
None
}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
index 5486689..b3025c4 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
@@ -17,9 +17,8 @@
grammar NCIntentDsl;
-intent: intentId convDecl? orderedDecl? flowDecl? terms EOF;
+intent: intentId orderedDecl? flowDecl? terms EOF;
intentId: 'intent' EQ ID;
-convDecl: 'conv' EQ BOOL;
orderedDecl: 'ordered' EQ BOOL;
flowDecl: 'flow' EQ SQUOTE flow SQUOTE;
flow
@@ -37,7 +36,8 @@
| idList VERT ID
;
terms: term | terms term;
-term: 'term' termId? EQ LCURLY item RCURLY minMax?;
+termEq: EQ | TILDA;
+term: 'term' termId? termEq LCURLY item RCURLY minMax?;
termId: LPAREN ID RPAREN;
item
: predicate
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp
index 6ea233e..40e4f1c 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.interp
@@ -1,7 +1,6 @@
token literal names:
null
'intent'
-'conv'
'ordered'
'flow'
'term'
@@ -59,7 +58,6 @@
null
null
null
-null
PRED_OP
AND
OR
@@ -93,7 +91,6 @@
rule names:
intent
intentId
-convDecl
orderedDecl
flowDecl
flow
@@ -101,6 +98,7 @@
flowItemIds
idList
terms
+termEq
term
termId
item
@@ -119,4 +117,4 @@
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 45, 268, 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, 3, 2, 3, 2, 5, 2, 55, 10, 2, 3, 2, 5, 2, 58, 10, 2, 3, 2, 5, 2, 61, 10, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 5, 7, 86, 10, 7, 3, 7, 3, 7, 3, 7, 7, 7, 91, 10, 7, 12, 7, 14, 7, 94, 11, 7, 3, 8, 3, 8, 5, 8, 98, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 5, 9, 105, 10, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 113, 10, 10, 12, 10, 14, 10, 116, 11, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 7, 11, 123, 10, 11, 12, 11, 14, 11, 126, 11, 11, 3, 12, 3, 12, 5, 12, 130, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 137, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 151, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 156, 10, 14, 12, 14, 14, 14, 159, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 172, 10, 15, 3, 16, 5, 16, 175, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 186, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 193, 10, 17, 12, 17, 14, 17, 196, 11, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 5, 19, 203, 10, 19, 3, 19, 3, 19, 3, 19, 5, 19, 208, 10, 19, 3, 19, 3, 19, 5, 19, 212, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 219, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 227, 10, 21, 12, 21, 14, 21, 230, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 245, 10, 22, 3, 23, 3, 23, 7, 23, 249, 10, 23, 12, 23, 14, 23, 252, 11, 23, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 258, 10, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 2, 8, 12, 18, 20, 26, 32, 40, 27, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 2, 5, 3, 2, 18, 19, 3, 2, 26, 26, 3, 2, 37, 39, 2, 278, 2, 52, 3, 2, 2, 2, 4, 65, 3, 2, 2, 2, 6, 69, 3, 2, 2, 2, 8, 73, 3, 2, 2, 2, 10, 77, 3, 2, 2, 2, 12, 85, 3, 2, 2, 2, 14, 95, 3, 2, 2, 2, 16, 104, 3, 2, 2, 2, 18, 106, 3, 2, 2, 2, 20, 117, 3, 2, 2, 2, 22, 127, 3, 2, 2, 2, 24, 138, 3, 2, 2, 2, 26, 150, 3, 2, 2, 2, 28, 171, 3, 2, 2, 2, 30, 174, 3, 2, 2, 2, 32, 187, 3, 2, 2, 2, 34, 197, 3, 2, 2, 2, 36, 211, 3, 2, 2, 2, 38, 218, 3, 2, 2, 2, 40, 220, 3, 2, 2, 2, 42, 244, 3, 2, 2, 2, 44, 246, 3, 2, 2, 2, 46, 257, 3, 2, 2, 2, 48, 259, 3, 2, 2, 2, 50, 261, 3, 2, 2, 2, 52, 54, 5, 4, 3, 2, 53, 55, 5, 6, 4, 2, 54, 53, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 57, 3, 2, 2, 2, 56, 58, 5, 8, 5, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 60, 3, 2, 2, 2, 59, 61, 5, 10, 6, 2, 60, 59, 3, 2, 2, 2, 60, 61, 3, 2, 2, 2, 61, 62, 3, 2, 2, 2, 62, 63, 5, 20, 11, 2, 63, 64, 7, 2, 2, 3, 64, 3, 3, 2, 2, 2, 65, 66, 7, 3, 2, 2, 66, 67, 7, 36, 2, 2, 67, 68, 7, 43, 2, 2, 68, 5, 3, 2, 2, 2, 69, 70, 7, 4, 2, 2, 70, 71, 7, 36, 2, 2, 71, 72, 7, 40, 2, 2, 72, 7, 3, 2, 2, 2, 73, 74, 7, 5, 2, 2, 74, 75, 7, 36, 2, 2, 75, 76, 7, 40, 2, 2, 76, 9, 3, 2, 2, 2, 77, 78, 7, 6, 2, 2, 78, 79, 7, 36, 2, 2, 79, 80, 7, 26, 2, 2, 80, 81, 5, 12, 7, 2, 81, 82, 7, 26, 2, 2, 82, 11, 3, 2, 2, 2, 83, 86, 8, 7, 1, 2, 84, 86, 5, 14, 8, 2, 85, 83, 3, 2, 2, 2, 85, 84, 3, 2, 2, 2, 86, 92, 3, 2, 2, 2, 87, 88, 12, 3, 2, 2, 88, 89, 7, 28, 2, 2, 89, 91, 5, 14, 8, 2, 90, 87, 3, 2, 2, 2, 91, 94, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 92, 93, 3, 2, 2, 2, 93, 13, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 95, 97, 5, 16, 9, 2, 96, 98, 5, 46, 24, 2, 97, 96, 3, 2, 2, 2, 97, 98, 3, 2, 2, 2, 98, 15, 3, 2, 2, 2, 99, 105, 7, 43, 2, 2, 100, 101, 7, 22, 2, 2, 101, 102, 5, 18, 10, 2, 102, 103, 7, 23, 2, 2, 103, 105, 3, 2, 2, 2, 104, 99, 3, 2, 2, 2, 104, 100, 3, 2, 2, 2, 105, 17, 3, 2, 2, 2, 106, 107, 8, 10, 1, 2, 107, 108, 7, 43, 2, 2, 108, 114, 3, 2, 2, 2, 109, 110, 12, 3, 2, 2, 110, 111, 7, 20, 2, 2, 111, 113, 7, 43, 2, 2, 112, 109, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 19, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 117, 118, 8, 11, 1, 2, 118, 119, 5, 22, 12, 2, 119, 124, 3, 2, 2, 2, 120, 121, 12, 3, 2, 2, 121, 123, 5, 22, 12, 2, 122, 120, 3, 2, 2, 2, 123, 126, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 21, 3, 2, 2, 2, 126, 124, 3, 2, 2, 2, 127, 129, 7, 7, 2, 2, 128, 130, 5, 24, 13, 2, 129, 128, 3, 2, 2, 2, 129, 130, 3, 2, 2, 2, 130, 131, 3, 2, 2, 2, 131, 132, 7, 36, 2, 2, 132, 133, 7, 24, 2, 2, 133, 134, 5, 26, 14, 2, 134, 136, 7, 25, 2, 2, 135, 137, 5, 46, 24, 2, 136, 135, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 23, 3, 2, 2, 2, 138, 139, 7, 22, 2, 2, 139, 140, 7, 43, 2, 2, 140, 141, 7, 23, 2, 2, 141, 25, 3, 2, 2, 2, 142, 143, 8, 14, 1, 2, 143, 151, 5, 28, 15, 2, 144, 145, 7, 22, 2, 2, 145, 146, 5, 26, 14, 2, 146, 147, 7, 23, 2, 2, 147, 151, 3, 2, 2, 2, 148, 149, 7, 21, 2, 2, 149, 151, 5, 26, 14, 3, 150, 142, 3, 2, 2, 2, 150, 144, 3, 2, 2, 2, 150, 148, 3, 2, 2, 2, 151, 157, 3, 2, 2, 2, 152, 153, 12, 4, 2, 2, 153, 154, 9, 2, 2, 2, 154, 156, 5, 26, 14, 5, 155, 152, 3, 2, 2, 2, 156, 159, 3, 2, 2, 2, 157, 155, 3, 2, 2, 2, 157, 158, 3, 2, 2, 2, 158, 27, 3, 2, 2, 2, 159, 157, 3, 2, 2, 2, 160, 161, 5, 30, 16, 2, 161, 162, 7, 17, 2, 2, 162, 163, 5, 38, 20, 2, 163, 172, 3, 2, 2, 2, 164, 165, 7, 43, 2, 2, 165, 166, 7, 22, 2, 2, 166, 167, 5, 30, 16, 2, 167, 168, 7, 23, 2, 2, 168, 169, 7, 17, 2, 2, 169, 170, 5, 38, 20, 2, 170, 172, 3, 2, 2, 2, 171, 160, 3, 2, 2, 2, 171, 164, 3, 2, 2, 2, 172, 29, 3, 2, 2, 2, 173, 175, 5, 32, 17, 2, 174, 173, 3, 2, 2, 2, 174, 175, 3, 2, 2, 2, 175, 185, 3, 2, 2, 2, 176, 186, 7, 8, 2, 2, 177, 186, 7, 9, 2, 2, 178, 186, 7, 10, 2, 2, 179, 186, 7, 11, 2, 2, 180, 186, 7, 12, 2, 2, 181, 186, 7, 13, 2, 2, 182, 186, 7, 14, 2, 2, 183, 186, 7, 15, 2, 2, 184, 186, 5, 42, 22, 2, 185, 176, 3, 2, 2, 2, 185, 177, 3, 2, 2, 2, 185, 178, 3, 2, 2, 2, 185, 179, 3, 2, 2, 2, 185, 180, 3, 2, 2, 2, 185, 181, 3, 2, 2, 2, 185, 182, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 184, 3, 2, 2, 2, 186, 31, 3, 2, 2, 2, 187, 188, 8, 17, 1, 2, 188, 189, 5, 34, 18, 2, 189, 194, 3, 2, 2, 2, 190, 191, 12, 3, 2, 2, 191, 193, 5, 34, 18, 2, 192, 190, 3, 2, 2, 2, 193, 196, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 194, 195, 3, 2, 2, 2, 195, 33, 3, 2, 2, 2, 196, 194, 3, 2, 2, 2, 197, 198, 7, 43, 2, 2, 198, 199, 7, 34, 2, 2, 199, 35, 3, 2, 2, 2, 200, 212, 7, 16, 2, 2, 201, 203, 7, 33, 2, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 207, 3, 2, 2, 2, 204, 208, 7, 41, 2, 2, 205, 206, 7, 41, 2, 2, 206, 208, 7, 42, 2, 2, 207, 204, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 208, 212, 3, 2, 2, 2, 209, 212, 7, 40, 2, 2, 210, 212, 5, 44, 23, 2, 211, 200, 3, 2, 2, 2, 211, 202, 3, 2, 2, 2, 211, 209, 3, 2, 2, 2, 211, 210, 3, 2, 2, 2, 212, 37, 3, 2, 2, 2, 213, 219, 5, 36, 19, 2, 214, 215, 7, 22, 2, 2, 215, 216, 5, 40, 21, 2, 216, 217, 7, 23, 2, 2, 217, 219, 3, 2, 2, 2, 218, 213, 3, 2, 2, 2, 218, 214, 3, 2, 2, 2, 219, 39, 3, 2, 2, 2, 220, 221, 8, 21, 1, 2, 221, 222, 5, 36, 19, 2, 222, 228, 3, 2, 2, 2, 223, 224, 12, 3, 2, 2, 224, 225, 7, 31, 2, 2, 225, 227, 5, 36, 19, 2, 226, 223, 3, 2, 2, 2, 227, 230, 3, 2, 2, 2, 228, 226, 3, 2, 2, 2, 228, 229, 3, 2, 2, 2, 229, 41, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 231, 232, 7, 27, 2, 2, 232, 245, 7, 43, 2, 2, 233, 234, 7, 27, 2, 2, 234, 235, 7, 43, 2, 2, 235, 236, 7, 29, 2, 2, 236, 237, 7, 41, 2, 2, 237, 245, 7, 30, 2, 2, 238, 239, 7, 27, 2, 2, 239, 240, 7, 43, 2, 2, 240, 241, 7, 29, 2, 2, 241, 242, 5, 44, 23, 2, 242, 243, 7, 30, 2, 2, 243, 245, 3, 2, 2, 2, 244, 231, 3, 2, 2, 2, 244, 233, 3, 2, 2, 2, 244, 238, 3, 2, 2, 2, 245, 43, 3, 2, 2, 2, 246, 250, 7, 26, 2, 2, 247, 249, 10, 3, 2, 2, 248, 247, 3, 2, 2, 2, 249, 252, 3, 2, 2, 2, 250, 248, 3, 2, 2, 2, 250, 251, 3, 2, 2, 2, 251, 253, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 253, 254, 7, 26, 2, 2, 254, 45, 3, 2, 2, 2, 255, 258, 5, 48, 25, 2, 256, 258, 5, 50, 26, 2, 257, 255, 3, 2, 2, 2, 257, 256, 3, 2, 2, 2, 258, 47, 3, 2, 2, 2, 259, 260, 9, 4, 2, 2, 260, 49, 3, 2, 2, 2, 261, 262, 7, 29, 2, 2, 262, 263, 7, 41, 2, 2, 263, 264, 7, 31, 2, 2, 264, 265, 7, 41, 2, 2, 265, 266, 7, 30, 2, 2, 266, 51, 3, 2, 2, 2, 27, 54, 57, 60, 85, 92, 97, 104, 114, 124, 129, 136, 150, 157, 171, 174, 185, 194, 202, 207, 211, 218, 228, 244, 250, 257]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 44, 263, 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, 3, 2, 3, 2, 5, 2, 55, 10, 2, 3, 2, 5, 2, 58, 10, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 5, 6, 79, 10, 6, 3, 6, 3, 6, 3, 6, 7, 6, 84, 10, 6, 12, 6, 14, 6, 87, 11, 6, 3, 7, 3, 7, 5, 7, 91, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 98, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 106, 10, 9, 12, 9, 14, 9, 109, 11, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 116, 10, 10, 12, 10, 14, 10, 119, 11, 10, 3, 11, 3, 11, 3, 12, 3, 12, 5, 12, 125, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 132, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 146, 10, 14, 3, 14, 3, 14, 3, 14, 7, 14, 151, 10, 14, 12, 14, 14, 14, 154, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 167, 10, 15, 3, 16, 5, 16, 170, 10, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 181, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 7, 17, 188, 10, 17, 12, 17, 14, 17, 191, 11, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 5, 19, 198, 10, 19, 3, 19, 3, 19, 3, 19, 5, 19, 203, 10, 19, 3, 19, 3, 19, 5, 19, 207, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 214, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 222, 10, 21, 12, 21, 14, 21, 225, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 240, 10, 22, 3, 23, 3, 23, 7, 23, 244, 10, 23, 12, 23, 14, 23, 247, 11, 23, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 253, 10, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 2, 8, 10, 16, 18, 26, 32, 40, 27, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 2, 6, 4, 2, 26, 26, 35, 35, 3, 2, 17, 18, 3, 2, 25, 25, 3, 2, 36, 38, 2, 272, 2, 52, 3, 2, 2, 2, 4, 62, 3, 2, 2, 2, 6, 66, 3, 2, 2, 2, 8, 70, 3, 2, 2, 2, 10, 78, 3, 2, 2, 2, 12, 88, 3, 2, 2, 2, 14, 97, 3, 2, 2, 2, 16, 99, 3, 2, 2, 2, 18, 110, 3, 2, 2, 2, 20, 120, 3, 2, 2, 2, 22, 122, 3, 2, 2, 2, 24, 133, 3, 2, 2, 2, 26, 145, 3, 2, 2, 2, 28, 166, 3, 2, 2, 2, 30, 169, 3, 2, 2, 2, 32, 182, 3, 2, 2, 2, 34, 192, 3, 2, 2, 2, 36, 206, 3, 2, 2, 2, 38, 213, 3, 2, 2, 2, 40, 215, 3, 2, 2, 2, 42, 239, 3, 2, 2, 2, 44, 241, 3, 2, 2, 2, 46, 252, 3, 2, 2, 2, 48, 254, 3, 2, 2, 2, 50, 256, 3, 2, 2, 2, 52, 54, 5, 4, 3, 2, 53, 55, 5, 6, 4, 2, 54, 53, 3, 2, 2, 2, 54, 55, 3, 2, 2, 2, 55, 57, 3, 2, 2, 2, 56, 58, 5, 8, 5, 2, 57, 56, 3, 2, 2, 2, 57, 58, 3, 2, 2, 2, 58, 59, 3, 2, 2, 2, 59, 60, 5, 18, 10, 2, 60, 61, 7, 2, 2, 3, 61, 3, 3, 2, 2, 2, 62, 63, 7, 3, 2, 2, 63, 64, 7, 35, 2, 2, 64, 65, 7, 42, 2, 2, 65, 5, 3, 2, 2, 2, 66, 67, 7, 4, 2, 2, 67, 68, 7, 35, 2, 2, 68, 69, 7, 39, 2, 2, 69, 7, 3, 2, 2, 2, 70, 71, 7, 5, 2, 2, 71, 72, 7, 35, 2, 2, 72, 73, 7, 25, 2, 2, 73, 74, 5, 10, 6, 2, 74, 75, 7, 25, 2, 2, 75, 9, 3, 2, 2, 2, 76, 79, 8, 6, 1, 2, 77, 79, 5, 12, 7, 2, 78, 76, 3, 2, 2, 2, 78, 77, 3, 2, 2, 2, 79, 85, 3, 2, 2, 2, 80, 81, 12, 3, 2, 2, 81, 82, 7, 27, 2, 2, 82, 84, 5, 12, 7, 2, 83, 80, 3, 2, 2, 2, 84, 87, 3, 2, 2, 2, 85, 83, 3, 2, 2, 2, 85, 86, 3, 2, 2, 2, 86, 11, 3, 2, 2, 2, 87, 85, 3, 2, 2, 2, 88, 90, 5, 14, 8, 2, 89, 91, 5, 46, 24, 2, 90, 89, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 13, 3, 2, 2, 2, 92, 98, 7, 42, 2, 2, 93, 94, 7, 21, 2, 2, 94, 95, 5, 16, 9, 2, 95, 96, 7, 22, 2, 2, 96, 98, 3, 2, 2, 2, 97, 92, 3, 2, 2, 2, 97, 93, 3, 2, 2, 2, 98, 15, 3, 2, 2, 2, 99, 100, 8, 9, 1, 2, 100, 101, 7, 42, 2, 2, 101, 107, 3, 2, 2, 2, 102, 103, 12, 3, 2, 2, 103, 104, 7, 19, 2, 2, 104, 106, 7, 42, 2, 2, 105, 102, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 17, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 8, 10, 1, 2, 111, 112, 5, 22, 12, 2, 112, 117, 3, 2, 2, 2, 113, 114, 12, 3, 2, 2, 114, 116, 5, 22, 12, 2, 115, 113, 3, 2, 2, 2, 116, 119, 3, 2, 2, 2, 117, 115, 3, 2, 2, 2, 117, 118, 3, 2, 2, 2, 118, 19, 3, 2, 2, 2, 119, 117, 3, 2, 2, 2, 120, 121, 9, 2, 2, 2, 121, 21, 3, 2, 2, 2, 122, 124, 7, 6, 2, 2, 123, 125, 5, 24, 13, 2, 124, 123, 3, 2, 2, 2, 124, 125, 3, 2, 2, 2, 125, 126, 3, 2, 2, 2, 126, 127, 5, 20, 11, 2, 127, 128, 7, 23, 2, 2, 128, 129, 5, 26, 14, 2, 129, 131, 7, 24, 2, 2, 130, 132, 5, 46, 24, 2, 131, 130, 3, 2, 2, 2, 131, 132, 3, 2, 2, 2, 132, 23, 3, 2, 2, 2, 133, 134, 7, 21, 2, 2, 134, 135, 7, 42, 2, 2, 135, 136, 7, 22, 2, 2, 136, 25, 3, 2, 2, 2, 137, 138, 8, 14, 1, 2, 138, 146, 5, 28, 15, 2, 139, 140, 7, 21, 2, 2, 140, 141, 5, 26, 14, 2, 141, 142, 7, 22, 2, 2, 142, 146, 3, 2, 2, 2, 143, 144, 7, 20, 2, 2, 144, 146, 5, 26, 14, 3, 145, 137, 3, 2, 2, 2, 145, 139, 3, 2, 2, 2, 145, 143, 3, 2, 2, 2, 146, 152, 3, 2, 2, 2, 147, 148, 12, 4, 2, 2, 148, 149, 9, 3, 2, 2, 149, 151, 5, 26, 14, 5, 150, 147, 3, 2, 2, 2, 151, 154, 3, 2, 2, 2, 152, 150, 3, 2, 2, 2, 152, 153, 3, 2, 2, 2, 153, 27, 3, 2, 2, 2, 154, 152, 3, 2, 2, 2, 155, 156, 5, 30, 16, 2, 156, 157, 7, 16, 2, 2, 157, 158, 5, 38, 20, 2, 158, 167, 3, 2, 2, 2, 159, 160, 7, 42, 2, 2, 160, 161, 7, 21, 2, 2, 161, 162, 5, 30, 16, 2, 162, 163, 7, 22, 2, 2, 163, 164, 7, 16, 2, 2, 164, 165, 5, 38, 20, 2, 165, 167, 3, 2, 2, 2, 166, 155, 3, 2, 2, 2, 166, 159, 3, 2, 2, 2, 167, 29, 3, 2, 2, 2, 168, 170, 5, 32, 17, 2, 169, 168, 3, 2, 2, 2, 169, 170, 3, 2, 2, 2, 170, 180, 3, 2, 2, 2, 171, 181, 7, 7, 2, 2, 172, 181, 7, 8, 2, 2, 173, 181, 7, 9, 2, 2, 174, 181, 7, 10, 2, 2, 175, 181, 7, 11, 2, 2, 176, 181, 7, 12, 2, 2, 177, 181, 7, 13, 2, 2, 178, 181, 7, 14, 2, 2, 179, 181, 5, 42, 22, 2, 180, 171, 3, 2, 2, 2, 180, 172, 3, 2, 2, 2, 180, 173, 3, 2, 2, 2, 180, 174, 3, 2, 2, 2, 180, 175, 3, 2, 2, 2, 180, 176, 3, 2, 2, 2, 180, 177, 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 180, 179, 3, 2, 2, 2, 181, 31, 3, 2, 2, 2, 182, 183, 8, 17, 1, 2, 183, 184, 5, 34, 18, 2, 184, 189, 3, 2, 2, 2, 185, 186, 12, 3, 2, 2, 186, 188, 5, 34, 18, 2, 187, 185, 3, 2, 2, 2, 188, 191, 3, 2, 2, 2, 189, 187, 3, 2, 2, 2, 189, 190, 3, 2, 2, 2, 190, 33, 3, 2, 2, 2, 191, 189, 3, 2, 2, 2, 192, 193, 7, 42, 2, 2, 193, 194, 7, 33, 2, 2, 194, 35, 3, 2, 2, 2, 195, 207, 7, 15, 2, 2, 196, 198, 7, 32, 2, 2, 197, 196, 3, 2, 2, 2, 197, 198, 3, 2, 2, 2, 198, 202, 3, 2, 2, 2, 199, 203, 7, 40, 2, 2, 200, 201, 7, 40, 2, 2, 201, 203, 7, 41, 2, 2, 202, 199, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 203, 207, 3, 2, 2, 2, 204, 207, 7, 39, 2, 2, 205, 207, 5, 44, 23, 2, 206, 195, 3, 2, 2, 2, 206, 197, 3, 2, 2, 2, 206, 204, 3, 2, 2, 2, 206, 205, 3, 2, 2, 2, 207, 37, 3, 2, 2, 2, 208, 214, 5, 36, 19, 2, 209, 210, 7, 21, 2, 2, 210, 211, 5, 40, 21, 2, 211, 212, 7, 22, 2, 2, 212, 214, 3, 2, 2, 2, 213, 208, 3, 2, 2, 2, 213, 209, 3, 2, 2, 2, 214, 39, 3, 2, 2, 2, 215, 216, 8, 21, 1, 2, 216, 217, 5, 36, 19, 2, 217, 223, 3, 2, 2, 2, 218, 219, 12, 3, 2, 2, 219, 220, 7, 30, 2, 2, 220, 222, 5, 36, 19, 2, 221, 218, 3, 2, 2, 2, 222, 225, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 41, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 226, 227, 7, 26, 2, 2, 227, 240, 7, 42, 2, 2, 228, 229, 7, 26, 2, 2, 229, 230, 7, 42, 2, 2, 230, 231, 7, 28, 2, 2, 231, 232, 7, 40, 2, 2, 232, 240, 7, 29, 2, 2, 233, 234, 7, 26, 2, 2, 234, 235, 7, 42, 2, 2, 235, 236, 7, 28, 2, 2, 236, 237, 5, 44, 23, 2, 237, 238, 7, 29, 2, 2, 238, 240, 3, 2, 2, 2, 239, 226, 3, 2, 2, 2, 239, 228, 3, 2, 2, 2, 239, 233, 3, 2, 2, 2, 240, 43, 3, 2, 2, 2, 241, 245, 7, 25, 2, 2, 242, 244, 10, 4, 2, 2, 243, 242, 3, 2, 2, 2, 244, 247, 3, 2, 2, 2, 245, 243, 3, 2, 2, 2, 245, 246, 3, 2, 2, 2, 246, 248, 3, 2, 2, 2, 247, 245, 3, 2, 2, 2, 248, 249, 7, 25, 2, 2, 249, 45, 3, 2, 2, 2, 250, 253, 5, 48, 25, 2, 251, 253, 5, 50, 26, 2, 252, 250, 3, 2, 2, 2, 252, 251, 3, 2, 2, 2, 253, 47, 3, 2, 2, 2, 254, 255, 9, 5, 2, 2, 255, 49, 3, 2, 2, 2, 256, 257, 7, 28, 2, 2, 257, 258, 7, 40, 2, 2, 258, 259, 7, 30, 2, 2, 259, 260, 7, 40, 2, 2, 260, 261, 7, 29, 2, 2, 261, 51, 3, 2, 2, 2, 26, 54, 57, 78, 85, 90, 97, 107, 117, 124, 131, 145, 152, 166, 169, 180, 189, 197, 202, 206, 213, 223, 239, 245, 252]
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens
index 8ae22bf..e2c3312 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.tokens
@@ -11,69 +11,67 @@
T__10=11
T__11=12
T__12=13
-T__13=14
-PRED_OP=15
-AND=16
-OR=17
-VERT=18
-EXCL=19
-LPAREN=20
-RPAREN=21
-LCURLY=22
-RCURLY=23
-SQUOTE=24
-TILDA=25
-RIGHT=26
-LBR=27
-RBR=28
-COMMA=29
-COLON=30
-MINUS=31
-DOT=32
-UNDERSCORE=33
-EQ=34
-PLUS=35
-QUESTION=36
-STAR=37
-BOOL=38
-INT=39
-EXP=40
-ID=41
-WS=42
-ErrorCharacter=43
+PRED_OP=14
+AND=15
+OR=16
+VERT=17
+EXCL=18
+LPAREN=19
+RPAREN=20
+LCURLY=21
+RCURLY=22
+SQUOTE=23
+TILDA=24
+RIGHT=25
+LBR=26
+RBR=27
+COMMA=28
+COLON=29
+MINUS=30
+DOT=31
+UNDERSCORE=32
+EQ=33
+PLUS=34
+QUESTION=35
+STAR=36
+BOOL=37
+INT=38
+EXP=39
+ID=40
+WS=41
+ErrorCharacter=42
'intent'=1
-'conv'=2
-'ordered'=3
-'flow'=4
-'term'=5
-'id'=6
-'aliases'=7
-'startidx'=8
-'endidx'=9
-'parent'=10
-'groups'=11
-'ancestors'=12
-'value'=13
-'null'=14
-'&&'=16
-'||'=17
-'|'=18
-'!'=19
-'('=20
-')'=21
-'{'=22
-'}'=23
-'\''=24
-'~'=25
-'>>'=26
-'['=27
-']'=28
-','=29
-':'=30
-'-'=31
-'.'=32
-'_'=33
-'='=34
-'+'=35
-'?'=36
-'*'=37
+'ordered'=2
+'flow'=3
+'term'=4
+'id'=5
+'aliases'=6
+'startidx'=7
+'endidx'=8
+'parent'=9
+'groups'=10
+'ancestors'=11
+'value'=12
+'null'=13
+'&&'=15
+'||'=16
+'|'=17
+'!'=18
+'('=19
+')'=20
+'{'=21
+'}'=22
+'\''=23
+'~'=24
+'>>'=25
+'['=26
+']'=27
+','=28
+':'=29
+'-'=30
+'.'=31
+'_'=32
+'='=33
+'+'=34
+'?'=35
+'*'=36
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java
index 14bfb7d..32fdf9c 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4\NCIntentDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.model.intent.impl.antlr4;
import org.antlr.v4.runtime.ParserRuleContext;
@@ -40,18 +40,6 @@
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterConvDecl(NCIntentDslParser.ConvDeclContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
- @Override public void exitConvDecl(NCIntentDslParser.ConvDeclContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation does nothing.</p>
- */
@Override public void enterOrderedDecl(NCIntentDslParser.OrderedDeclContext ctx) { }
/**
* {@inheritDoc}
@@ -136,6 +124,18 @@
*
* <p>The default implementation does nothing.</p>
*/
+ @Override public void enterTermEq(NCIntentDslParser.TermEqContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitTermEq(NCIntentDslParser.TermEqContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
@Override public void enterTerm(NCIntentDslParser.TermContext ctx) { }
/**
* {@inheritDoc}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseVisitor.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseVisitor.java
deleted file mode 100644
index 5865db4..0000000
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslBaseVisitor.java
+++ /dev/null
@@ -1,189 +0,0 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 by ANTLR 4.8
-package org.apache.nlpcraft.model.intent.impl.antlr4;
-import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
-
-/**
- * This class provides an empty implementation of {@link NCIntentDslVisitor},
- * which can be extended to create a visitor which only needs to handle a subset
- * of the available methods.
- *
- * @param <T> The return type of the visit operation. Use {@link Void} for
- * operations with no return type.
- */
-public class NCIntentDslBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements NCIntentDslVisitor<T> {
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitIntent(NCIntentDslParser.IntentContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitIntentId(NCIntentDslParser.IntentIdContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitConvDecl(NCIntentDslParser.ConvDeclContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitOrderedDecl(NCIntentDslParser.OrderedDeclContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitFlowDecl(NCIntentDslParser.FlowDeclContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitFlow(NCIntentDslParser.FlowContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitFlowItem(NCIntentDslParser.FlowItemContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitFlowItemIds(NCIntentDslParser.FlowItemIdsContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitIdList(NCIntentDslParser.IdListContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitTerms(NCIntentDslParser.TermsContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitTerm(NCIntentDslParser.TermContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitTermId(NCIntentDslParser.TermIdContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitItem(NCIntentDslParser.ItemContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitPredicate(NCIntentDslParser.PredicateContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitLval(NCIntentDslParser.LvalContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitLvalQual(NCIntentDslParser.LvalQualContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitLvalPart(NCIntentDslParser.LvalPartContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitRvalSingle(NCIntentDslParser.RvalSingleContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitRval(NCIntentDslParser.RvalContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitRvalList(NCIntentDslParser.RvalListContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitMeta(NCIntentDslParser.MetaContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitQstring(NCIntentDslParser.QstringContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitMinMax(NCIntentDslParser.MinMaxContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitMinMaxShortcut(NCIntentDslParser.MinMaxShortcutContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitMinMaxRange(NCIntentDslParser.MinMaxRangeContext ctx) { return visitChildren(ctx); }
-}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp
index fcb2a0c..4fb76df 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.interp
@@ -1,7 +1,6 @@
token literal names:
null
'intent'
-'conv'
'ordered'
'flow'
'term'
@@ -59,7 +58,6 @@
null
null
null
-null
PRED_OP
AND
OR
@@ -104,7 +102,6 @@
T__10
T__11
T__12
-T__13
PRED_OP
AND
OR
@@ -143,4 +140,4 @@
DEFAULT_MODE
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 45, 294, 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, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 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, 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, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 195, 10, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 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, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 253, 10, 39, 3, 40, 3, 40, 3, 40, 7, 40, 258, 10, 40, 12, 40, 14, 40, 261, 11, 40, 5, 40, 263, 10, 40, 3, 41, 3, 41, 6, 41, 267, 10, 41, 13, 41, 14, 41, 268, 3, 42, 3, 42, 6, 42, 273, 10, 42, 13, 42, 14, 42, 274, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 281, 10, 42, 12, 42, 14, 42, 284, 11, 42, 3, 43, 6, 43, 287, 10, 43, 13, 43, 14, 43, 288, 3, 43, 3, 43, 3, 44, 3, 44, 2, 2, 45, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 3, 2, 9, 4, 2, 62, 62, 64, 64, 3, 2, 51, 59, 4, 2, 50, 59, 97, 97, 3, 2, 50, 59, 4, 2, 67, 92, 99, 124, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 2, 310, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 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, 29, 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, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 3, 89, 3, 2, 2, 2, 5, 96, 3, 2, 2, 2, 7, 101, 3, 2, 2, 2, 9, 109, 3, 2, 2, 2, 11, 114, 3, 2, 2, 2, 13, 119, 3, 2, 2, 2, 15, 122, 3, 2, 2, 2, 17, 130, 3, 2, 2, 2, 19, 139, 3, 2, 2, 2, 21, 146, 3, 2, 2, 2, 23, 153, 3, 2, 2, 2, 25, 160, 3, 2, 2, 2, 27, 170, 3, 2, 2, 2, 29, 176, 3, 2, 2, 2, 31, 194, 3, 2, 2, 2, 33, 196, 3, 2, 2, 2, 35, 199, 3, 2, 2, 2, 37, 202, 3, 2, 2, 2, 39, 204, 3, 2, 2, 2, 41, 206, 3, 2, 2, 2, 43, 208, 3, 2, 2, 2, 45, 210, 3, 2, 2, 2, 47, 212, 3, 2, 2, 2, 49, 214, 3, 2, 2, 2, 51, 216, 3, 2, 2, 2, 53, 218, 3, 2, 2, 2, 55, 221, 3, 2, 2, 2, 57, 223, 3, 2, 2, 2, 59, 225, 3, 2, 2, 2, 61, 227, 3, 2, 2, 2, 63, 229, 3, 2, 2, 2, 65, 231, 3, 2, 2, 2, 67, 233, 3, 2, 2, 2, 69, 235, 3, 2, 2, 2, 71, 237, 3, 2, 2, 2, 73, 239, 3, 2, 2, 2, 75, 241, 3, 2, 2, 2, 77, 252, 3, 2, 2, 2, 79, 262, 3, 2, 2, 2, 81, 264, 3, 2, 2, 2, 83, 272, 3, 2, 2, 2, 85, 286, 3, 2, 2, 2, 87, 292, 3, 2, 2, 2, 89, 90, 7, 107, 2, 2, 90, 91, 7, 112, 2, 2, 91, 92, 7, 118, 2, 2, 92, 93, 7, 103, 2, 2, 93, 94, 7, 112, 2, 2, 94, 95, 7, 118, 2, 2, 95, 4, 3, 2, 2, 2, 96, 97, 7, 101, 2, 2, 97, 98, 7, 113, 2, 2, 98, 99, 7, 112, 2, 2, 99, 100, 7, 120, 2, 2, 100, 6, 3, 2, 2, 2, 101, 102, 7, 113, 2, 2, 102, 103, 7, 116, 2, 2, 103, 104, 7, 102, 2, 2, 104, 105, 7, 103, 2, 2, 105, 106, 7, 116, 2, 2, 106, 107, 7, 103, 2, 2, 107, 108, 7, 102, 2, 2, 108, 8, 3, 2, 2, 2, 109, 110, 7, 104, 2, 2, 110, 111, 7, 110, 2, 2, 111, 112, 7, 113, 2, 2, 112, 113, 7, 121, 2, 2, 113, 10, 3, 2, 2, 2, 114, 115, 7, 118, 2, 2, 115, 116, 7, 103, 2, 2, 116, 117, 7, 116, 2, 2, 117, 118, 7, 111, 2, 2, 118, 12, 3, 2, 2, 2, 119, 120, 7, 107, 2, 2, 120, 121, 7, 102, 2, 2, 121, 14, 3, 2, 2, 2, 122, 123, 7, 99, 2, 2, 123, 124, 7, 110, 2, 2, 124, 125, 7, 107, 2, 2, 125, 126, 7, 99, 2, 2, 126, 127, 7, 117, 2, 2, 127, 128, 7, 103, 2, 2, 128, 129, 7, 117, 2, 2, 129, 16, 3, 2, 2, 2, 130, 131, 7, 117, 2, 2, 131, 132, 7, 118, 2, 2, 132, 133, 7, 99, 2, 2, 133, 134, 7, 116, 2, 2, 134, 135, 7, 118, 2, 2, 135, 136, 7, 107, 2, 2, 136, 137, 7, 102, 2, 2, 137, 138, 7, 122, 2, 2, 138, 18, 3, 2, 2, 2, 139, 140, 7, 103, 2, 2, 140, 141, 7, 112, 2, 2, 141, 142, 7, 102, 2, 2, 142, 143, 7, 107, 2, 2, 143, 144, 7, 102, 2, 2, 144, 145, 7, 122, 2, 2, 145, 20, 3, 2, 2, 2, 146, 147, 7, 114, 2, 2, 147, 148, 7, 99, 2, 2, 148, 149, 7, 116, 2, 2, 149, 150, 7, 103, 2, 2, 150, 151, 7, 112, 2, 2, 151, 152, 7, 118, 2, 2, 152, 22, 3, 2, 2, 2, 153, 154, 7, 105, 2, 2, 154, 155, 7, 116, 2, 2, 155, 156, 7, 113, 2, 2, 156, 157, 7, 119, 2, 2, 157, 158, 7, 114, 2, 2, 158, 159, 7, 117, 2, 2, 159, 24, 3, 2, 2, 2, 160, 161, 7, 99, 2, 2, 161, 162, 7, 112, 2, 2, 162, 163, 7, 101, 2, 2, 163, 164, 7, 103, 2, 2, 164, 165, 7, 117, 2, 2, 165, 166, 7, 118, 2, 2, 166, 167, 7, 113, 2, 2, 167, 168, 7, 116, 2, 2, 168, 169, 7, 117, 2, 2, 169, 26, 3, 2, 2, 2, 170, 171, 7, 120, 2, 2, 171, 172, 7, 99, 2, 2, 172, 173, 7, 110, 2, 2, 173, 174, 7, 119, 2, 2, 174, 175, 7, 103, 2, 2, 175, 28, 3, 2, 2, 2, 176, 177, 7, 112, 2, 2, 177, 178, 7, 119, 2, 2, 178, 179, 7, 110, 2, 2, 179, 180, 7, 110, 2, 2, 180, 30, 3, 2, 2, 2, 181, 182, 7, 63, 2, 2, 182, 195, 7, 63, 2, 2, 183, 184, 7, 35, 2, 2, 184, 195, 7, 63, 2, 2, 185, 186, 7, 64, 2, 2, 186, 195, 7, 63, 2, 2, 187, 188, 7, 62, 2, 2, 188, 195, 7, 63, 2, 2, 189, 195, 9, 2, 2, 2, 190, 191, 7, 66, 2, 2, 191, 195, 7, 66, 2, 2, 192, 193, 7, 35, 2, 2, 193, 195, 7, 66, 2, 2, 194, 181, 3, 2, 2, 2, 194, 183, 3, 2, 2, 2, 194, 185, 3, 2, 2, 2, 194, 187, 3, 2, 2, 2, 194, 189, 3, 2, 2, 2, 194, 190, 3, 2, 2, 2, 194, 192, 3, 2, 2, 2, 195, 32, 3, 2, 2, 2, 196, 197, 7, 40, 2, 2, 197, 198, 7, 40, 2, 2, 198, 34, 3, 2, 2, 2, 199, 200, 7, 126, 2, 2, 200, 201, 7, 126, 2, 2, 201, 36, 3, 2, 2, 2, 202, 203, 7, 126, 2, 2, 203, 38, 3, 2, 2, 2, 204, 205, 7, 35, 2, 2, 205, 40, 3, 2, 2, 2, 206, 207, 7, 42, 2, 2, 207, 42, 3, 2, 2, 2, 208, 209, 7, 43, 2, 2, 209, 44, 3, 2, 2, 2, 210, 211, 7, 125, 2, 2, 211, 46, 3, 2, 2, 2, 212, 213, 7, 127, 2, 2, 213, 48, 3, 2, 2, 2, 214, 215, 7, 41, 2, 2, 215, 50, 3, 2, 2, 2, 216, 217, 7, 128, 2, 2, 217, 52, 3, 2, 2, 2, 218, 219, 7, 64, 2, 2, 219, 220, 7, 64, 2, 2, 220, 54, 3, 2, 2, 2, 221, 222, 7, 93, 2, 2, 222, 56, 3, 2, 2, 2, 223, 224, 7, 95, 2, 2, 224, 58, 3, 2, 2, 2, 225, 226, 7, 46, 2, 2, 226, 60, 3, 2, 2, 2, 227, 228, 7, 60, 2, 2, 228, 62, 3, 2, 2, 2, 229, 230, 7, 47, 2, 2, 230, 64, 3, 2, 2, 2, 231, 232, 7, 48, 2, 2, 232, 66, 3, 2, 2, 2, 233, 234, 7, 97, 2, 2, 234, 68, 3, 2, 2, 2, 235, 236, 7, 63, 2, 2, 236, 70, 3, 2, 2, 2, 237, 238, 7, 45, 2, 2, 238, 72, 3, 2, 2, 2, 239, 240, 7, 65, 2, 2, 240, 74, 3, 2, 2, 2, 241, 242, 7, 44, 2, 2, 242, 76, 3, 2, 2, 2, 243, 244, 7, 118, 2, 2, 244, 245, 7, 116, 2, 2, 245, 246, 7, 119, 2, 2, 246, 253, 7, 103, 2, 2, 247, 248, 7, 104, 2, 2, 248, 249, 7, 99, 2, 2, 249, 250, 7, 110, 2, 2, 250, 251, 7, 117, 2, 2, 251, 253, 7, 103, 2, 2, 252, 243, 3, 2, 2, 2, 252, 247, 3, 2, 2, 2, 253, 78, 3, 2, 2, 2, 254, 263, 7, 50, 2, 2, 255, 259, 9, 3, 2, 2, 256, 258, 9, 4, 2, 2, 257, 256, 3, 2, 2, 2, 258, 261, 3, 2, 2, 2, 259, 257, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 263, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 262, 254, 3, 2, 2, 2, 262, 255, 3, 2, 2, 2, 263, 80, 3, 2, 2, 2, 264, 266, 5, 65, 33, 2, 265, 267, 9, 5, 2, 2, 266, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 82, 3, 2, 2, 2, 270, 273, 5, 67, 34, 2, 271, 273, 9, 6, 2, 2, 272, 270, 3, 2, 2, 2, 272, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 272, 3, 2, 2, 2, 274, 275, 3, 2, 2, 2, 275, 282, 3, 2, 2, 2, 276, 281, 9, 7, 2, 2, 277, 281, 5, 61, 31, 2, 278, 281, 5, 63, 32, 2, 279, 281, 5, 67, 34, 2, 280, 276, 3, 2, 2, 2, 280, 277, 3, 2, 2, 2, 280, 278, 3, 2, 2, 2, 280, 279, 3, 2, 2, 2, 281, 284, 3, 2, 2, 2, 282, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 84, 3, 2, 2, 2, 284, 282, 3, 2, 2, 2, 285, 287, 9, 8, 2, 2, 286, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 286, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 291, 8, 43, 2, 2, 291, 86, 3, 2, 2, 2, 292, 293, 11, 2, 2, 2, 293, 88, 3, 2, 2, 2, 13, 2, 194, 252, 259, 262, 268, 272, 274, 280, 282, 288, 3, 8, 2, 2]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 44, 287, 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, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 188, 10, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 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, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 246, 10, 38, 3, 39, 3, 39, 3, 39, 7, 39, 251, 10, 39, 12, 39, 14, 39, 254, 11, 39, 5, 39, 256, 10, 39, 3, 40, 3, 40, 6, 40, 260, 10, 40, 13, 40, 14, 40, 261, 3, 41, 3, 41, 6, 41, 266, 10, 41, 13, 41, 14, 41, 267, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 274, 10, 41, 12, 41, 14, 41, 277, 11, 41, 3, 42, 6, 42, 280, 10, 42, 13, 42, 14, 42, 281, 3, 42, 3, 42, 3, 43, 3, 43, 2, 2, 44, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 3, 2, 9, 4, 2, 62, 62, 64, 64, 3, 2, 51, 59, 4, 2, 50, 59, 97, 97, 3, 2, 50, 59, 4, 2, 67, 92, 99, 124, 5, 2, 50, 59, 67, 92, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 2, 303, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 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, 29, 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, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 3, 87, 3, 2, 2, 2, 5, 94, 3, 2, 2, 2, 7, 102, 3, 2, 2, 2, 9, 107, 3, 2, 2, 2, 11, 112, 3, 2, 2, 2, 13, 115, 3, 2, 2, 2, 15, 123, 3, 2, 2, 2, 17, 132, 3, 2, 2, 2, 19, 139, 3, 2, 2, 2, 21, 146, 3, 2, 2, 2, 23, 153, 3, 2, 2, 2, 25, 163, 3, 2, 2, 2, 27, 169, 3, 2, 2, 2, 29, 187, 3, 2, 2, 2, 31, 189, 3, 2, 2, 2, 33, 192, 3, 2, 2, 2, 35, 195, 3, 2, 2, 2, 37, 197, 3, 2, 2, 2, 39, 199, 3, 2, 2, 2, 41, 201, 3, 2, 2, 2, 43, 203, 3, 2, 2, 2, 45, 205, 3, 2, 2, 2, 47, 207, 3, 2, 2, 2, 49, 209, 3, 2, 2, 2, 51, 211, 3, 2, 2, 2, 53, 214, 3, 2, 2, 2, 55, 216, 3, 2, 2, 2, 57, 218, 3, 2, 2, 2, 59, 220, 3, 2, 2, 2, 61, 222, 3, 2, 2, 2, 63, 224, 3, 2, 2, 2, 65, 226, 3, 2, 2, 2, 67, 228, 3, 2, 2, 2, 69, 230, 3, 2, 2, 2, 71, 232, 3, 2, 2, 2, 73, 234, 3, 2, 2, 2, 75, 245, 3, 2, 2, 2, 77, 255, 3, 2, 2, 2, 79, 257, 3, 2, 2, 2, 81, 265, 3, 2, 2, 2, 83, 279, 3, 2, 2, 2, 85, 285, 3, 2, 2, 2, 87, 88, 7, 107, 2, 2, 88, 89, 7, 112, 2, 2, 89, 90, 7, 118, 2, 2, 90, 91, 7, 103, 2, 2, 91, 92, 7, 112, 2, 2, 92, 93, 7, 118, 2, 2, 93, 4, 3, 2, 2, 2, 94, 95, 7, 113, 2, 2, 95, 96, 7, 116, 2, 2, 96, 97, 7, 102, 2, 2, 97, 98, 7, 103, 2, 2, 98, 99, 7, 116, 2, 2, 99, 100, 7, 103, 2, 2, 100, 101, 7, 102, 2, 2, 101, 6, 3, 2, 2, 2, 102, 103, 7, 104, 2, 2, 103, 104, 7, 110, 2, 2, 104, 105, 7, 113, 2, 2, 105, 106, 7, 121, 2, 2, 106, 8, 3, 2, 2, 2, 107, 108, 7, 118, 2, 2, 108, 109, 7, 103, 2, 2, 109, 110, 7, 116, 2, 2, 110, 111, 7, 111, 2, 2, 111, 10, 3, 2, 2, 2, 112, 113, 7, 107, 2, 2, 113, 114, 7, 102, 2, 2, 114, 12, 3, 2, 2, 2, 115, 116, 7, 99, 2, 2, 116, 117, 7, 110, 2, 2, 117, 118, 7, 107, 2, 2, 118, 119, 7, 99, 2, 2, 119, 120, 7, 117, 2, 2, 120, 121, 7, 103, 2, 2, 121, 122, 7, 117, 2, 2, 122, 14, 3, 2, 2, 2, 123, 124, 7, 117, 2, 2, 124, 125, 7, 118, 2, 2, 125, 126, 7, 99, 2, 2, 126, 127, 7, 116, 2, 2, 127, 128, 7, 118, 2, 2, 128, 129, 7, 107, 2, 2, 129, 130, 7, 102, 2, 2, 130, 131, 7, 122, 2, 2, 131, 16, 3, 2, 2, 2, 132, 133, 7, 103, 2, 2, 133, 134, 7, 112, 2, 2, 134, 135, 7, 102, 2, 2, 135, 136, 7, 107, 2, 2, 136, 137, 7, 102, 2, 2, 137, 138, 7, 122, 2, 2, 138, 18, 3, 2, 2, 2, 139, 140, 7, 114, 2, 2, 140, 141, 7, 99, 2, 2, 141, 142, 7, 116, 2, 2, 142, 143, 7, 103, 2, 2, 143, 144, 7, 112, 2, 2, 144, 145, 7, 118, 2, 2, 145, 20, 3, 2, 2, 2, 146, 147, 7, 105, 2, 2, 147, 148, 7, 116, 2, 2, 148, 149, 7, 113, 2, 2, 149, 150, 7, 119, 2, 2, 150, 151, 7, 114, 2, 2, 151, 152, 7, 117, 2, 2, 152, 22, 3, 2, 2, 2, 153, 154, 7, 99, 2, 2, 154, 155, 7, 112, 2, 2, 155, 156, 7, 101, 2, 2, 156, 157, 7, 103, 2, 2, 157, 158, 7, 117, 2, 2, 158, 159, 7, 118, 2, 2, 159, 160, 7, 113, 2, 2, 160, 161, 7, 116, 2, 2, 161, 162, 7, 117, 2, 2, 162, 24, 3, 2, 2, 2, 163, 164, 7, 120, 2, 2, 164, 165, 7, 99, 2, 2, 165, 166, 7, 110, 2, 2, 166, 167, 7, 119, 2, 2, 167, 168, 7, 103, 2, 2, 168, 26, 3, 2, 2, 2, 169, 170, 7, 112, 2, 2, 170, 171, 7, 119, 2, 2, 171, 172, 7, 110, 2, 2, 172, 173, 7, 110, 2, 2, 173, 28, 3, 2, 2, 2, 174, 175, 7, 63, 2, 2, 175, 188, 7, 63, 2, 2, 176, 177, 7, 35, 2, 2, 177, 188, 7, 63, 2, 2, 178, 179, 7, 64, 2, 2, 179, 188, 7, 63, 2, 2, 180, 181, 7, 62, 2, 2, 181, 188, 7, 63, 2, 2, 182, 188, 9, 2, 2, 2, 183, 184, 7, 66, 2, 2, 184, 188, 7, 66, 2, 2, 185, 186, 7, 35, 2, 2, 186, 188, 7, 66, 2, 2, 187, 174, 3, 2, 2, 2, 187, 176, 3, 2, 2, 2, 187, 178, 3, 2, 2, 2, 187, 180, 3, 2, 2, 2, 187, 182, 3, 2, 2, 2, 187, 183, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 30, 3, 2, 2, 2, 189, 190, 7, 40, 2, 2, 190, 191, 7, 40, 2, 2, 191, 32, 3, 2, 2, 2, 192, 193, 7, 126, 2, 2, 193, 194, 7, 126, 2, 2, 194, 34, 3, 2, 2, 2, 195, 196, 7, 126, 2, 2, 196, 36, 3, 2, 2, 2, 197, 198, 7, 35, 2, 2, 198, 38, 3, 2, 2, 2, 199, 200, 7, 42, 2, 2, 200, 40, 3, 2, 2, 2, 201, 202, 7, 43, 2, 2, 202, 42, 3, 2, 2, 2, 203, 204, 7, 125, 2, 2, 204, 44, 3, 2, 2, 2, 205, 206, 7, 127, 2, 2, 206, 46, 3, 2, 2, 2, 207, 208, 7, 41, 2, 2, 208, 48, 3, 2, 2, 2, 209, 210, 7, 128, 2, 2, 210, 50, 3, 2, 2, 2, 211, 212, 7, 64, 2, 2, 212, 213, 7, 64, 2, 2, 213, 52, 3, 2, 2, 2, 214, 215, 7, 93, 2, 2, 215, 54, 3, 2, 2, 2, 216, 217, 7, 95, 2, 2, 217, 56, 3, 2, 2, 2, 218, 219, 7, 46, 2, 2, 219, 58, 3, 2, 2, 2, 220, 221, 7, 60, 2, 2, 221, 60, 3, 2, 2, 2, 222, 223, 7, 47, 2, 2, 223, 62, 3, 2, 2, 2, 224, 225, 7, 48, 2, 2, 225, 64, 3, 2, 2, 2, 226, 227, 7, 97, 2, 2, 227, 66, 3, 2, 2, 2, 228, 229, 7, 63, 2, 2, 229, 68, 3, 2, 2, 2, 230, 231, 7, 45, 2, 2, 231, 70, 3, 2, 2, 2, 232, 233, 7, 65, 2, 2, 233, 72, 3, 2, 2, 2, 234, 235, 7, 44, 2, 2, 235, 74, 3, 2, 2, 2, 236, 237, 7, 118, 2, 2, 237, 238, 7, 116, 2, 2, 238, 239, 7, 119, 2, 2, 239, 246, 7, 103, 2, 2, 240, 241, 7, 104, 2, 2, 241, 242, 7, 99, 2, 2, 242, 243, 7, 110, 2, 2, 243, 244, 7, 117, 2, 2, 244, 246, 7, 103, 2, 2, 245, 236, 3, 2, 2, 2, 245, 240, 3, 2, 2, 2, 246, 76, 3, 2, 2, 2, 247, 256, 7, 50, 2, 2, 248, 252, 9, 3, 2, 2, 249, 251, 9, 4, 2, 2, 250, 249, 3, 2, 2, 2, 251, 254, 3, 2, 2, 2, 252, 250, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 256, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 255, 247, 3, 2, 2, 2, 255, 248, 3, 2, 2, 2, 256, 78, 3, 2, 2, 2, 257, 259, 5, 63, 32, 2, 258, 260, 9, 5, 2, 2, 259, 258, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 259, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 80, 3, 2, 2, 2, 263, 266, 5, 65, 33, 2, 264, 266, 9, 6, 2, 2, 265, 263, 3, 2, 2, 2, 265, 264, 3, 2, 2, 2, 266, 267, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 275, 3, 2, 2, 2, 269, 274, 9, 7, 2, 2, 270, 274, 5, 59, 30, 2, 271, 274, 5, 61, 31, 2, 272, 274, 5, 65, 33, 2, 273, 269, 3, 2, 2, 2, 273, 270, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 272, 3, 2, 2, 2, 274, 277, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 275, 276, 3, 2, 2, 2, 276, 82, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 278, 280, 9, 8, 2, 2, 279, 278, 3, 2, 2, 2, 280, 281, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 284, 8, 42, 2, 2, 284, 84, 3, 2, 2, 2, 285, 286, 11, 2, 2, 2, 286, 86, 3, 2, 2, 2, 13, 2, 187, 245, 252, 255, 261, 265, 267, 273, 275, 281, 3, 8, 2, 2]
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java
index 1f458a1..a7c7c26 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.java
@@ -1,10 +1,13 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4\NCIntentDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.model.intent.impl.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 NCIntentDslLexer extends Lexer {
@@ -15,11 +18,11 @@
new PredictionContextCache();
public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
- T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, PRED_OP=15, AND=16, OR=17,
- VERT=18, EXCL=19, LPAREN=20, RPAREN=21, LCURLY=22, RCURLY=23, SQUOTE=24,
- TILDA=25, RIGHT=26, LBR=27, RBR=28, COMMA=29, COLON=30, MINUS=31, DOT=32,
- UNDERSCORE=33, EQ=34, PLUS=35, QUESTION=36, STAR=37, BOOL=38, INT=39,
- EXP=40, ID=41, WS=42, ErrorCharacter=43;
+ T__9=10, T__10=11, T__11=12, T__12=13, PRED_OP=14, AND=15, OR=16, VERT=17,
+ EXCL=18, LPAREN=19, RPAREN=20, LCURLY=21, RCURLY=22, SQUOTE=23, TILDA=24,
+ RIGHT=25, LBR=26, RBR=27, COMMA=28, COLON=29, MINUS=30, DOT=31, UNDERSCORE=32,
+ EQ=33, PLUS=34, QUESTION=35, STAR=36, BOOL=37, INT=38, EXP=39, ID=40,
+ WS=41, ErrorCharacter=42;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -31,9 +34,9 @@
private static String[] makeRuleNames() {
return new String[] {
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
- "T__9", "T__10", "T__11", "T__12", "T__13", "PRED_OP", "AND", "OR", "VERT",
- "EXCL", "LPAREN", "RPAREN", "LCURLY", "RCURLY", "SQUOTE", "TILDA", "RIGHT",
- "LBR", "RBR", "COMMA", "COLON", "MINUS", "DOT", "UNDERSCORE", "EQ", "PLUS",
+ "T__9", "T__10", "T__11", "T__12", "PRED_OP", "AND", "OR", "VERT", "EXCL",
+ "LPAREN", "RPAREN", "LCURLY", "RCURLY", "SQUOTE", "TILDA", "RIGHT", "LBR",
+ "RBR", "COMMA", "COLON", "MINUS", "DOT", "UNDERSCORE", "EQ", "PLUS",
"QUESTION", "STAR", "BOOL", "INT", "EXP", "ID", "WS", "ErrorCharacter"
};
}
@@ -41,18 +44,18 @@
private static String[] makeLiteralNames() {
return new String[] {
- null, "'intent'", "'conv'", "'ordered'", "'flow'", "'term'", "'id'",
- "'aliases'", "'startidx'", "'endidx'", "'parent'", "'groups'", "'ancestors'",
- "'value'", "'null'", null, "'&&'", "'||'", "'|'", "'!'", "'('", "')'",
- "'{'", "'}'", "'''", "'~'", "'>>'", "'['", "']'", "','", "':'", "'-'",
- "'.'", "'_'", "'='", "'+'", "'?'", "'*'"
+ null, "'intent'", "'ordered'", "'flow'", "'term'", "'id'", "'aliases'",
+ "'startidx'", "'endidx'", "'parent'", "'groups'", "'ancestors'", "'value'",
+ "'null'", null, "'&&'", "'||'", "'|'", "'!'", "'('", "')'", "'{'", "'}'",
+ "'''", "'~'", "'>>'", "'['", "']'", "','", "':'", "'-'", "'.'", "'_'",
+ "'='", "'+'", "'?'", "'*'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, "PRED_OP", "AND", "OR", "VERT", "EXCL", "LPAREN", "RPAREN",
+ null, null, "PRED_OP", "AND", "OR", "VERT", "EXCL", "LPAREN", "RPAREN",
"LCURLY", "RCURLY", "SQUOTE", "TILDA", "RIGHT", "LBR", "RBR", "COMMA",
"COLON", "MINUS", "DOT", "UNDERSCORE", "EQ", "PLUS", "QUESTION", "STAR",
"BOOL", "INT", "EXP", "ID", "WS", "ErrorCharacter"
@@ -117,100 +120,98 @@
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2-\u0126\b\1\4\2\t"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2,\u011f\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,\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\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\b"+
- "\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n\3"+
- "\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f"+
- "\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16"+
- "\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20"+
- "\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00c3\n\20\3\21\3\21\3\21\3\22"+
- "\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30"+
- "\3\31\3\31\3\32\3\32\3\33\3\33\3\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\'\5\'\u00fd\n\'\3(\3(\3(\7(\u0102\n(\f(\16(\u0105\13(\5"+
- "(\u0107\n(\3)\3)\6)\u010b\n)\r)\16)\u010c\3*\3*\6*\u0111\n*\r*\16*\u0112"+
- "\3*\3*\3*\3*\7*\u0119\n*\f*\16*\u011c\13*\3+\6+\u011f\n+\r+\16+\u0120"+
- "\3+\3+\3,\3,\2\2-\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31"+
- "\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65"+
- "\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-\3\2\t\4\2>>@@\3\2\63;"+
- "\4\2\62;aa\3\2\62;\4\2C\\c|\5\2\62;C\\c|\5\2\13\f\16\17\"\"\2\u0136\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\3Y\3\2\2\2\5`\3\2\2\2\7e\3\2\2\2\tm\3\2\2\2\13r\3"+
- "\2\2\2\rw\3\2\2\2\17z\3\2\2\2\21\u0082\3\2\2\2\23\u008b\3\2\2\2\25\u0092"+
- "\3\2\2\2\27\u0099\3\2\2\2\31\u00a0\3\2\2\2\33\u00aa\3\2\2\2\35\u00b0\3"+
- "\2\2\2\37\u00c2\3\2\2\2!\u00c4\3\2\2\2#\u00c7\3\2\2\2%\u00ca\3\2\2\2\'"+
- "\u00cc\3\2\2\2)\u00ce\3\2\2\2+\u00d0\3\2\2\2-\u00d2\3\2\2\2/\u00d4\3\2"+
- "\2\2\61\u00d6\3\2\2\2\63\u00d8\3\2\2\2\65\u00da\3\2\2\2\67\u00dd\3\2\2"+
- "\29\u00df\3\2\2\2;\u00e1\3\2\2\2=\u00e3\3\2\2\2?\u00e5\3\2\2\2A\u00e7"+
- "\3\2\2\2C\u00e9\3\2\2\2E\u00eb\3\2\2\2G\u00ed\3\2\2\2I\u00ef\3\2\2\2K"+
- "\u00f1\3\2\2\2M\u00fc\3\2\2\2O\u0106\3\2\2\2Q\u0108\3\2\2\2S\u0110\3\2"+
- "\2\2U\u011e\3\2\2\2W\u0124\3\2\2\2YZ\7k\2\2Z[\7p\2\2[\\\7v\2\2\\]\7g\2"+
- "\2]^\7p\2\2^_\7v\2\2_\4\3\2\2\2`a\7e\2\2ab\7q\2\2bc\7p\2\2cd\7x\2\2d\6"+
- "\3\2\2\2ef\7q\2\2fg\7t\2\2gh\7f\2\2hi\7g\2\2ij\7t\2\2jk\7g\2\2kl\7f\2"+
- "\2l\b\3\2\2\2mn\7h\2\2no\7n\2\2op\7q\2\2pq\7y\2\2q\n\3\2\2\2rs\7v\2\2"+
- "st\7g\2\2tu\7t\2\2uv\7o\2\2v\f\3\2\2\2wx\7k\2\2xy\7f\2\2y\16\3\2\2\2z"+
- "{\7c\2\2{|\7n\2\2|}\7k\2\2}~\7c\2\2~\177\7u\2\2\177\u0080\7g\2\2\u0080"+
- "\u0081\7u\2\2\u0081\20\3\2\2\2\u0082\u0083\7u\2\2\u0083\u0084\7v\2\2\u0084"+
- "\u0085\7c\2\2\u0085\u0086\7t\2\2\u0086\u0087\7v\2\2\u0087\u0088\7k\2\2"+
- "\u0088\u0089\7f\2\2\u0089\u008a\7z\2\2\u008a\22\3\2\2\2\u008b\u008c\7"+
- "g\2\2\u008c\u008d\7p\2\2\u008d\u008e\7f\2\2\u008e\u008f\7k\2\2\u008f\u0090"+
- "\7f\2\2\u0090\u0091\7z\2\2\u0091\24\3\2\2\2\u0092\u0093\7r\2\2\u0093\u0094"+
- "\7c\2\2\u0094\u0095\7t\2\2\u0095\u0096\7g\2\2\u0096\u0097\7p\2\2\u0097"+
- "\u0098\7v\2\2\u0098\26\3\2\2\2\u0099\u009a\7i\2\2\u009a\u009b\7t\2\2\u009b"+
- "\u009c\7q\2\2\u009c\u009d\7w\2\2\u009d\u009e\7r\2\2\u009e\u009f\7u\2\2"+
- "\u009f\30\3\2\2\2\u00a0\u00a1\7c\2\2\u00a1\u00a2\7p\2\2\u00a2\u00a3\7"+
- "e\2\2\u00a3\u00a4\7g\2\2\u00a4\u00a5\7u\2\2\u00a5\u00a6\7v\2\2\u00a6\u00a7"+
- "\7q\2\2\u00a7\u00a8\7t\2\2\u00a8\u00a9\7u\2\2\u00a9\32\3\2\2\2\u00aa\u00ab"+
- "\7x\2\2\u00ab\u00ac\7c\2\2\u00ac\u00ad\7n\2\2\u00ad\u00ae\7w\2\2\u00ae"+
- "\u00af\7g\2\2\u00af\34\3\2\2\2\u00b0\u00b1\7p\2\2\u00b1\u00b2\7w\2\2\u00b2"+
- "\u00b3\7n\2\2\u00b3\u00b4\7n\2\2\u00b4\36\3\2\2\2\u00b5\u00b6\7?\2\2\u00b6"+
- "\u00c3\7?\2\2\u00b7\u00b8\7#\2\2\u00b8\u00c3\7?\2\2\u00b9\u00ba\7@\2\2"+
- "\u00ba\u00c3\7?\2\2\u00bb\u00bc\7>\2\2\u00bc\u00c3\7?\2\2\u00bd\u00c3"+
- "\t\2\2\2\u00be\u00bf\7B\2\2\u00bf\u00c3\7B\2\2\u00c0\u00c1\7#\2\2\u00c1"+
- "\u00c3\7B\2\2\u00c2\u00b5\3\2\2\2\u00c2\u00b7\3\2\2\2\u00c2\u00b9\3\2"+
- "\2\2\u00c2\u00bb\3\2\2\2\u00c2\u00bd\3\2\2\2\u00c2\u00be\3\2\2\2\u00c2"+
- "\u00c0\3\2\2\2\u00c3 \3\2\2\2\u00c4\u00c5\7(\2\2\u00c5\u00c6\7(\2\2\u00c6"+
- "\"\3\2\2\2\u00c7\u00c8\7~\2\2\u00c8\u00c9\7~\2\2\u00c9$\3\2\2\2\u00ca"+
- "\u00cb\7~\2\2\u00cb&\3\2\2\2\u00cc\u00cd\7#\2\2\u00cd(\3\2\2\2\u00ce\u00cf"+
- "\7*\2\2\u00cf*\3\2\2\2\u00d0\u00d1\7+\2\2\u00d1,\3\2\2\2\u00d2\u00d3\7"+
- "}\2\2\u00d3.\3\2\2\2\u00d4\u00d5\7\177\2\2\u00d5\60\3\2\2\2\u00d6\u00d7"+
- "\7)\2\2\u00d7\62\3\2\2\2\u00d8\u00d9\7\u0080\2\2\u00d9\64\3\2\2\2\u00da"+
- "\u00db\7@\2\2\u00db\u00dc\7@\2\2\u00dc\66\3\2\2\2\u00dd\u00de\7]\2\2\u00de"+
- "8\3\2\2\2\u00df\u00e0\7_\2\2\u00e0:\3\2\2\2\u00e1\u00e2\7.\2\2\u00e2<"+
- "\3\2\2\2\u00e3\u00e4\7<\2\2\u00e4>\3\2\2\2\u00e5\u00e6\7/\2\2\u00e6@\3"+
- "\2\2\2\u00e7\u00e8\7\60\2\2\u00e8B\3\2\2\2\u00e9\u00ea\7a\2\2\u00eaD\3"+
- "\2\2\2\u00eb\u00ec\7?\2\2\u00ecF\3\2\2\2\u00ed\u00ee\7-\2\2\u00eeH\3\2"+
- "\2\2\u00ef\u00f0\7A\2\2\u00f0J\3\2\2\2\u00f1\u00f2\7,\2\2\u00f2L\3\2\2"+
- "\2\u00f3\u00f4\7v\2\2\u00f4\u00f5\7t\2\2\u00f5\u00f6\7w\2\2\u00f6\u00fd"+
- "\7g\2\2\u00f7\u00f8\7h\2\2\u00f8\u00f9\7c\2\2\u00f9\u00fa\7n\2\2\u00fa"+
- "\u00fb\7u\2\2\u00fb\u00fd\7g\2\2\u00fc\u00f3\3\2\2\2\u00fc\u00f7\3\2\2"+
- "\2\u00fdN\3\2\2\2\u00fe\u0107\7\62\2\2\u00ff\u0103\t\3\2\2\u0100\u0102"+
- "\t\4\2\2\u0101\u0100\3\2\2\2\u0102\u0105\3\2\2\2\u0103\u0101\3\2\2\2\u0103"+
- "\u0104\3\2\2\2\u0104\u0107\3\2\2\2\u0105\u0103\3\2\2\2\u0106\u00fe\3\2"+
- "\2\2\u0106\u00ff\3\2\2\2\u0107P\3\2\2\2\u0108\u010a\5A!\2\u0109\u010b"+
- "\t\5\2\2\u010a\u0109\3\2\2\2\u010b\u010c\3\2\2\2\u010c\u010a\3\2\2\2\u010c"+
- "\u010d\3\2\2\2\u010dR\3\2\2\2\u010e\u0111\5C\"\2\u010f\u0111\t\6\2\2\u0110"+
- "\u010e\3\2\2\2\u0110\u010f\3\2\2\2\u0111\u0112\3\2\2\2\u0112\u0110\3\2"+
- "\2\2\u0112\u0113\3\2\2\2\u0113\u011a\3\2\2\2\u0114\u0119\t\7\2\2\u0115"+
- "\u0119\5=\37\2\u0116\u0119\5? \2\u0117\u0119\5C\"\2\u0118\u0114\3\2\2"+
- "\2\u0118\u0115\3\2\2\2\u0118\u0116\3\2\2\2\u0118\u0117\3\2\2\2\u0119\u011c"+
- "\3\2\2\2\u011a\u0118\3\2\2\2\u011a\u011b\3\2\2\2\u011bT\3\2\2\2\u011c"+
- "\u011a\3\2\2\2\u011d\u011f\t\b\2\2\u011e\u011d\3\2\2\2\u011f\u0120\3\2"+
- "\2\2\u0120\u011e\3\2\2\2\u0120\u0121\3\2\2\2\u0121\u0122\3\2\2\2\u0122"+
- "\u0123\b+\2\2\u0123V\3\2\2\2\u0124\u0125\13\2\2\2\u0125X\3\2\2\2\r\2\u00c2"+
- "\u00fc\u0103\u0106\u010c\u0110\u0112\u0118\u011a\u0120\3\b\2\2";
+ "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\3"+
+ "\2\3\2\3\2\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4"+
+ "\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\3"+
+ "\7\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\n"+
+ "\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3"+
+ "\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3\16"+
+ "\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17"+
+ "\3\17\5\17\u00bc\n\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\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31\3\31\3\32\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&\5&\u00f6\n&\3\'\3"+
+ "\'\3\'\7\'\u00fb\n\'\f\'\16\'\u00fe\13\'\5\'\u0100\n\'\3(\3(\6(\u0104"+
+ "\n(\r(\16(\u0105\3)\3)\6)\u010a\n)\r)\16)\u010b\3)\3)\3)\3)\7)\u0112\n"+
+ ")\f)\16)\u0115\13)\3*\6*\u0118\n*\r*\16*\u0119\3*\3*\3+\3+\2\2,\3\3\5"+
+ "\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21"+
+ "!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!"+
+ "A\"C#E$G%I&K\'M(O)Q*S+U,\3\2\t\4\2>>@@\3\2\63;\4\2\62;aa\3\2\62;\4\2C"+
+ "\\c|\5\2\62;C\\c|\5\2\13\f\16\17\"\"\2\u012f\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\2"+
+ "M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\3W\3\2\2\2\5^\3"+
+ "\2\2\2\7f\3\2\2\2\tk\3\2\2\2\13p\3\2\2\2\rs\3\2\2\2\17{\3\2\2\2\21\u0084"+
+ "\3\2\2\2\23\u008b\3\2\2\2\25\u0092\3\2\2\2\27\u0099\3\2\2\2\31\u00a3\3"+
+ "\2\2\2\33\u00a9\3\2\2\2\35\u00bb\3\2\2\2\37\u00bd\3\2\2\2!\u00c0\3\2\2"+
+ "\2#\u00c3\3\2\2\2%\u00c5\3\2\2\2\'\u00c7\3\2\2\2)\u00c9\3\2\2\2+\u00cb"+
+ "\3\2\2\2-\u00cd\3\2\2\2/\u00cf\3\2\2\2\61\u00d1\3\2\2\2\63\u00d3\3\2\2"+
+ "\2\65\u00d6\3\2\2\2\67\u00d8\3\2\2\29\u00da\3\2\2\2;\u00dc\3\2\2\2=\u00de"+
+ "\3\2\2\2?\u00e0\3\2\2\2A\u00e2\3\2\2\2C\u00e4\3\2\2\2E\u00e6\3\2\2\2G"+
+ "\u00e8\3\2\2\2I\u00ea\3\2\2\2K\u00f5\3\2\2\2M\u00ff\3\2\2\2O\u0101\3\2"+
+ "\2\2Q\u0109\3\2\2\2S\u0117\3\2\2\2U\u011d\3\2\2\2WX\7k\2\2XY\7p\2\2YZ"+
+ "\7v\2\2Z[\7g\2\2[\\\7p\2\2\\]\7v\2\2]\4\3\2\2\2^_\7q\2\2_`\7t\2\2`a\7"+
+ "f\2\2ab\7g\2\2bc\7t\2\2cd\7g\2\2de\7f\2\2e\6\3\2\2\2fg\7h\2\2gh\7n\2\2"+
+ "hi\7q\2\2ij\7y\2\2j\b\3\2\2\2kl\7v\2\2lm\7g\2\2mn\7t\2\2no\7o\2\2o\n\3"+
+ "\2\2\2pq\7k\2\2qr\7f\2\2r\f\3\2\2\2st\7c\2\2tu\7n\2\2uv\7k\2\2vw\7c\2"+
+ "\2wx\7u\2\2xy\7g\2\2yz\7u\2\2z\16\3\2\2\2{|\7u\2\2|}\7v\2\2}~\7c\2\2~"+
+ "\177\7t\2\2\177\u0080\7v\2\2\u0080\u0081\7k\2\2\u0081\u0082\7f\2\2\u0082"+
+ "\u0083\7z\2\2\u0083\20\3\2\2\2\u0084\u0085\7g\2\2\u0085\u0086\7p\2\2\u0086"+
+ "\u0087\7f\2\2\u0087\u0088\7k\2\2\u0088\u0089\7f\2\2\u0089\u008a\7z\2\2"+
+ "\u008a\22\3\2\2\2\u008b\u008c\7r\2\2\u008c\u008d\7c\2\2\u008d\u008e\7"+
+ "t\2\2\u008e\u008f\7g\2\2\u008f\u0090\7p\2\2\u0090\u0091\7v\2\2\u0091\24"+
+ "\3\2\2\2\u0092\u0093\7i\2\2\u0093\u0094\7t\2\2\u0094\u0095\7q\2\2\u0095"+
+ "\u0096\7w\2\2\u0096\u0097\7r\2\2\u0097\u0098\7u\2\2\u0098\26\3\2\2\2\u0099"+
+ "\u009a\7c\2\2\u009a\u009b\7p\2\2\u009b\u009c\7e\2\2\u009c\u009d\7g\2\2"+
+ "\u009d\u009e\7u\2\2\u009e\u009f\7v\2\2\u009f\u00a0\7q\2\2\u00a0\u00a1"+
+ "\7t\2\2\u00a1\u00a2\7u\2\2\u00a2\30\3\2\2\2\u00a3\u00a4\7x\2\2\u00a4\u00a5"+
+ "\7c\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7\7w\2\2\u00a7\u00a8\7g\2\2\u00a8"+
+ "\32\3\2\2\2\u00a9\u00aa\7p\2\2\u00aa\u00ab\7w\2\2\u00ab\u00ac\7n\2\2\u00ac"+
+ "\u00ad\7n\2\2\u00ad\34\3\2\2\2\u00ae\u00af\7?\2\2\u00af\u00bc\7?\2\2\u00b0"+
+ "\u00b1\7#\2\2\u00b1\u00bc\7?\2\2\u00b2\u00b3\7@\2\2\u00b3\u00bc\7?\2\2"+
+ "\u00b4\u00b5\7>\2\2\u00b5\u00bc\7?\2\2\u00b6\u00bc\t\2\2\2\u00b7\u00b8"+
+ "\7B\2\2\u00b8\u00bc\7B\2\2\u00b9\u00ba\7#\2\2\u00ba\u00bc\7B\2\2\u00bb"+
+ "\u00ae\3\2\2\2\u00bb\u00b0\3\2\2\2\u00bb\u00b2\3\2\2\2\u00bb\u00b4\3\2"+
+ "\2\2\u00bb\u00b6\3\2\2\2\u00bb\u00b7\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc"+
+ "\36\3\2\2\2\u00bd\u00be\7(\2\2\u00be\u00bf\7(\2\2\u00bf \3\2\2\2\u00c0"+
+ "\u00c1\7~\2\2\u00c1\u00c2\7~\2\2\u00c2\"\3\2\2\2\u00c3\u00c4\7~\2\2\u00c4"+
+ "$\3\2\2\2\u00c5\u00c6\7#\2\2\u00c6&\3\2\2\2\u00c7\u00c8\7*\2\2\u00c8("+
+ "\3\2\2\2\u00c9\u00ca\7+\2\2\u00ca*\3\2\2\2\u00cb\u00cc\7}\2\2\u00cc,\3"+
+ "\2\2\2\u00cd\u00ce\7\177\2\2\u00ce.\3\2\2\2\u00cf\u00d0\7)\2\2\u00d0\60"+
+ "\3\2\2\2\u00d1\u00d2\7\u0080\2\2\u00d2\62\3\2\2\2\u00d3\u00d4\7@\2\2\u00d4"+
+ "\u00d5\7@\2\2\u00d5\64\3\2\2\2\u00d6\u00d7\7]\2\2\u00d7\66\3\2\2\2\u00d8"+
+ "\u00d9\7_\2\2\u00d98\3\2\2\2\u00da\u00db\7.\2\2\u00db:\3\2\2\2\u00dc\u00dd"+
+ "\7<\2\2\u00dd<\3\2\2\2\u00de\u00df\7/\2\2\u00df>\3\2\2\2\u00e0\u00e1\7"+
+ "\60\2\2\u00e1@\3\2\2\2\u00e2\u00e3\7a\2\2\u00e3B\3\2\2\2\u00e4\u00e5\7"+
+ "?\2\2\u00e5D\3\2\2\2\u00e6\u00e7\7-\2\2\u00e7F\3\2\2\2\u00e8\u00e9\7A"+
+ "\2\2\u00e9H\3\2\2\2\u00ea\u00eb\7,\2\2\u00ebJ\3\2\2\2\u00ec\u00ed\7v\2"+
+ "\2\u00ed\u00ee\7t\2\2\u00ee\u00ef\7w\2\2\u00ef\u00f6\7g\2\2\u00f0\u00f1"+
+ "\7h\2\2\u00f1\u00f2\7c\2\2\u00f2\u00f3\7n\2\2\u00f3\u00f4\7u\2\2\u00f4"+
+ "\u00f6\7g\2\2\u00f5\u00ec\3\2\2\2\u00f5\u00f0\3\2\2\2\u00f6L\3\2\2\2\u00f7"+
+ "\u0100\7\62\2\2\u00f8\u00fc\t\3\2\2\u00f9\u00fb\t\4\2\2\u00fa\u00f9\3"+
+ "\2\2\2\u00fb\u00fe\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fc\u00fd\3\2\2\2\u00fd"+
+ "\u0100\3\2\2\2\u00fe\u00fc\3\2\2\2\u00ff\u00f7\3\2\2\2\u00ff\u00f8\3\2"+
+ "\2\2\u0100N\3\2\2\2\u0101\u0103\5? \2\u0102\u0104\t\5\2\2\u0103\u0102"+
+ "\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0103\3\2\2\2\u0105\u0106\3\2\2\2\u0106"+
+ "P\3\2\2\2\u0107\u010a\5A!\2\u0108\u010a\t\6\2\2\u0109\u0107\3\2\2\2\u0109"+
+ "\u0108\3\2\2\2\u010a\u010b\3\2\2\2\u010b\u0109\3\2\2\2\u010b\u010c\3\2"+
+ "\2\2\u010c\u0113\3\2\2\2\u010d\u0112\t\7\2\2\u010e\u0112\5;\36\2\u010f"+
+ "\u0112\5=\37\2\u0110\u0112\5A!\2\u0111\u010d\3\2\2\2\u0111\u010e\3\2\2"+
+ "\2\u0111\u010f\3\2\2\2\u0111\u0110\3\2\2\2\u0112\u0115\3\2\2\2\u0113\u0111"+
+ "\3\2\2\2\u0113\u0114\3\2\2\2\u0114R\3\2\2\2\u0115\u0113\3\2\2\2\u0116"+
+ "\u0118\t\b\2\2\u0117\u0116\3\2\2\2\u0118\u0119\3\2\2\2\u0119\u0117\3\2"+
+ "\2\2\u0119\u011a\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u011c\b*\2\2\u011c"+
+ "T\3\2\2\2\u011d\u011e\13\2\2\2\u011eV\3\2\2\2\r\2\u00bb\u00f5\u00fc\u00ff"+
+ "\u0105\u0109\u010b\u0111\u0113\u0119\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens
index 8ae22bf..e2c3312 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslLexer.tokens
@@ -11,69 +11,67 @@
T__10=11
T__11=12
T__12=13
-T__13=14
-PRED_OP=15
-AND=16
-OR=17
-VERT=18
-EXCL=19
-LPAREN=20
-RPAREN=21
-LCURLY=22
-RCURLY=23
-SQUOTE=24
-TILDA=25
-RIGHT=26
-LBR=27
-RBR=28
-COMMA=29
-COLON=30
-MINUS=31
-DOT=32
-UNDERSCORE=33
-EQ=34
-PLUS=35
-QUESTION=36
-STAR=37
-BOOL=38
-INT=39
-EXP=40
-ID=41
-WS=42
-ErrorCharacter=43
+PRED_OP=14
+AND=15
+OR=16
+VERT=17
+EXCL=18
+LPAREN=19
+RPAREN=20
+LCURLY=21
+RCURLY=22
+SQUOTE=23
+TILDA=24
+RIGHT=25
+LBR=26
+RBR=27
+COMMA=28
+COLON=29
+MINUS=30
+DOT=31
+UNDERSCORE=32
+EQ=33
+PLUS=34
+QUESTION=35
+STAR=36
+BOOL=37
+INT=38
+EXP=39
+ID=40
+WS=41
+ErrorCharacter=42
'intent'=1
-'conv'=2
-'ordered'=3
-'flow'=4
-'term'=5
-'id'=6
-'aliases'=7
-'startidx'=8
-'endidx'=9
-'parent'=10
-'groups'=11
-'ancestors'=12
-'value'=13
-'null'=14
-'&&'=16
-'||'=17
-'|'=18
-'!'=19
-'('=20
-')'=21
-'{'=22
-'}'=23
-'\''=24
-'~'=25
-'>>'=26
-'['=27
-']'=28
-','=29
-':'=30
-'-'=31
-'.'=32
-'_'=33
-'='=34
-'+'=35
-'?'=36
-'*'=37
+'ordered'=2
+'flow'=3
+'term'=4
+'id'=5
+'aliases'=6
+'startidx'=7
+'endidx'=8
+'parent'=9
+'groups'=10
+'ancestors'=11
+'value'=12
+'null'=13
+'&&'=15
+'||'=16
+'|'=17
+'!'=18
+'('=19
+')'=20
+'{'=21
+'}'=22
+'\''=23
+'~'=24
+'>>'=25
+'['=26
+']'=27
+','=28
+':'=29
+'-'=30
+'.'=31
+'_'=32
+'='=33
+'+'=34
+'?'=35
+'*'=36
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java
index f600b0d..59ff399 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslListener.java
@@ -1,4 +1,4 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4\NCIntentDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.model.intent.impl.antlr4;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -28,16 +28,6 @@
*/
void exitIntentId(NCIntentDslParser.IntentIdContext ctx);
/**
- * Enter a parse tree produced by {@link NCIntentDslParser#convDecl}.
- * @param ctx the parse tree
- */
- void enterConvDecl(NCIntentDslParser.ConvDeclContext ctx);
- /**
- * Exit a parse tree produced by {@link NCIntentDslParser#convDecl}.
- * @param ctx the parse tree
- */
- void exitConvDecl(NCIntentDslParser.ConvDeclContext ctx);
- /**
* Enter a parse tree produced by {@link NCIntentDslParser#orderedDecl}.
* @param ctx the parse tree
*/
@@ -108,6 +98,16 @@
*/
void exitTerms(NCIntentDslParser.TermsContext ctx);
/**
+ * Enter a parse tree produced by {@link NCIntentDslParser#termEq}.
+ * @param ctx the parse tree
+ */
+ void enterTermEq(NCIntentDslParser.TermEqContext ctx);
+ /**
+ * Exit a parse tree produced by {@link NCIntentDslParser#termEq}.
+ * @param ctx the parse tree
+ */
+ void exitTermEq(NCIntentDslParser.TermEqContext ctx);
+ /**
* Enter a parse tree produced by {@link NCIntentDslParser#term}.
* @param ctx the parse tree
*/
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java
index 66f90dd..ef12ce8 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslParser.java
@@ -1,10 +1,13 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4\NCIntentDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.model.intent.impl.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 NCIntentDslParser extends Parser {
@@ -15,22 +18,22 @@
new PredictionContextCache();
public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
- T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, PRED_OP=15, AND=16, OR=17,
- VERT=18, EXCL=19, LPAREN=20, RPAREN=21, LCURLY=22, RCURLY=23, SQUOTE=24,
- TILDA=25, RIGHT=26, LBR=27, RBR=28, COMMA=29, COLON=30, MINUS=31, DOT=32,
- UNDERSCORE=33, EQ=34, PLUS=35, QUESTION=36, STAR=37, BOOL=38, INT=39,
- EXP=40, ID=41, WS=42, ErrorCharacter=43;
+ T__9=10, T__10=11, T__11=12, T__12=13, PRED_OP=14, AND=15, OR=16, VERT=17,
+ EXCL=18, LPAREN=19, RPAREN=20, LCURLY=21, RCURLY=22, SQUOTE=23, TILDA=24,
+ RIGHT=25, LBR=26, RBR=27, COMMA=28, COLON=29, MINUS=30, DOT=31, UNDERSCORE=32,
+ EQ=33, PLUS=34, QUESTION=35, STAR=36, BOOL=37, INT=38, EXP=39, ID=40,
+ WS=41, ErrorCharacter=42;
public static final int
- RULE_intent = 0, RULE_intentId = 1, RULE_convDecl = 2, RULE_orderedDecl = 3,
- RULE_flowDecl = 4, RULE_flow = 5, RULE_flowItem = 6, RULE_flowItemIds = 7,
- RULE_idList = 8, RULE_terms = 9, RULE_term = 10, RULE_termId = 11, RULE_item = 12,
+ RULE_intent = 0, RULE_intentId = 1, RULE_orderedDecl = 2, RULE_flowDecl = 3,
+ RULE_flow = 4, RULE_flowItem = 5, RULE_flowItemIds = 6, RULE_idList = 7,
+ RULE_terms = 8, RULE_termEq = 9, RULE_term = 10, RULE_termId = 11, RULE_item = 12,
RULE_predicate = 13, RULE_lval = 14, RULE_lvalQual = 15, RULE_lvalPart = 16,
RULE_rvalSingle = 17, RULE_rval = 18, RULE_rvalList = 19, RULE_meta = 20,
RULE_qstring = 21, RULE_minMax = 22, RULE_minMaxShortcut = 23, RULE_minMaxRange = 24;
private static String[] makeRuleNames() {
return new String[] {
- "intent", "intentId", "convDecl", "orderedDecl", "flowDecl", "flow",
- "flowItem", "flowItemIds", "idList", "terms", "term", "termId", "item",
+ "intent", "intentId", "orderedDecl", "flowDecl", "flow", "flowItem",
+ "flowItemIds", "idList", "terms", "termEq", "term", "termId", "item",
"predicate", "lval", "lvalQual", "lvalPart", "rvalSingle", "rval", "rvalList",
"meta", "qstring", "minMax", "minMaxShortcut", "minMaxRange"
};
@@ -39,18 +42,18 @@
private static String[] makeLiteralNames() {
return new String[] {
- null, "'intent'", "'conv'", "'ordered'", "'flow'", "'term'", "'id'",
- "'aliases'", "'startidx'", "'endidx'", "'parent'", "'groups'", "'ancestors'",
- "'value'", "'null'", null, "'&&'", "'||'", "'|'", "'!'", "'('", "')'",
- "'{'", "'}'", "'''", "'~'", "'>>'", "'['", "']'", "','", "':'", "'-'",
- "'.'", "'_'", "'='", "'+'", "'?'", "'*'"
+ null, "'intent'", "'ordered'", "'flow'", "'term'", "'id'", "'aliases'",
+ "'startidx'", "'endidx'", "'parent'", "'groups'", "'ancestors'", "'value'",
+ "'null'", null, "'&&'", "'||'", "'|'", "'!'", "'('", "')'", "'{'", "'}'",
+ "'''", "'~'", "'>>'", "'['", "']'", "','", "':'", "'-'", "'.'", "'_'",
+ "'='", "'+'", "'?'", "'*'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, "PRED_OP", "AND", "OR", "VERT", "EXCL", "LPAREN", "RPAREN",
+ null, null, "PRED_OP", "AND", "OR", "VERT", "EXCL", "LPAREN", "RPAREN",
"LCURLY", "RCURLY", "SQUOTE", "TILDA", "RIGHT", "LBR", "RBR", "COMMA",
"COLON", "MINUS", "DOT", "UNDERSCORE", "EQ", "PLUS", "QUESTION", "STAR",
"BOOL", "INT", "EXP", "ID", "WS", "ErrorCharacter"
@@ -115,9 +118,6 @@
return getRuleContext(TermsContext.class,0);
}
public TerminalNode EOF() { return getToken(NCIntentDslParser.EOF, 0); }
- public ConvDeclContext convDecl() {
- return getRuleContext(ConvDeclContext.class,0);
- }
public OrderedDeclContext orderedDecl() {
return getRuleContext(OrderedDeclContext.class,0);
}
@@ -136,11 +136,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitIntent(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitIntent(this);
- else return visitor.visitChildren(this);
- }
}
public final IntentContext intent() throws RecognitionException {
@@ -158,7 +153,7 @@
if (_la==T__1) {
{
setState(51);
- convDecl();
+ orderedDecl();
}
}
@@ -168,23 +163,13 @@
if (_la==T__2) {
{
setState(54);
- orderedDecl();
- }
- }
-
- setState(58);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==T__3) {
- {
- setState(57);
flowDecl();
}
}
- setState(60);
+ setState(57);
terms(0);
- setState(61);
+ setState(58);
match(EOF);
}
}
@@ -214,11 +199,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitIntentId(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitIntentId(this);
- else return visitor.visitChildren(this);
- }
}
public final IntentIdContext intentId() throws RecognitionException {
@@ -227,11 +207,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(63);
+ setState(60);
match(T__0);
- setState(64);
+ setState(61);
match(EQ);
- setState(65);
+ setState(62);
match(ID);
}
}
@@ -246,53 +226,6 @@
return _localctx;
}
- public static class ConvDeclContext extends ParserRuleContext {
- public TerminalNode EQ() { return getToken(NCIntentDslParser.EQ, 0); }
- public TerminalNode BOOL() { return getToken(NCIntentDslParser.BOOL, 0); }
- public ConvDeclContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_convDecl; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).enterConvDecl(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitConvDecl(this);
- }
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitConvDecl(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ConvDeclContext convDecl() throws RecognitionException {
- ConvDeclContext _localctx = new ConvDeclContext(_ctx, getState());
- enterRule(_localctx, 4, RULE_convDecl);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(67);
- match(T__1);
- setState(68);
- match(EQ);
- setState(69);
- match(BOOL);
- }
- }
- 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 EQ() { return getToken(NCIntentDslParser.EQ, 0); }
public TerminalNode BOOL() { return getToken(NCIntentDslParser.BOOL, 0); }
@@ -308,24 +241,19 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitOrderedDecl(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitOrderedDecl(this);
- else return visitor.visitChildren(this);
- }
}
public final OrderedDeclContext orderedDecl() throws RecognitionException {
OrderedDeclContext _localctx = new OrderedDeclContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_orderedDecl);
+ enterRule(_localctx, 4, RULE_orderedDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(71);
- match(T__2);
- setState(72);
+ setState(64);
+ match(T__1);
+ setState(65);
match(EQ);
- setState(73);
+ setState(66);
match(BOOL);
}
}
@@ -361,28 +289,23 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitFlowDecl(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitFlowDecl(this);
- else return visitor.visitChildren(this);
- }
}
public final FlowDeclContext flowDecl() throws RecognitionException {
FlowDeclContext _localctx = new FlowDeclContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_flowDecl);
+ enterRule(_localctx, 6, RULE_flowDecl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(75);
- match(T__3);
- setState(76);
+ setState(68);
+ match(T__2);
+ setState(69);
match(EQ);
- setState(77);
+ setState(70);
match(SQUOTE);
- setState(78);
+ setState(71);
flow(0);
- setState(79);
+ setState(72);
match(SQUOTE);
}
}
@@ -417,11 +340,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitFlow(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitFlow(this);
- else return visitor.visitChildren(this);
- }
}
public final FlowContext flow() throws RecognitionException {
@@ -433,30 +351,30 @@
int _parentState = getState();
FlowContext _localctx = new FlowContext(_ctx, _parentState);
FlowContext _prevctx = _localctx;
- int _startState = 10;
- enterRecursionRule(_localctx, 10, RULE_flow, _p);
+ int _startState = 8;
+ enterRecursionRule(_localctx, 8, RULE_flow, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(83);
+ setState(76);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
{
}
break;
case 2:
{
- setState(82);
+ setState(75);
flowItem();
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(90);
+ setState(83);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,4,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,3,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -465,18 +383,18 @@
{
_localctx = new FlowContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_flow);
- setState(85);
+ setState(78);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(86);
+ setState(79);
match(RIGHT);
- setState(87);
+ setState(80);
flowItem();
}
}
}
- setState(92);
+ setState(85);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,4,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,3,_ctx);
}
}
}
@@ -510,27 +428,22 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitFlowItem(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitFlowItem(this);
- else return visitor.visitChildren(this);
- }
}
public final FlowItemContext flowItem() throws RecognitionException {
FlowItemContext _localctx = new FlowItemContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_flowItem);
+ enterRule(_localctx, 10, RULE_flowItem);
try {
enterOuterAlt(_localctx, 1);
{
- setState(93);
+ setState(86);
flowItemIds();
- setState(95);
+ setState(88);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
case 1:
{
- setState(94);
+ setState(87);
minMax();
}
break;
@@ -567,35 +480,30 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitFlowItemIds(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitFlowItemIds(this);
- else return visitor.visitChildren(this);
- }
}
public final FlowItemIdsContext flowItemIds() throws RecognitionException {
FlowItemIdsContext _localctx = new FlowItemIdsContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_flowItemIds);
+ enterRule(_localctx, 12, RULE_flowItemIds);
try {
- setState(102);
+ setState(95);
_errHandler.sync(this);
switch (_input.LA(1)) {
case ID:
enterOuterAlt(_localctx, 1);
{
- setState(97);
+ setState(90);
match(ID);
}
break;
case LPAREN:
enterOuterAlt(_localctx, 2);
{
- setState(98);
+ setState(91);
match(LPAREN);
- setState(99);
+ setState(92);
idList(0);
- setState(100);
+ setState(93);
match(RPAREN);
}
break;
@@ -632,11 +540,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitIdList(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitIdList(this);
- else return visitor.visitChildren(this);
- }
}
public final IdListContext idList() throws RecognitionException {
@@ -648,20 +551,20 @@
int _parentState = getState();
IdListContext _localctx = new IdListContext(_ctx, _parentState);
IdListContext _prevctx = _localctx;
- int _startState = 16;
- enterRecursionRule(_localctx, 16, RULE_idList, _p);
+ int _startState = 14;
+ enterRecursionRule(_localctx, 14, RULE_idList, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(105);
+ setState(98);
match(ID);
}
_ctx.stop = _input.LT(-1);
- setState(112);
+ setState(105);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,6,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -670,18 +573,18 @@
{
_localctx = new IdListContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_idList);
- setState(107);
+ setState(100);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(108);
+ setState(101);
match(VERT);
- setState(109);
+ setState(102);
match(ID);
}
}
}
- setState(114);
+ setState(107);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,6,_ctx);
}
}
}
@@ -715,11 +618,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitTerms(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitTerms(this);
- else return visitor.visitChildren(this);
- }
}
public final TermsContext terms() throws RecognitionException {
@@ -731,20 +629,20 @@
int _parentState = getState();
TermsContext _localctx = new TermsContext(_ctx, _parentState);
TermsContext _prevctx = _localctx;
- int _startState = 18;
- enterRecursionRule(_localctx, 18, RULE_terms, _p);
+ int _startState = 16;
+ enterRecursionRule(_localctx, 16, RULE_terms, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(116);
+ setState(109);
term();
}
_ctx.stop = _input.LT(-1);
- setState(122);
+ setState(115);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,8,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -753,16 +651,16 @@
{
_localctx = new TermsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_terms);
- setState(118);
+ setState(111);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(119);
+ setState(112);
term();
}
}
}
- setState(124);
+ setState(117);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,8,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,7,_ctx);
}
}
}
@@ -777,8 +675,57 @@
return _localctx;
}
- public static class TermContext extends ParserRuleContext {
+ public static class TermEqContext extends ParserRuleContext {
public TerminalNode EQ() { return getToken(NCIntentDslParser.EQ, 0); }
+ public TerminalNode TILDA() { return getToken(NCIntentDslParser.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 NCIntentDslListener ) ((NCIntentDslListener)listener).enterTermEq(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitTermEq(this);
+ }
+ }
+
+ public final TermEqContext termEq() throws RecognitionException {
+ TermEqContext _localctx = new TermEqContext(_ctx, getState());
+ enterRule(_localctx, 18, RULE_termEq);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(118);
+ _la = _input.LA(1);
+ if ( !(_la==TILDA || _la==EQ) ) {
+ _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 TerminalNode LCURLY() { return getToken(NCIntentDslParser.LCURLY, 0); }
public ItemContext item() {
return getRuleContext(ItemContext.class,0);
@@ -802,11 +749,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitTerm(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitTerm(this);
- else return visitor.visitChildren(this);
- }
}
public final TermContext term() throws RecognitionException {
@@ -816,32 +758,32 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(125);
- match(T__4);
- setState(127);
+ setState(120);
+ match(T__3);
+ setState(122);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==LPAREN) {
{
- setState(126);
+ setState(121);
termId();
}
}
- setState(129);
- match(EQ);
- setState(130);
+ setState(124);
+ termEq();
+ setState(125);
match(LCURLY);
- setState(131);
+ setState(126);
item(0);
- setState(132);
+ setState(127);
match(RCURLY);
- setState(134);
+ setState(129);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) {
case 1:
{
- setState(133);
+ setState(128);
minMax();
}
break;
@@ -875,11 +817,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitTermId(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitTermId(this);
- else return visitor.visitChildren(this);
- }
}
public final TermIdContext termId() throws RecognitionException {
@@ -888,11 +825,11 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(136);
+ setState(131);
match(LPAREN);
- setState(137);
+ setState(132);
match(ID);
- setState(138);
+ setState(133);
match(RPAREN);
}
}
@@ -934,11 +871,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitItem(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitItem(this);
- else return visitor.visitChildren(this);
- }
}
public final ItemContext item() throws RecognitionException {
@@ -957,9 +889,10 @@
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(148);
+ setState(143);
_errHandler.sync(this);
switch (_input.LA(1)) {
+ case T__4:
case T__5:
case T__6:
case T__7:
@@ -967,29 +900,28 @@
case T__9:
case T__10:
case T__11:
- case T__12:
case TILDA:
case ID:
{
- setState(141);
+ setState(136);
predicate();
}
break;
case LPAREN:
{
- setState(142);
+ setState(137);
match(LPAREN);
- setState(143);
+ setState(138);
item(0);
- setState(144);
+ setState(139);
match(RPAREN);
}
break;
case EXCL:
{
- setState(146);
+ setState(141);
match(EXCL);
- setState(147);
+ setState(142);
item(1);
}
break;
@@ -997,9 +929,9 @@
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(155);
+ setState(150);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,11,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -1008,9 +940,9 @@
{
_localctx = new ItemContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_item);
- setState(150);
+ setState(145);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(151);
+ setState(146);
_la = _input.LA(1);
if ( !(_la==AND || _la==OR) ) {
_errHandler.recoverInline(this);
@@ -1020,14 +952,14 @@
_errHandler.reportMatch(this);
consume();
}
- setState(152);
+ setState(147);
item(3);
}
}
}
- setState(157);
+ setState(152);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,12,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,11,_ctx);
}
}
}
@@ -1065,45 +997,40 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitPredicate(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitPredicate(this);
- else return visitor.visitChildren(this);
- }
}
public final PredicateContext predicate() throws RecognitionException {
PredicateContext _localctx = new PredicateContext(_ctx, getState());
enterRule(_localctx, 26, RULE_predicate);
try {
- setState(169);
+ setState(164);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(158);
+ setState(153);
lval();
- setState(159);
+ setState(154);
match(PRED_OP);
- setState(160);
+ setState(155);
rval();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(162);
+ setState(157);
match(ID);
- setState(163);
+ setState(158);
match(LPAREN);
- setState(164);
+ setState(159);
lval();
- setState(165);
+ setState(160);
match(RPAREN);
- setState(166);
+ setState(161);
match(PRED_OP);
- setState(167);
+ setState(162);
rval();
}
break;
@@ -1139,11 +1066,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitLval(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitLval(this);
- else return visitor.visitChildren(this);
- }
}
public final LvalContext lval() throws RecognitionException {
@@ -1153,70 +1075,70 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(172);
+ setState(167);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ID) {
{
- setState(171);
+ setState(166);
lvalQual(0);
}
}
- setState(183);
+ setState(178);
_errHandler.sync(this);
switch (_input.LA(1)) {
+ case T__4:
+ {
+ setState(169);
+ match(T__4);
+ }
+ break;
case T__5:
{
- setState(174);
+ setState(170);
match(T__5);
}
break;
case T__6:
{
- setState(175);
+ setState(171);
match(T__6);
}
break;
case T__7:
{
- setState(176);
+ setState(172);
match(T__7);
}
break;
case T__8:
{
- setState(177);
+ setState(173);
match(T__8);
}
break;
case T__9:
{
- setState(178);
+ setState(174);
match(T__9);
}
break;
case T__10:
{
- setState(179);
+ setState(175);
match(T__10);
}
break;
case T__11:
{
- setState(180);
+ setState(176);
match(T__11);
}
break;
- case T__12:
- {
- setState(181);
- match(T__12);
- }
- break;
case TILDA:
{
- setState(182);
+ setState(177);
meta();
}
break;
@@ -1255,11 +1177,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitLvalQual(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitLvalQual(this);
- else return visitor.visitChildren(this);
- }
}
public final LvalQualContext lvalQual() throws RecognitionException {
@@ -1278,13 +1195,13 @@
enterOuterAlt(_localctx, 1);
{
{
- setState(186);
+ setState(181);
lvalPart();
}
_ctx.stop = _input.LT(-1);
- setState(192);
+ setState(187);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,15,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -1293,16 +1210,16 @@
{
_localctx = new LvalQualContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_lvalQual);
- setState(188);
+ setState(183);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(189);
+ setState(184);
lvalPart();
}
}
}
- setState(194);
+ setState(189);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,16,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,15,_ctx);
}
}
}
@@ -1332,11 +1249,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitLvalPart(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitLvalPart(this);
- else return visitor.visitChildren(this);
- }
}
public final LvalPartContext lvalPart() throws RecognitionException {
@@ -1345,9 +1257,9 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(195);
+ setState(190);
match(ID);
- setState(196);
+ setState(191);
match(DOT);
}
}
@@ -1382,11 +1294,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitRvalSingle(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitRvalSingle(this);
- else return visitor.visitChildren(this);
- }
}
public final RvalSingleContext rvalSingle() throws RecognitionException {
@@ -1394,44 +1301,44 @@
enterRule(_localctx, 34, RULE_rvalSingle);
int _la;
try {
- setState(209);
+ setState(204);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__13:
+ case T__12:
enterOuterAlt(_localctx, 1);
{
- setState(198);
- match(T__13);
+ setState(193);
+ match(T__12);
}
break;
case MINUS:
case INT:
enterOuterAlt(_localctx, 2);
{
- setState(200);
+ setState(195);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==MINUS) {
{
- setState(199);
+ setState(194);
match(MINUS);
}
}
- setState(205);
+ setState(200);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
case 1:
{
- setState(202);
+ setState(197);
match(INT);
}
break;
case 2:
{
- setState(203);
+ setState(198);
match(INT);
- setState(204);
+ setState(199);
match(EXP);
}
break;
@@ -1441,14 +1348,14 @@
case BOOL:
enterOuterAlt(_localctx, 3);
{
- setState(207);
+ setState(202);
match(BOOL);
}
break;
case SQUOTE:
enterOuterAlt(_localctx, 4);
{
- setState(208);
+ setState(203);
qstring();
}
break;
@@ -1488,39 +1395,34 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitRval(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitRval(this);
- else return visitor.visitChildren(this);
- }
}
public final RvalContext rval() throws RecognitionException {
RvalContext _localctx = new RvalContext(_ctx, getState());
enterRule(_localctx, 36, RULE_rval);
try {
- setState(216);
+ setState(211);
_errHandler.sync(this);
switch (_input.LA(1)) {
- case T__13:
+ case T__12:
case SQUOTE:
case MINUS:
case BOOL:
case INT:
enterOuterAlt(_localctx, 1);
{
- setState(211);
+ setState(206);
rvalSingle();
}
break;
case LPAREN:
enterOuterAlt(_localctx, 2);
{
- setState(212);
+ setState(207);
match(LPAREN);
- setState(213);
+ setState(208);
rvalList(0);
- setState(214);
+ setState(209);
match(RPAREN);
}
break;
@@ -1559,11 +1461,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitRvalList(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitRvalList(this);
- else return visitor.visitChildren(this);
- }
}
public final RvalListContext rvalList() throws RecognitionException {
@@ -1582,13 +1479,13 @@
enterOuterAlt(_localctx, 1);
{
{
- setState(219);
+ setState(214);
rvalSingle();
}
_ctx.stop = _input.LT(-1);
- setState(226);
+ setState(221);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -1597,18 +1494,18 @@
{
_localctx = new RvalListContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_rvalList);
- setState(221);
+ setState(216);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(222);
+ setState(217);
match(COMMA);
- setState(223);
+ setState(218);
rvalSingle();
}
}
}
- setState(228);
+ setState(223);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,20,_ctx);
}
}
}
@@ -1644,32 +1541,42 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitMeta(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitMeta(this);
- else return visitor.visitChildren(this);
- }
}
public final MetaContext meta() throws RecognitionException {
MetaContext _localctx = new MetaContext(_ctx, getState());
enterRule(_localctx, 40, RULE_meta);
try {
- setState(242);
+ setState(237);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(229);
+ setState(224);
match(TILDA);
- setState(230);
+ setState(225);
match(ID);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
+ setState(226);
+ match(TILDA);
+ setState(227);
+ match(ID);
+ setState(228);
+ match(LBR);
+ setState(229);
+ match(INT);
+ setState(230);
+ match(RBR);
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
setState(231);
match(TILDA);
setState(232);
@@ -1677,23 +1584,8 @@
setState(233);
match(LBR);
setState(234);
- match(INT);
- setState(235);
- match(RBR);
- }
- break;
- case 3:
- enterOuterAlt(_localctx, 3);
- {
- setState(236);
- match(TILDA);
- setState(237);
- match(ID);
- setState(238);
- match(LBR);
- setState(239);
qstring();
- setState(240);
+ setState(235);
match(RBR);
}
break;
@@ -1727,11 +1619,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitQstring(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitQstring(this);
- else return visitor.visitChildren(this);
- }
}
public final QstringContext qstring() throws RecognitionException {
@@ -1741,15 +1628,15 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(244);
+ setState(239);
match(SQUOTE);
- setState(248);
+ setState(243);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << PRED_OP) | (1L << AND) | (1L << OR) | (1L << VERT) | (1L << EXCL) | (1L << LPAREN) | (1L << RPAREN) | (1L << LCURLY) | (1L << RCURLY) | (1L << TILDA) | (1L << RIGHT) | (1L << LBR) | (1L << RBR) | (1L << COMMA) | (1L << COLON) | (1L << MINUS) | (1L << DOT) | (1L << UNDERSCORE) | (1L << EQ) | (1L << PLUS) | (1L << QUESTION) | (1L << STAR) | (1L << BOOL) | (1L << INT) | (1L << EXP) | (1L << ID) | (1L << WS) | (1L << ErrorCharacter))) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__1) | (1L << T__2) | (1L << T__3) | (1L << T__4) | (1L << T__5) | (1L << T__6) | (1L << T__7) | (1L << T__8) | (1L << T__9) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << PRED_OP) | (1L << AND) | (1L << OR) | (1L << VERT) | (1L << EXCL) | (1L << LPAREN) | (1L << RPAREN) | (1L << LCURLY) | (1L << RCURLY) | (1L << TILDA) | (1L << RIGHT) | (1L << LBR) | (1L << RBR) | (1L << COMMA) | (1L << COLON) | (1L << MINUS) | (1L << DOT) | (1L << UNDERSCORE) | (1L << EQ) | (1L << PLUS) | (1L << QUESTION) | (1L << STAR) | (1L << BOOL) | (1L << INT) | (1L << EXP) | (1L << ID) | (1L << WS) | (1L << ErrorCharacter))) != 0)) {
{
{
- setState(245);
+ setState(240);
_la = _input.LA(1);
if ( _la <= 0 || (_la==SQUOTE) ) {
_errHandler.recoverInline(this);
@@ -1761,11 +1648,11 @@
}
}
}
- setState(250);
+ setState(245);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(251);
+ setState(246);
match(SQUOTE);
}
}
@@ -1799,18 +1686,13 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitMinMax(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitMinMax(this);
- else return visitor.visitChildren(this);
- }
}
public final MinMaxContext minMax() throws RecognitionException {
MinMaxContext _localctx = new MinMaxContext(_ctx, getState());
enterRule(_localctx, 44, RULE_minMax);
try {
- setState(255);
+ setState(250);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PLUS:
@@ -1818,14 +1700,14 @@
case STAR:
enterOuterAlt(_localctx, 1);
{
- setState(253);
+ setState(248);
minMaxShortcut();
}
break;
case LBR:
enterOuterAlt(_localctx, 2);
{
- setState(254);
+ setState(249);
minMaxRange();
}
break;
@@ -1860,11 +1742,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitMinMaxShortcut(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitMinMaxShortcut(this);
- else return visitor.visitChildren(this);
- }
}
public final MinMaxShortcutContext minMaxShortcut() throws RecognitionException {
@@ -1874,7 +1751,7 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(257);
+ setState(252);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << QUESTION) | (1L << STAR))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1917,11 +1794,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCIntentDslListener ) ((NCIntentDslListener)listener).exitMinMaxRange(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCIntentDslVisitor ) return ((NCIntentDslVisitor<? extends T>)visitor).visitMinMaxRange(this);
- else return visitor.visitChildren(this);
- }
}
public final MinMaxRangeContext minMaxRange() throws RecognitionException {
@@ -1930,15 +1802,15 @@
try {
enterOuterAlt(_localctx, 1);
{
- setState(259);
+ setState(254);
match(LBR);
- setState(260);
+ setState(255);
match(INT);
- setState(261);
+ setState(256);
match(COMMA);
- setState(262);
+ setState(257);
match(INT);
- setState(263);
+ setState(258);
match(RBR);
}
}
@@ -1955,11 +1827,11 @@
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 5:
+ case 4:
return flow_sempred((FlowContext)_localctx, predIndex);
- case 8:
+ case 7:
return idList_sempred((IdListContext)_localctx, predIndex);
- case 9:
+ case 8:
return terms_sempred((TermsContext)_localctx, predIndex);
case 12:
return item_sempred((ItemContext)_localctx, predIndex);
@@ -2014,95 +1886,93 @@
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3-\u010c\4\2\t\2\4"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3,\u0107\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\3\2\3\2\5\2\67\n\2\3\2\5\2:\n\2\3\2\5\2=\n\2\3\2\3\2\3\2\3"+
- "\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6"+
- "\3\7\3\7\5\7V\n\7\3\7\3\7\3\7\7\7[\n\7\f\7\16\7^\13\7\3\b\3\b\5\bb\n\b"+
- "\3\t\3\t\3\t\3\t\3\t\5\ti\n\t\3\n\3\n\3\n\3\n\3\n\3\n\7\nq\n\n\f\n\16"+
- "\nt\13\n\3\13\3\13\3\13\3\13\3\13\7\13{\n\13\f\13\16\13~\13\13\3\f\3\f"+
- "\5\f\u0082\n\f\3\f\3\f\3\f\3\f\3\f\5\f\u0089\n\f\3\r\3\r\3\r\3\r\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0097\n\16\3\16\3\16\3\16\7\16"+
- "\u009c\n\16\f\16\16\16\u009f\13\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17"+
- "\3\17\3\17\3\17\3\17\5\17\u00ac\n\17\3\20\5\20\u00af\n\20\3\20\3\20\3"+
- "\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00ba\n\20\3\21\3\21\3\21\3\21"+
- "\3\21\7\21\u00c1\n\21\f\21\16\21\u00c4\13\21\3\22\3\22\3\22\3\23\3\23"+
- "\5\23\u00cb\n\23\3\23\3\23\3\23\5\23\u00d0\n\23\3\23\3\23\5\23\u00d4\n"+
- "\23\3\24\3\24\3\24\3\24\3\24\5\24\u00db\n\24\3\25\3\25\3\25\3\25\3\25"+
- "\3\25\7\25\u00e3\n\25\f\25\16\25\u00e6\13\25\3\26\3\26\3\26\3\26\3\26"+
- "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5\26\u00f5\n\26\3\27\3\27\7\27"+
- "\u00f9\n\27\f\27\16\27\u00fc\13\27\3\27\3\27\3\30\3\30\5\30\u0102\n\30"+
- "\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\2\b\f\22\24\32 (\33\2\4"+
- "\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\2\5\3\2\22\23\3\2\32"+
- "\32\3\2%\'\2\u0116\2\64\3\2\2\2\4A\3\2\2\2\6E\3\2\2\2\bI\3\2\2\2\nM\3"+
- "\2\2\2\fU\3\2\2\2\16_\3\2\2\2\20h\3\2\2\2\22j\3\2\2\2\24u\3\2\2\2\26\177"+
- "\3\2\2\2\30\u008a\3\2\2\2\32\u0096\3\2\2\2\34\u00ab\3\2\2\2\36\u00ae\3"+
- "\2\2\2 \u00bb\3\2\2\2\"\u00c5\3\2\2\2$\u00d3\3\2\2\2&\u00da\3\2\2\2(\u00dc"+
- "\3\2\2\2*\u00f4\3\2\2\2,\u00f6\3\2\2\2.\u0101\3\2\2\2\60\u0103\3\2\2\2"+
- "\62\u0105\3\2\2\2\64\66\5\4\3\2\65\67\5\6\4\2\66\65\3\2\2\2\66\67\3\2"+
- "\2\2\679\3\2\2\28:\5\b\5\298\3\2\2\29:\3\2\2\2:<\3\2\2\2;=\5\n\6\2<;\3"+
- "\2\2\2<=\3\2\2\2=>\3\2\2\2>?\5\24\13\2?@\7\2\2\3@\3\3\2\2\2AB\7\3\2\2"+
- "BC\7$\2\2CD\7+\2\2D\5\3\2\2\2EF\7\4\2\2FG\7$\2\2GH\7(\2\2H\7\3\2\2\2I"+
- "J\7\5\2\2JK\7$\2\2KL\7(\2\2L\t\3\2\2\2MN\7\6\2\2NO\7$\2\2OP\7\32\2\2P"+
- "Q\5\f\7\2QR\7\32\2\2R\13\3\2\2\2SV\b\7\1\2TV\5\16\b\2US\3\2\2\2UT\3\2"+
- "\2\2V\\\3\2\2\2WX\f\3\2\2XY\7\34\2\2Y[\5\16\b\2ZW\3\2\2\2[^\3\2\2\2\\"+
- "Z\3\2\2\2\\]\3\2\2\2]\r\3\2\2\2^\\\3\2\2\2_a\5\20\t\2`b\5.\30\2a`\3\2"+
- "\2\2ab\3\2\2\2b\17\3\2\2\2ci\7+\2\2de\7\26\2\2ef\5\22\n\2fg\7\27\2\2g"+
- "i\3\2\2\2hc\3\2\2\2hd\3\2\2\2i\21\3\2\2\2jk\b\n\1\2kl\7+\2\2lr\3\2\2\2"+
- "mn\f\3\2\2no\7\24\2\2oq\7+\2\2pm\3\2\2\2qt\3\2\2\2rp\3\2\2\2rs\3\2\2\2"+
- "s\23\3\2\2\2tr\3\2\2\2uv\b\13\1\2vw\5\26\f\2w|\3\2\2\2xy\f\3\2\2y{\5\26"+
- "\f\2zx\3\2\2\2{~\3\2\2\2|z\3\2\2\2|}\3\2\2\2}\25\3\2\2\2~|\3\2\2\2\177"+
- "\u0081\7\7\2\2\u0080\u0082\5\30\r\2\u0081\u0080\3\2\2\2\u0081\u0082\3"+
- "\2\2\2\u0082\u0083\3\2\2\2\u0083\u0084\7$\2\2\u0084\u0085\7\30\2\2\u0085"+
- "\u0086\5\32\16\2\u0086\u0088\7\31\2\2\u0087\u0089\5.\30\2\u0088\u0087"+
- "\3\2\2\2\u0088\u0089\3\2\2\2\u0089\27\3\2\2\2\u008a\u008b\7\26\2\2\u008b"+
- "\u008c\7+\2\2\u008c\u008d\7\27\2\2\u008d\31\3\2\2\2\u008e\u008f\b\16\1"+
- "\2\u008f\u0097\5\34\17\2\u0090\u0091\7\26\2\2\u0091\u0092\5\32\16\2\u0092"+
- "\u0093\7\27\2\2\u0093\u0097\3\2\2\2\u0094\u0095\7\25\2\2\u0095\u0097\5"+
- "\32\16\3\u0096\u008e\3\2\2\2\u0096\u0090\3\2\2\2\u0096\u0094\3\2\2\2\u0097"+
- "\u009d\3\2\2\2\u0098\u0099\f\4\2\2\u0099\u009a\t\2\2\2\u009a\u009c\5\32"+
- "\16\5\u009b\u0098\3\2\2\2\u009c\u009f\3\2\2\2\u009d\u009b\3\2\2\2\u009d"+
- "\u009e\3\2\2\2\u009e\33\3\2\2\2\u009f\u009d\3\2\2\2\u00a0\u00a1\5\36\20"+
- "\2\u00a1\u00a2\7\21\2\2\u00a2\u00a3\5&\24\2\u00a3\u00ac\3\2\2\2\u00a4"+
- "\u00a5\7+\2\2\u00a5\u00a6\7\26\2\2\u00a6\u00a7\5\36\20\2\u00a7\u00a8\7"+
- "\27\2\2\u00a8\u00a9\7\21\2\2\u00a9\u00aa\5&\24\2\u00aa\u00ac\3\2\2\2\u00ab"+
- "\u00a0\3\2\2\2\u00ab\u00a4\3\2\2\2\u00ac\35\3\2\2\2\u00ad\u00af\5 \21"+
- "\2\u00ae\u00ad\3\2\2\2\u00ae\u00af\3\2\2\2\u00af\u00b9\3\2\2\2\u00b0\u00ba"+
- "\7\b\2\2\u00b1\u00ba\7\t\2\2\u00b2\u00ba\7\n\2\2\u00b3\u00ba\7\13\2\2"+
- "\u00b4\u00ba\7\f\2\2\u00b5\u00ba\7\r\2\2\u00b6\u00ba\7\16\2\2\u00b7\u00ba"+
- "\7\17\2\2\u00b8\u00ba\5*\26\2\u00b9\u00b0\3\2\2\2\u00b9\u00b1\3\2\2\2"+
- "\u00b9\u00b2\3\2\2\2\u00b9\u00b3\3\2\2\2\u00b9\u00b4\3\2\2\2\u00b9\u00b5"+
- "\3\2\2\2\u00b9\u00b6\3\2\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00b8\3\2\2\2\u00ba"+
- "\37\3\2\2\2\u00bb\u00bc\b\21\1\2\u00bc\u00bd\5\"\22\2\u00bd\u00c2\3\2"+
- "\2\2\u00be\u00bf\f\3\2\2\u00bf\u00c1\5\"\22\2\u00c0\u00be\3\2\2\2\u00c1"+
- "\u00c4\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3!\3\2\2\2"+
- "\u00c4\u00c2\3\2\2\2\u00c5\u00c6\7+\2\2\u00c6\u00c7\7\"\2\2\u00c7#\3\2"+
- "\2\2\u00c8\u00d4\7\20\2\2\u00c9\u00cb\7!\2\2\u00ca\u00c9\3\2\2\2\u00ca"+
- "\u00cb\3\2\2\2\u00cb\u00cf\3\2\2\2\u00cc\u00d0\7)\2\2\u00cd\u00ce\7)\2"+
- "\2\u00ce\u00d0\7*\2\2\u00cf\u00cc\3\2\2\2\u00cf\u00cd\3\2\2\2\u00d0\u00d4"+
- "\3\2\2\2\u00d1\u00d4\7(\2\2\u00d2\u00d4\5,\27\2\u00d3\u00c8\3\2\2\2\u00d3"+
- "\u00ca\3\2\2\2\u00d3\u00d1\3\2\2\2\u00d3\u00d2\3\2\2\2\u00d4%\3\2\2\2"+
- "\u00d5\u00db\5$\23\2\u00d6\u00d7\7\26\2\2\u00d7\u00d8\5(\25\2\u00d8\u00d9"+
- "\7\27\2\2\u00d9\u00db\3\2\2\2\u00da\u00d5\3\2\2\2\u00da\u00d6\3\2\2\2"+
- "\u00db\'\3\2\2\2\u00dc\u00dd\b\25\1\2\u00dd\u00de\5$\23\2\u00de\u00e4"+
- "\3\2\2\2\u00df\u00e0\f\3\2\2\u00e0\u00e1\7\37\2\2\u00e1\u00e3\5$\23\2"+
- "\u00e2\u00df\3\2\2\2\u00e3\u00e6\3\2\2\2\u00e4\u00e2\3\2\2\2\u00e4\u00e5"+
- "\3\2\2\2\u00e5)\3\2\2\2\u00e6\u00e4\3\2\2\2\u00e7\u00e8\7\33\2\2\u00e8"+
- "\u00f5\7+\2\2\u00e9\u00ea\7\33\2\2\u00ea\u00eb\7+\2\2\u00eb\u00ec\7\35"+
- "\2\2\u00ec\u00ed\7)\2\2\u00ed\u00f5\7\36\2\2\u00ee\u00ef\7\33\2\2\u00ef"+
- "\u00f0\7+\2\2\u00f0\u00f1\7\35\2\2\u00f1\u00f2\5,\27\2\u00f2\u00f3\7\36"+
- "\2\2\u00f3\u00f5\3\2\2\2\u00f4\u00e7\3\2\2\2\u00f4\u00e9\3\2\2\2\u00f4"+
- "\u00ee\3\2\2\2\u00f5+\3\2\2\2\u00f6\u00fa\7\32\2\2\u00f7\u00f9\n\3\2\2"+
- "\u00f8\u00f7\3\2\2\2\u00f9\u00fc\3\2\2\2\u00fa\u00f8\3\2\2\2\u00fa\u00fb"+
- "\3\2\2\2\u00fb\u00fd\3\2\2\2\u00fc\u00fa\3\2\2\2\u00fd\u00fe\7\32\2\2"+
- "\u00fe-\3\2\2\2\u00ff\u0102\5\60\31\2\u0100\u0102\5\62\32\2\u0101\u00ff"+
- "\3\2\2\2\u0101\u0100\3\2\2\2\u0102/\3\2\2\2\u0103\u0104\t\4\2\2\u0104"+
- "\61\3\2\2\2\u0105\u0106\7\35\2\2\u0106\u0107\7)\2\2\u0107\u0108\7\37\2"+
- "\2\u0108\u0109\7)\2\2\u0109\u010a\7\36\2\2\u010a\63\3\2\2\2\33\669<U\\"+
- "ahr|\u0081\u0088\u0096\u009d\u00ab\u00ae\u00b9\u00c2\u00ca\u00cf\u00d3"+
- "\u00da\u00e4\u00f4\u00fa\u0101";
+ "\4\32\t\32\3\2\3\2\5\2\67\n\2\3\2\5\2:\n\2\3\2\3\2\3\2\3\3\3\3\3\3\3\3"+
+ "\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\5\6O\n\6\3\6\3\6\3\6"+
+ "\7\6T\n\6\f\6\16\6W\13\6\3\7\3\7\5\7[\n\7\3\b\3\b\3\b\3\b\3\b\5\bb\n\b"+
+ "\3\t\3\t\3\t\3\t\3\t\3\t\7\tj\n\t\f\t\16\tm\13\t\3\n\3\n\3\n\3\n\3\n\7"+
+ "\nt\n\n\f\n\16\nw\13\n\3\13\3\13\3\f\3\f\5\f}\n\f\3\f\3\f\3\f\3\f\3\f"+
+ "\5\f\u0084\n\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
+ "\5\16\u0092\n\16\3\16\3\16\3\16\7\16\u0097\n\16\f\16\16\16\u009a\13\16"+
+ "\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u00a7\n\17"+
+ "\3\20\5\20\u00aa\n\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20"+
+ "\u00b5\n\20\3\21\3\21\3\21\3\21\3\21\7\21\u00bc\n\21\f\21\16\21\u00bf"+
+ "\13\21\3\22\3\22\3\22\3\23\3\23\5\23\u00c6\n\23\3\23\3\23\3\23\5\23\u00cb"+
+ "\n\23\3\23\3\23\5\23\u00cf\n\23\3\24\3\24\3\24\3\24\3\24\5\24\u00d6\n"+
+ "\24\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u00de\n\25\f\25\16\25\u00e1\13"+
+ "\25\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\5"+
+ "\26\u00f0\n\26\3\27\3\27\7\27\u00f4\n\27\f\27\16\27\u00f7\13\27\3\27\3"+
+ "\27\3\30\3\30\5\30\u00fd\n\30\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32"+
+ "\3\32\2\b\n\20\22\32 (\33\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&"+
+ "(*,.\60\62\2\6\4\2\32\32##\3\2\21\22\3\2\31\31\3\2$&\2\u0110\2\64\3\2"+
+ "\2\2\4>\3\2\2\2\6B\3\2\2\2\bF\3\2\2\2\nN\3\2\2\2\fX\3\2\2\2\16a\3\2\2"+
+ "\2\20c\3\2\2\2\22n\3\2\2\2\24x\3\2\2\2\26z\3\2\2\2\30\u0085\3\2\2\2\32"+
+ "\u0091\3\2\2\2\34\u00a6\3\2\2\2\36\u00a9\3\2\2\2 \u00b6\3\2\2\2\"\u00c0"+
+ "\3\2\2\2$\u00ce\3\2\2\2&\u00d5\3\2\2\2(\u00d7\3\2\2\2*\u00ef\3\2\2\2,"+
+ "\u00f1\3\2\2\2.\u00fc\3\2\2\2\60\u00fe\3\2\2\2\62\u0100\3\2\2\2\64\66"+
+ "\5\4\3\2\65\67\5\6\4\2\66\65\3\2\2\2\66\67\3\2\2\2\679\3\2\2\28:\5\b\5"+
+ "\298\3\2\2\29:\3\2\2\2:;\3\2\2\2;<\5\22\n\2<=\7\2\2\3=\3\3\2\2\2>?\7\3"+
+ "\2\2?@\7#\2\2@A\7*\2\2A\5\3\2\2\2BC\7\4\2\2CD\7#\2\2DE\7\'\2\2E\7\3\2"+
+ "\2\2FG\7\5\2\2GH\7#\2\2HI\7\31\2\2IJ\5\n\6\2JK\7\31\2\2K\t\3\2\2\2LO\b"+
+ "\6\1\2MO\5\f\7\2NL\3\2\2\2NM\3\2\2\2OU\3\2\2\2PQ\f\3\2\2QR\7\33\2\2RT"+
+ "\5\f\7\2SP\3\2\2\2TW\3\2\2\2US\3\2\2\2UV\3\2\2\2V\13\3\2\2\2WU\3\2\2\2"+
+ "XZ\5\16\b\2Y[\5.\30\2ZY\3\2\2\2Z[\3\2\2\2[\r\3\2\2\2\\b\7*\2\2]^\7\25"+
+ "\2\2^_\5\20\t\2_`\7\26\2\2`b\3\2\2\2a\\\3\2\2\2a]\3\2\2\2b\17\3\2\2\2"+
+ "cd\b\t\1\2de\7*\2\2ek\3\2\2\2fg\f\3\2\2gh\7\23\2\2hj\7*\2\2if\3\2\2\2"+
+ "jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\21\3\2\2\2mk\3\2\2\2no\b\n\1\2op\5\26"+
+ "\f\2pu\3\2\2\2qr\f\3\2\2rt\5\26\f\2sq\3\2\2\2tw\3\2\2\2us\3\2\2\2uv\3"+
+ "\2\2\2v\23\3\2\2\2wu\3\2\2\2xy\t\2\2\2y\25\3\2\2\2z|\7\6\2\2{}\5\30\r"+
+ "\2|{\3\2\2\2|}\3\2\2\2}~\3\2\2\2~\177\5\24\13\2\177\u0080\7\27\2\2\u0080"+
+ "\u0081\5\32\16\2\u0081\u0083\7\30\2\2\u0082\u0084\5.\30\2\u0083\u0082"+
+ "\3\2\2\2\u0083\u0084\3\2\2\2\u0084\27\3\2\2\2\u0085\u0086\7\25\2\2\u0086"+
+ "\u0087\7*\2\2\u0087\u0088\7\26\2\2\u0088\31\3\2\2\2\u0089\u008a\b\16\1"+
+ "\2\u008a\u0092\5\34\17\2\u008b\u008c\7\25\2\2\u008c\u008d\5\32\16\2\u008d"+
+ "\u008e\7\26\2\2\u008e\u0092\3\2\2\2\u008f\u0090\7\24\2\2\u0090\u0092\5"+
+ "\32\16\3\u0091\u0089\3\2\2\2\u0091\u008b\3\2\2\2\u0091\u008f\3\2\2\2\u0092"+
+ "\u0098\3\2\2\2\u0093\u0094\f\4\2\2\u0094\u0095\t\3\2\2\u0095\u0097\5\32"+
+ "\16\5\u0096\u0093\3\2\2\2\u0097\u009a\3\2\2\2\u0098\u0096\3\2\2\2\u0098"+
+ "\u0099\3\2\2\2\u0099\33\3\2\2\2\u009a\u0098\3\2\2\2\u009b\u009c\5\36\20"+
+ "\2\u009c\u009d\7\20\2\2\u009d\u009e\5&\24\2\u009e\u00a7\3\2\2\2\u009f"+
+ "\u00a0\7*\2\2\u00a0\u00a1\7\25\2\2\u00a1\u00a2\5\36\20\2\u00a2\u00a3\7"+
+ "\26\2\2\u00a3\u00a4\7\20\2\2\u00a4\u00a5\5&\24\2\u00a5\u00a7\3\2\2\2\u00a6"+
+ "\u009b\3\2\2\2\u00a6\u009f\3\2\2\2\u00a7\35\3\2\2\2\u00a8\u00aa\5 \21"+
+ "\2\u00a9\u00a8\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00b4\3\2\2\2\u00ab\u00b5"+
+ "\7\7\2\2\u00ac\u00b5\7\b\2\2\u00ad\u00b5\7\t\2\2\u00ae\u00b5\7\n\2\2\u00af"+
+ "\u00b5\7\13\2\2\u00b0\u00b5\7\f\2\2\u00b1\u00b5\7\r\2\2\u00b2\u00b5\7"+
+ "\16\2\2\u00b3\u00b5\5*\26\2\u00b4\u00ab\3\2\2\2\u00b4\u00ac\3\2\2\2\u00b4"+
+ "\u00ad\3\2\2\2\u00b4\u00ae\3\2\2\2\u00b4\u00af\3\2\2\2\u00b4\u00b0\3\2"+
+ "\2\2\u00b4\u00b1\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b4\u00b3\3\2\2\2\u00b5"+
+ "\37\3\2\2\2\u00b6\u00b7\b\21\1\2\u00b7\u00b8\5\"\22\2\u00b8\u00bd\3\2"+
+ "\2\2\u00b9\u00ba\f\3\2\2\u00ba\u00bc\5\"\22\2\u00bb\u00b9\3\2\2\2\u00bc"+
+ "\u00bf\3\2\2\2\u00bd\u00bb\3\2\2\2\u00bd\u00be\3\2\2\2\u00be!\3\2\2\2"+
+ "\u00bf\u00bd\3\2\2\2\u00c0\u00c1\7*\2\2\u00c1\u00c2\7!\2\2\u00c2#\3\2"+
+ "\2\2\u00c3\u00cf\7\17\2\2\u00c4\u00c6\7 \2\2\u00c5\u00c4\3\2\2\2\u00c5"+
+ "\u00c6\3\2\2\2\u00c6\u00ca\3\2\2\2\u00c7\u00cb\7(\2\2\u00c8\u00c9\7(\2"+
+ "\2\u00c9\u00cb\7)\2\2\u00ca\u00c7\3\2\2\2\u00ca\u00c8\3\2\2\2\u00cb\u00cf"+
+ "\3\2\2\2\u00cc\u00cf\7\'\2\2\u00cd\u00cf\5,\27\2\u00ce\u00c3\3\2\2\2\u00ce"+
+ "\u00c5\3\2\2\2\u00ce\u00cc\3\2\2\2\u00ce\u00cd\3\2\2\2\u00cf%\3\2\2\2"+
+ "\u00d0\u00d6\5$\23\2\u00d1\u00d2\7\25\2\2\u00d2\u00d3\5(\25\2\u00d3\u00d4"+
+ "\7\26\2\2\u00d4\u00d6\3\2\2\2\u00d5\u00d0\3\2\2\2\u00d5\u00d1\3\2\2\2"+
+ "\u00d6\'\3\2\2\2\u00d7\u00d8\b\25\1\2\u00d8\u00d9\5$\23\2\u00d9\u00df"+
+ "\3\2\2\2\u00da\u00db\f\3\2\2\u00db\u00dc\7\36\2\2\u00dc\u00de\5$\23\2"+
+ "\u00dd\u00da\3\2\2\2\u00de\u00e1\3\2\2\2\u00df\u00dd\3\2\2\2\u00df\u00e0"+
+ "\3\2\2\2\u00e0)\3\2\2\2\u00e1\u00df\3\2\2\2\u00e2\u00e3\7\32\2\2\u00e3"+
+ "\u00f0\7*\2\2\u00e4\u00e5\7\32\2\2\u00e5\u00e6\7*\2\2\u00e6\u00e7\7\34"+
+ "\2\2\u00e7\u00e8\7(\2\2\u00e8\u00f0\7\35\2\2\u00e9\u00ea\7\32\2\2\u00ea"+
+ "\u00eb\7*\2\2\u00eb\u00ec\7\34\2\2\u00ec\u00ed\5,\27\2\u00ed\u00ee\7\35"+
+ "\2\2\u00ee\u00f0\3\2\2\2\u00ef\u00e2\3\2\2\2\u00ef\u00e4\3\2\2\2\u00ef"+
+ "\u00e9\3\2\2\2\u00f0+\3\2\2\2\u00f1\u00f5\7\31\2\2\u00f2\u00f4\n\4\2\2"+
+ "\u00f3\u00f2\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3\3\2\2\2\u00f5\u00f6"+
+ "\3\2\2\2\u00f6\u00f8\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f8\u00f9\7\31\2\2"+
+ "\u00f9-\3\2\2\2\u00fa\u00fd\5\60\31\2\u00fb\u00fd\5\62\32\2\u00fc\u00fa"+
+ "\3\2\2\2\u00fc\u00fb\3\2\2\2\u00fd/\3\2\2\2\u00fe\u00ff\t\5\2\2\u00ff"+
+ "\61\3\2\2\2\u0100\u0101\7\34\2\2\u0101\u0102\7(\2\2\u0102\u0103\7\36\2"+
+ "\2\u0103\u0104\7(\2\2\u0104\u0105\7\35\2\2\u0105\63\3\2\2\2\32\669NUZ"+
+ "aku|\u0083\u0091\u0098\u00a6\u00a9\u00b4\u00bd\u00c5\u00ca\u00ce\u00d5"+
+ "\u00df\u00ef\u00f5\u00fc";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslVisitor.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslVisitor.java
deleted file mode 100644
index b9b45c6..0000000
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDslVisitor.java
+++ /dev/null
@@ -1,163 +0,0 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4 by ANTLR 4.8
-package org.apache.nlpcraft.model.intent.impl.antlr4;
-import org.antlr.v4.runtime.tree.ParseTreeVisitor;
-
-/**
- * This interface defines a complete generic visitor for a parse tree produced
- * by {@link NCIntentDslParser}.
- *
- * @param <T> The return type of the visit operation. Use {@link Void} for
- * operations with no return type.
- */
-public interface NCIntentDslVisitor<T> extends ParseTreeVisitor<T> {
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#intent}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitIntent(NCIntentDslParser.IntentContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#intentId}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitIntentId(NCIntentDslParser.IntentIdContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#convDecl}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitConvDecl(NCIntentDslParser.ConvDeclContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#orderedDecl}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitOrderedDecl(NCIntentDslParser.OrderedDeclContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#flowDecl}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitFlowDecl(NCIntentDslParser.FlowDeclContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#flow}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitFlow(NCIntentDslParser.FlowContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#flowItem}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitFlowItem(NCIntentDslParser.FlowItemContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#flowItemIds}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitFlowItemIds(NCIntentDslParser.FlowItemIdsContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#idList}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitIdList(NCIntentDslParser.IdListContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#terms}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitTerms(NCIntentDslParser.TermsContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#term}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitTerm(NCIntentDslParser.TermContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#termId}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitTermId(NCIntentDslParser.TermIdContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#item}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitItem(NCIntentDslParser.ItemContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#predicate}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitPredicate(NCIntentDslParser.PredicateContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#lval}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLval(NCIntentDslParser.LvalContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#lvalQual}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLvalQual(NCIntentDslParser.LvalQualContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#lvalPart}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLvalPart(NCIntentDslParser.LvalPartContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#rvalSingle}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitRvalSingle(NCIntentDslParser.RvalSingleContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#rval}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitRval(NCIntentDslParser.RvalContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#rvalList}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitRvalList(NCIntentDslParser.RvalListContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#meta}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitMeta(NCIntentDslParser.MetaContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#qstring}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitQstring(NCIntentDslParser.QstringContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#minMax}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitMinMax(NCIntentDslParser.MinMaxContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#minMaxShortcut}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitMinMaxShortcut(NCIntentDslParser.MinMaxShortcutContext ctx);
- /**
- * Visit a parse tree produced by {@link NCIntentDslParser#minMaxRange}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitMinMaxRange(NCIntentDslParser.MinMaxRangeContext ctx);
-}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslIntent.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslIntent.scala
index 945439f..3274edf 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslIntent.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslIntent.scala
@@ -20,7 +20,7 @@
/**
* Intent from intent DSL.
*/
-case class NCDslIntent(id: String, conv: Boolean, ordered: Boolean, flow: Array[NCDslFlowItem], terms: Array[NCDslTerm]) {
+case class NCDslIntent(id: String, ordered: Boolean, flow: Array[NCDslFlowItem], terms: Array[NCDslTerm]) {
if (id == null)
throw new IllegalArgumentException("Intent ID must be provided.")
if (terms.length == 0)
@@ -35,13 +35,12 @@
* @return Full intent string representation in text DSL format.
*/
def toDslString: String = {
- val convStr = if (conv) "" else " conv=false"
val orderedStr = if (!ordered) "" else " ordered=true"
val flowStr = flow.mkString(" >> ") match {
case s: String if s.nonEmpty ⇒ s" flow=$s"
case _ ⇒ ""
}
- s"intent=$id$convStr$orderedStr$flowStr ${terms.mkString(" ")}"
+ s"intent=$id$orderedStr$flowStr ${terms.mkString(" ")}"
}
}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.java
index 6ed04a6..4192da8 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTerm.java
@@ -28,6 +28,9 @@
// Term's predicate.
final private Function<NCToken, Boolean> pred;
+ // Conversational or not.
+ final private boolean conv;
+
// Terms quantifiers.
final private int min, max;
@@ -41,8 +44,9 @@
* @param pred Token predicate.
* @param min Minimum quantifier for the predicate (inclusive).
* @param max Maximum quantifier for the predicate (inclusive).
+ * @param conv Whether or not this term is conversational.
*/
- public NCDslTerm(String id, Function<NCToken, Boolean> pred, int min, int max) {
+ public NCDslTerm(String id, Function<NCToken, Boolean> pred, int min, int max, boolean conv) {
if (pred == null)
throw new IllegalArgumentException("Intent DSL term predicate cannot be null.");
if (min < 0 || min > max)
@@ -56,6 +60,7 @@
this.pred = pred;
this.min = min;
this.max = max;
+ this.conv = conv;
}
/**
@@ -94,6 +99,13 @@
return max;
}
+ /**
+ * Whether or not this term support conversational context.
+ *
+ * @return {@code true} if this term supports conversational context, {@code false} otherwise.
+ */
+ public boolean isConversational() { return conv; }
+
@Override
public String toString() {
String minMax;
@@ -109,9 +121,11 @@
else
minMax = String.format("[%d,%d]", min, max);
+ String eq = conv ? "~" : "=";
+
if (id == null)
- return String.format("term={%s}%s", pred, minMax);
+ return String.format("term%s{%s}%s", eq, pred, minMax);
else
- return String.format("term(%s)={%s}%s", id, pred, minMax);
+ return String.format("term(%s)%s{%s}%s", id, eq, pred, minMax);
}
}
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
index dd56754..7b21809 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/tools/cmdline/NCCli.scala
@@ -58,6 +58,7 @@
import scala.collection.JavaConverters._
import scala.compat.Platform.currentTime
import scala.util.Try
+import scala.util.control.Breaks.{break, breakable}
import scala.util.control.Exception.ignoring
/**
@@ -1413,18 +1414,28 @@
case None ⇒ 20 // Default.
}
+ if (lines <= 0)
+ throw InvalidParameter(cmd, "lines")
+
loadServerBeacon() match {
case Some(beacon) ⇒
try
managed(new ReversedLinesFileReader(new File(beacon.logPath), StandardCharsets.UTF_8)) acquireAndGet { in ⇒
var tail = List.empty[String]
- for (_ ← 0 to lines)
- tail ::= in.readLine()
+ breakable {
+ for (_ ← 0 until lines)
+ in.readLine() match {
+ case null ⇒ break
+ case line ⇒ tail ::= line
+ }
+ }
- logln(bb(w(s"+----< ${K}Last $lines server log lines $W>---")))
+ val cnt = tail.size
+
+ logln(bb(w(s"+----< ${K}Last $cnt server log lines $W>---")))
tail.foreach(line ⇒ logln(s"${bb(w("| "))} $line"))
- logln(bb(w(s"+----< ${K}Last $lines server log lines $W>---")))
+ logln(bb(w(s"+----< ${K}Last $cnt server log lines $W>---")))
}
catch {
case e: Exception ⇒ error(s"Failed to read log file: ${e.getLocalizedMessage}")
@@ -1903,7 +1914,9 @@
* @param repl Whether or not executing from REPL.
*/
private def cmdNano(cmd: Command, args: Seq[Argument], repl: Boolean): Unit = {
- if (args.size > 1)
+ if (args.isEmpty)
+ throw NotEnoughArguments(cmd)
+ else if (args.size > 1)
throw TooManyArguments(cmd)
Commands.nano(term,
@@ -1955,7 +1968,7 @@
private def cmdLess(cmd: Command, args: Seq[Argument], repl: Boolean): Unit = {
if (args.isEmpty)
throw NotEnoughArguments(cmd)
- else if (args.size > 1)
+ else if (args.size > 1)
throw TooManyArguments(cmd)
Commands.less(term,
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala
index 18328d7..532ad76 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/NCModelSynonymDslCompiler.scala
@@ -20,11 +20,11 @@
import com.typesafe.scalalogging.LazyLogging
import org.antlr.v4.runtime._
import org.antlr.v4.runtime.tree._
-
import org.apache.nlpcraft.common._
import org.apache.nlpcraft.model.NCToken
import org.apache.nlpcraft.model.intent.utils.NCDslTokenPredicate
-import org.apache.nlpcraft.probe.mgrs.model.antlr4._
+import org.apache.nlpcraft.probe.mgrs.model.antlr4.{NCSynonymDslBaseListener, NCSynonymDslLexer, NCSynonymDslParser}
+//import org.apache.nlpcraft.probe.mgrs.model.antlr4._
import scala.collection.JavaConverters._
import scala.collection.mutable
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java
index d655d5c..5e399d9 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4\NCSynonymDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.probe.mgrs.model.antlr4;
import org.antlr.v4.runtime.ParserRuleContext;
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseVisitor.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseVisitor.java
deleted file mode 100644
index ed8033c..0000000
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslBaseVisitor.java
+++ /dev/null
@@ -1,98 +0,0 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 by ANTLR 4.8
-package org.apache.nlpcraft.probe.mgrs.model.antlr4;
-import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
-
-/**
- * This class provides an empty implementation of {@link NCSynonymDslVisitor},
- * which can be extended to create a visitor which only needs to handle a subset
- * of the available methods.
- *
- * @param <T> The return type of the visit operation. Use {@link Void} for
- * operations with no return type.
- */
-public class NCSynonymDslBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements NCSynonymDslVisitor<T> {
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitSynonym(NCSynonymDslParser.SynonymContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitAlias(NCSynonymDslParser.AliasContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitItem(NCSynonymDslParser.ItemContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitPredicate(NCSynonymDslParser.PredicateContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitLval(NCSynonymDslParser.LvalContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitLvalQual(NCSynonymDslParser.LvalQualContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitLvalPart(NCSynonymDslParser.LvalPartContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitRvalSingle(NCSynonymDslParser.RvalSingleContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitRval(NCSynonymDslParser.RvalContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitRvalList(NCSynonymDslParser.RvalListContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitMeta(NCSynonymDslParser.MetaContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.</p>
- */
- @Override public T visitQstring(NCSynonymDslParser.QstringContext ctx) { return visitChildren(ctx); }
-}
\ No newline at end of file
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java
index 106a6b6..97468fc 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslLexer.java
@@ -1,10 +1,13 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4\NCSynonymDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.probe.mgrs.model.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 NCSynonymDslLexer extends Lexer {
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java
index cff963c..e33a5cb 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslListener.java
@@ -1,4 +1,4 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4\NCSynonymDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.probe.mgrs.model.antlr4;
import org.antlr.v4.runtime.tree.ParseTreeListener;
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java
index 2767757..09bf741 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslParser.java
@@ -1,10 +1,13 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 by ANTLR 4.8
+// Generated from C:/Users/Nikita Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4\NCSynonymDsl.g4 by ANTLR 4.8
package org.apache.nlpcraft.probe.mgrs.model.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 NCSynonymDslParser extends Parser {
@@ -119,11 +122,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitSynonym(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitSynonym(this);
- else return visitor.visitChildren(this);
- }
}
public final SynonymContext synonym() throws RecognitionException {
@@ -199,11 +197,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitAlias(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitAlias(this);
- else return visitor.visitChildren(this);
- }
}
public final AliasContext alias() throws RecognitionException {
@@ -258,11 +251,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitItem(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitItem(this);
- else return visitor.visitChildren(this);
- }
}
public final ItemContext item() throws RecognitionException {
@@ -389,11 +377,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitPredicate(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitPredicate(this);
- else return visitor.visitChildren(this);
- }
}
public final PredicateContext predicate() throws RecognitionException {
@@ -463,11 +446,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitLval(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitLval(this);
- else return visitor.visitChildren(this);
- }
}
public final LvalContext lval() throws RecognitionException {
@@ -579,11 +557,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitLvalQual(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitLvalQual(this);
- else return visitor.visitChildren(this);
- }
}
public final LvalQualContext lvalQual() throws RecognitionException {
@@ -656,11 +629,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitLvalPart(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitLvalPart(this);
- else return visitor.visitChildren(this);
- }
}
public final LvalPartContext lvalPart() throws RecognitionException {
@@ -706,11 +674,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitRvalSingle(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitRvalSingle(this);
- else return visitor.visitChildren(this);
- }
}
public final RvalSingleContext rvalSingle() throws RecognitionException {
@@ -812,11 +775,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitRval(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitRval(this);
- else return visitor.visitChildren(this);
- }
}
public final RvalContext rval() throws RecognitionException {
@@ -883,11 +841,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitRvalList(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitRvalList(this);
- else return visitor.visitChildren(this);
- }
}
public final RvalListContext rvalList() throws RecognitionException {
@@ -968,11 +921,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitMeta(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitMeta(this);
- else return visitor.visitChildren(this);
- }
}
public final MetaContext meta() throws RecognitionException {
@@ -1051,11 +999,6 @@
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof NCSynonymDslListener ) ((NCSynonymDslListener)listener).exitQstring(this);
}
- @Override
- public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
- if ( visitor instanceof NCSynonymDslVisitor ) return ((NCSynonymDslVisitor<? extends T>)visitor).visitQstring(this);
- else return visitor.visitChildren(this);
- }
}
public final QstringContext qstring() throws RecognitionException {
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslVisitor.java b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslVisitor.java
deleted file mode 100644
index 72bedbf..0000000
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDslVisitor.java
+++ /dev/null
@@ -1,85 +0,0 @@
-// Generated from /Users/xxx/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/model/antlr4/NCSynonymDsl.g4 by ANTLR 4.8
-package org.apache.nlpcraft.probe.mgrs.model.antlr4;
-import org.antlr.v4.runtime.tree.ParseTreeVisitor;
-
-/**
- * This interface defines a complete generic visitor for a parse tree produced
- * by {@link NCSynonymDslParser}.
- *
- * @param <T> The return type of the visit operation. Use {@link Void} for
- * operations with no return type.
- */
-public interface NCSynonymDslVisitor<T> extends ParseTreeVisitor<T> {
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#synonym}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitSynonym(NCSynonymDslParser.SynonymContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#alias}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitAlias(NCSynonymDslParser.AliasContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#item}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitItem(NCSynonymDslParser.ItemContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#predicate}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitPredicate(NCSynonymDslParser.PredicateContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#lval}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLval(NCSynonymDslParser.LvalContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#lvalQual}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLvalQual(NCSynonymDslParser.LvalQualContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#lvalPart}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLvalPart(NCSynonymDslParser.LvalPartContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#rvalSingle}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitRvalSingle(NCSynonymDslParser.RvalSingleContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#rval}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitRval(NCSynonymDslParser.RvalContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#rvalList}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitRvalList(NCSynonymDslParser.RvalListContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#meta}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitMeta(NCSynonymDslParser.MetaContext ctx);
- /**
- * Visit a parse tree produced by {@link NCSynonymDslParser#qstring}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitQstring(NCSynonymDslParser.QstringContext ctx);
-}
\ No newline at end of file
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/NCIntentSampleSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/NCIntentSampleSpec.scala
index 5b3804a..e98558c 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/NCIntentSampleSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/NCIntentSampleSpec.scala
@@ -23,7 +23,7 @@
override def getId: String = id
}
- @NCIntent("intent=intent1 term={id=='x1'}")
+ @NCIntent("intent=intent1 term~{id=='x1'}")
@NCIntentSample(Array("x1", "x1"))
@NCIntentSample(Array("unknown", "unknown"))
private def onX1(ctx: NCIntentMatch): NCResult = "OK"
@@ -31,7 +31,7 @@
@NCIntentSample(Array("x1", "x2", "x3"))
@NCIntentSample(Array("x1", "x2"))
@NCIntentSample(Array("x1"))
- @NCIntent("intent=intent2 term={id=='x2'}")
+ @NCIntent("intent=intent2 term~{id=='x2'}")
private def onX2(ctx: NCIntentMatch): NCResult = "OK"
}
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
index fb042c5..6c6869e 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
@@ -54,7 +54,7 @@
}
)
- @NCIntent("intent=req conv=true term={id == 'test'}")
+ @NCIntent("intent=req term~{id == 'test'}")
def onMatch(ctx: NCIntentMatch): NCResult = {
val conv = ctx.getContext.getConversation
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/dsl_test_model.yaml b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/dsl_test_model.yaml
index d0a0eaa..ae76150 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/dsl_test_model.yaml
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/dsl_test_model.yaml
@@ -52,4 +52,4 @@
- "{fourth|4th} ^^[alias4](id == 'a3')^^"
intents:
- - "intent=i1 conv=false term(t1)={id == 'a' && ~txt == 'x'}"
+ - "intent=i1 term(t1)={id == 'a' && ~txt == 'x'}"
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModel.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModel.scala
index 5325077..a9ebe86 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModel.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModel.scala
@@ -44,15 +44,15 @@
override def getGroups: util.List[String] = groups.asJava
}
- @NCIntent("intent=sale term={id=='sale'}")
+ @NCIntent("intent=sale term~{id=='sale'}")
private def onSale(ctx: NCIntentMatch): NCResult = "sale"
- @NCIntent("intent=buy term={id=='buy'}")
+ @NCIntent("intent=buy term~{id=='buy'}")
private def onBuy(ctx: NCIntentMatch): NCResult = "buy"
- @NCIntent("intent=sale_best_employee term={id=='sale'} term={id=='best_employee'}")
+ @NCIntent("intent=sale_best_employee term~{id=='sale'} term~{id=='best_employee'}")
private def onBestEmployeeSale(ctx: NCIntentMatch): NCResult = "sale_best_employee"
- @NCIntent("intent=buy_best_employee term={id=='buy'} term={id=='best_employee'}")
+ @NCIntent("intent=buy_best_employee term~{id=='buy'} term~{id=='best_employee'}")
private def onBestEmployeeBuy(ctx: NCIntentMatch): NCResult = "buy_best_employee"
}