This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-206
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-206 by this push:
new 2646005 WIP.
2646005 is described below
commit 26460050b064308e512c51aee4b0d5c2045360fb
Author: Aaron Radzinski <[email protected]>
AuthorDate: Sun Feb 7 20:39:44 2021 -0800
WIP.
---
.../apache/nlpcraft/common/debug/NCLogHolder.scala | 2 +-
.../common/extcfg/NCExternalConfigManager.scala | 2 +-
.../apache/nlpcraft/common/socket/NCSocket.scala | 2 +-
.../apache/nlpcraft/common/util/NCIdGenerator.java | 2 +-
.../org/apache/nlpcraft/common/util/NCUtils.scala | 14 +-
.../nlpcraft/examples/sql/db/SqlValueLoader.scala | 2 +-
.../scala/org/apache/nlpcraft/model/NCResult.java | 2 +-
.../model/intent/impl/NCIntentDslCompiler.scala | 212 ++++++++++-----------
.../model/intent/impl/antlr4/NCIntentDsl.g4 | 3 +-
.../intent/impl/ver2/NCIntentDslCompiler.scala | 71 ++++++-
.../model/intent/utils/NCDslTokenPredicate.java | 8 +-
.../model/intent/utils/ver2/NCDslIntent.scala | 7 +-
.../nlpcraft/model/tools/cmdline/NCCli.scala | 10 +-
.../mgrs/model/NCModelSynonymDslCompiler.scala | 86 ++++-----
.../mgrs/nlp/enrichers/sort/NCSortEnricher.scala | 2 +-
.../geo/tools/metro/NCGeoMetroGenerator.scala | 2 +-
.../geo/tools/unstats/NCUnsdStatsService.scala | 2 +-
.../server/nlp/enrichers/date/NCDateEnricher.scala | 2 +-
.../enrichers/stopword/NCStopWordEnricher.scala | 6 +-
.../nlpcraft/server/rest/NCBasicRestApi.scala | 4 +-
.../apache/nlpcraft/server/sql/NCSqlManager.scala | 4 +-
.../nlpcraft/examples/sql/NCSqlExampleSpec.scala | 2 +-
.../model/intent/dsl/NCDslCompilerSpec.scala} | 29 +--
23 files changed, 267 insertions(+), 209 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
index ea2e692..f346759 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/debug/NCLogHolder.scala
@@ -186,7 +186,7 @@ class NCLogHolder extends Serializable {
val str = req.getData.get
try
- NCUtils.js2Obj(str)
+ NCUtils.jsonToObject(str)
catch {
case _: Exception ⇒ str
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
index 1923cbd..c041f7c 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/extcfg/NCExternalConfigManager.scala
@@ -120,7 +120,7 @@ object NCExternalConfigManager extends NCService {
managed(Source.fromURL(url)) acquireAndGet { src ⇒
src.getLines().map(_.trim()).filter(s ⇒ s.nonEmpty &&
!s.startsWith("#")).map(f = p ⇒ {
def splitPair(s: String, sep: String): (String,
String) = {
- val seq = s.split(sep).map(_.trim)
+ val seq = s.split(sep).map(_.strip)
if (seq.length != 2 || seq.exists(_.isEmpty))
throw new NCE(s"Unexpected '$url' file line
format: '$p'")
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/socket/NCSocket.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/socket/NCSocket.scala
index 7b76f4f..0d0c16f 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/socket/NCSocket.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/socket/NCSocket.scala
@@ -73,7 +73,7 @@ case class NCSocket(socket: Socket, soTimeout: Int = 20000)
extends LazyLogging
val len =
try
- Integer.parseInt(line.trim)
+ Integer.parseInt(line.strip)
catch {
case e: NumberFormatException ⇒ throw new
NCE(s"Unexpected content length: $line", e)
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCIdGenerator.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCIdGenerator.java
index a11ecf1..dd1abc6 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCIdGenerator.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCIdGenerator.java
@@ -52,7 +52,7 @@ public class NCIdGenerator {
* @param alphabet Alphabet.
*/
NCIdGenerator(String salt, int minHashLen, String alphabet) {
- if (alphabet == null || alphabet.trim().isEmpty())
+ if (alphabet == null || alphabet.strip().isEmpty())
throw new IllegalArgumentException("Alphabet must not be empty.");
if (salt != null)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
index 06d99d4..86f2e13 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
@@ -163,7 +163,7 @@ object NCUtils extends LazyLogging {
* @return
*/
def trimFilter(s: Seq[String]): Seq[String] =
- s.map(_.trim).filter(_.nonEmpty)
+ s.map(_.strip).filter(_.nonEmpty)
/**
* Splits, trims and filters empty strings for the given string.
@@ -183,7 +183,7 @@ object NCUtils extends LazyLogging {
*/
@tailrec
def trimQuotes(s: String): String = {
- val z = s.trim
+ val z = s.strip
if ((z.startsWith("'") && z.endsWith("'")) || (z.startsWith("\"") &&
z.endsWith("\"")))
trimQuotes(z.substring(1, z.length - 1))
@@ -474,7 +474,7 @@ object NCUtils extends LazyLogging {
* @return
*/
private def readLcTrimFilter(in: BufferedSource): List[String] =
- in.getLines().map(_.toLowerCase.trim).filter(s ⇒ s.nonEmpty &&
!s.startsWith("#")).toList
+ in.getLines().map(_.toLowerCase.strip).filter(s ⇒ s.nonEmpty &&
!s.startsWith("#")).toList
/**
* Reads lines from given file converting to lower case, trimming, and
filtering
@@ -518,7 +518,7 @@ object NCUtils extends LazyLogging {
* @param name Full name.
*/
def toFirstLastName(name: String): (String, String) = {
- val parts = name.trim.split(' ')
+ val parts = name.strip.split(' ')
val firstName = formatName(parts.head)
val lastName = formatName(parts.tail.mkString(" "))
@@ -532,7 +532,7 @@ object NCUtils extends LazyLogging {
* @param name First or last name.
*/
def formatName(name: String): String = {
- name.trim.toLowerCase.capitalize
+ name.strip.toLowerCase.capitalize
}
/**
@@ -1009,7 +1009,7 @@ object NCUtils extends LazyLogging {
*
* @param email Email to normalize.
*/
- def normalizeEmail(email: String): String = email.trim.toLowerCase
+ def normalizeEmail(email: String): String = email.strip.toLowerCase
/**
* Makes size restricted synchronized map.
@@ -1847,7 +1847,7 @@ object NCUtils extends LazyLogging {
* @param js JSON string.
*/
@throws[NCE]
- def js2Obj(js: String): AnyRef =
+ def jsonToObject(js: String): AnyRef =
try
GSON.fromJson(js, classOf[Object])
catch {
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlValueLoader.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlValueLoader.scala
index 353107a..6c6b0a3 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlValueLoader.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlValueLoader.scala
@@ -40,7 +40,7 @@ class SqlValueLoader extends NCValueLoader with LazyLogging {
SqlAccess.select(SqlQuery(s"SELECT $col FROM $tab WHERE $col IS NOT
NULL", Seq.empty), logResult = false).
rows.
map(_.head).
- map(_.trim).
+ map(_.strip).
filter(_.nonEmpty).
map(
v ⇒ new NCValue {
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCResult.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCResult.java
index db0cb9e..ae84ea5 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCResult.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCResult.java
@@ -121,7 +121,7 @@ public class NCResult implements Serializable {
public static NCResult json(String json) {
// Validation.
try {
- NCUtils.js2Obj(json);
+ NCUtils.jsonToObject(json);
}
catch (NCException e) {
throw new IllegalArgumentException(String.format("Invalid JSON
value: %s.", json), e.getCause());
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 b76b9dd..143ed38 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
@@ -48,11 +48,9 @@ object NCIntentDslCompiler extends LazyLogging {
private val terms = ArrayBuffer.empty[NCDslTerm] // Accumulator for
parsed terms.
private var flowRegex: Option[String] = None
- // Currently parsed term.
+ // Currently term.
private var termId: String = _
private var termConv: Boolean = _
-
- // Current min/max quantifier.
private var min = 1
private var max = 1
@@ -93,9 +91,9 @@ object NCIntentDslCompiler extends LazyLogging {
assert(false)
}
- override def exitLvalPart(ctx: NCIntentDslParser.LvalPartContext):
Unit = {
- lvalParts += ctx.ID().getText.trim()
- }
+// override def exitLvalPart(ctx: NCIntentDslParser.LvalPartContext):
Unit = {
+// lvalParts += ctx.ID().getText.trim()
+// }
override def exitTermId(ctx: NCIntentDslParser.TermIdContext): Unit = {
termId = ctx.ID().getText.trim
@@ -121,7 +119,7 @@ object NCIntentDslCompiler extends LazyLogging {
val qRegex = ctx.qstring().getText.trim
if (qRegex != null && qRegex.length > 2) {
- val regex = qRegex.substring(1, qRegex.length - 1).trim //
Remove single quotes.
+ val regex = qRegex.substring(1, qRegex.length - 1).strip //
Remove single quotes.
flowRegex = if (regex.nonEmpty) Some(regex) else None
}
@@ -132,7 +130,7 @@ object NCIntentDslCompiler extends LazyLogging {
}
override def exitOrderedDecl(ctx:
NCIntentDslParser.OrderedDeclContext): Unit = {
- ordered = ctx.BOOL().getText.trim == "true"
+ ordered = ctx.BOOL().getText.strip == "true"
}
override def exitTerm(ctx: NCIntentDslParser.TermContext): Unit = {
@@ -144,7 +142,7 @@ object NCIntentDslCompiler extends LazyLogging {
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().trim
//ctx.item().getText
+ override def toString: String = p.toString().strip
//ctx.item().getText
},
min,
max,
@@ -155,70 +153,70 @@ object NCIntentDslCompiler extends LazyLogging {
setMinMax(1, 1)
}
- override def exitRvalSingle(ctx: NCIntentDslParser.RvalSingleContext):
Unit = {
- rval = ctx.getText.trim()
- }
-
- override def exitRvalList(ctx: NCIntentDslParser.RvalListContext):
Unit = {
- rvalList += rval
- }
-
- override def exitItem(ctx: NCIntentDslParser.ItemContext): Unit = {
- if (ctx.EXCL() != null) {
- val p = predStack.pop
-
- predStack.push(new Function[NCToken, Boolean] {
- override def apply(tok: NCToken): Boolean = !p.apply(tok)
- override def toString: String = s"!$p"
- })
- }
- else if (ctx.AND() != null) {
- // Note that stack is LIFO so order is flipped.
- val p2 = predStack.pop
- val p1 = predStack.pop
-
- predStack.push(new Function[NCToken, Boolean] {
- override def apply(tok: NCToken): Boolean = {
- // To bypass any possible compiler optimizations.
- if (!p1.apply(tok))
- false
- else if (!p2.apply(tok))
- false
- else
- true
- }
- override def toString: String = s"$p1 && $p2"
- })
- }
- else if (ctx.OR() != null) {
- // Note that stack is LIFO so order is flipped.
- val p2 = predStack.pop
- val p1 = predStack.pop
-
- predStack.push(new Function[NCToken, Boolean] {
- override def apply(tok: NCToken): Boolean = {
- // To bypass any possible compiler optimizations.
- if (p1.apply(tok))
- true
- else if (p2.apply(tok))
- true
- else
- false
- }
- override def toString: String = s"$p1 || $p2"
- })
- }
- else if (ctx.RPAREN() != null && ctx.LPAREN() != null) {
- val p = predStack.pop
+// override def exitRvalSingle(ctx:
NCIntentDslParser.RvalSingleContext): Unit = {
+// rval = ctx.getText.trim()
+// }
- predStack.push(new Function[NCToken, Boolean] {
- override def apply(tok: NCToken): Boolean = p.apply(tok)
- override def toString: String = s"($p)"
- })
- }
+// override def exitRvalList(ctx: NCIntentDslParser.RvalListContext):
Unit = {
+// rvalList += rval
+// }
- // In all other cases the current predicate is already on the top
of the stack.
- }
+// override def exitItem(ctx: NCIntentDslParser.ItemContext): Unit = {
+// if (ctx.EXCL() != null) {
+// val p = predStack.pop
+//
+// predStack.push(new Function[NCToken, Boolean] {
+// override def apply(tok: NCToken): Boolean = !p.apply(tok)
+// override def toString: String = s"!$p"
+// })
+// }
+// else if (ctx.AND() != null) {
+// // Note that stack is LIFO so order is flipped.
+// val p2 = predStack.pop
+// val p1 = predStack.pop
+//
+// predStack.push(new Function[NCToken, Boolean] {
+// override def apply(tok: NCToken): Boolean = {
+// // To bypass any possible compiler optimizations.
+// if (!p1.apply(tok))
+// false
+// else if (!p2.apply(tok))
+// false
+// else
+// true
+// }
+// override def toString: String = s"$p1 && $p2"
+// })
+// }
+// else if (ctx.OR() != null) {
+// // Note that stack is LIFO so order is flipped.
+// val p2 = predStack.pop
+// val p1 = predStack.pop
+//
+// predStack.push(new Function[NCToken, Boolean] {
+// override def apply(tok: NCToken): Boolean = {
+// // To bypass any possible compiler optimizations.
+// if (p1.apply(tok))
+// true
+// else if (p2.apply(tok))
+// true
+// else
+// false
+// }
+// override def toString: String = s"$p1 || $p2"
+// })
+// }
+// else if (ctx.RPAREN() != null && ctx.LPAREN() != null) {
+// val p = predStack.pop
+//
+// predStack.push(new Function[NCToken, Boolean] {
+// override def apply(tok: NCToken): Boolean = p.apply(tok)
+// override def toString: String = s"($p)"
+// })
+// }
+//
+// // In all other cases the current predicate is already on the
top of the stack.
+// }
/**
*
@@ -252,42 +250,42 @@ object NCIntentDslCompiler extends LazyLogging {
}
}
- override def exitPredicate(ctx: NCIntentDslParser.PredicateContext):
Unit = {
- var lval: String = null
- var lvalFunc: String = null
- var op: String = null
-
- def getLvalNode(tree: ParseTree): String =
- tree.getChild(if (tree.getChildCount == 1) 0 else
1).getText.trim
-
- if (ctx.children.size() == 3) {
- lval = getLvalNode(ctx.getChild(0))
- op = ctx.getChild(1).getText.trim
- }
- else {
- lvalFunc = ctx.getChild(0).getText.trim
- lval = getLvalNode(ctx.getChild(2))
- op = ctx.getChild(4).getText.trim
- }
-
- val pred = new NCDslTokenPredicate(
- lvalParts.asJava,
- lvalFunc,
- lval,
- op,
- if (rvalList.isEmpty) mkRvalObject(rval) else
rvalList.map(mkRvalObject).asJava
- )
-
- predStack.push(new Function[NCToken, Boolean] {
- override def apply(tok: NCToken): Boolean = pred.apply(tok)
- override def toString: String = pred.toString
- })
-
- // Reset.
- lvalParts.clear()
- rvalList.clear()
- rval = null
- }
+// override def exitPredicate(ctx: NCIntentDslParser.PredicateContext):
Unit = {
+// var lval: String = null
+// var lvalFunc: String = null
+// var op: String = null
+//
+// def getLvalNode(tree: ParseTree): String =
+// tree.getChild(if (tree.getChildCount == 1) 0 else
1).getText.trim
+//
+// if (ctx.children.size() == 3) {
+// lval = getLvalNode(ctx.getChild(0))
+// op = ctx.getChild(1).getText.trim
+// }
+// else {
+// lvalFunc = ctx.getChild(0).getText.trim
+// lval = getLvalNode(ctx.getChild(2))
+// op = ctx.getChild(4).getText.trim
+// }
+//
+// val pred = new NCDslTokenPredicate(
+// lvalParts.asJava,
+// lvalFunc,
+// lval,
+// op,
+// if (rvalList.isEmpty) mkRvalObject(rval) else
rvalList.map(mkRvalObject).asJava
+// )
+//
+// predStack.push(new Function[NCToken, Boolean] {
+// override def apply(tok: NCToken): Boolean = pred.apply(tok)
+// override def toString: String = pred.toString
+// })
+//
+// // Reset.
+// lvalParts.clear()
+// rvalList.clear()
+// rval = null
+// }
}
/**
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 8f8a531..a204ab2 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
@@ -63,8 +63,9 @@ expr
| expr COMMA val
| LPAREN expr RPAREN
| expr (MINUS | PLUS | STAR | FSLASH) expr
- | ID LPAREN expr? RPAREN // Buit-in function call.
+ | funCall
;
+funCall: ID LPAREN expr? RPAREN; // Buit-in function call.
val
: NULL
| MINUS? INT REAL? EXP?
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
index c3c8b10..86b3975 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
@@ -44,6 +44,63 @@ object NCIntentDslCompiler extends LazyLogging {
private val terms = ArrayBuffer.empty[NCDslTerm] // Accumulator for
parsed terms.
private var flowRegex: Option[String] = None
+ // Currently term.
+ private var termId: String = _
+ private var termConv: Boolean = _
+ private var min = 1
+ private var max = 1
+
+ /**
+ *
+ * @param min
+ * @param max
+ */
+ private def setMinMax(min: Int, max: Int): Unit = {
+ this.min = min
+ this.max = max
+ }
+
+ override def exitMinMaxShortcut(ctx:
NCIntentDslParser.MinMaxShortcutContext): Unit = {
+ if (ctx.PLUS() != null)
+ setMinMax(1, Integer.MAX_VALUE)
+ else if (ctx.STAR() != null)
+ setMinMax(0, Integer.MAX_VALUE)
+ else if (ctx.QUESTION() != null)
+ setMinMax(0, 1)
+ else
+ assert(false)
+ }
+
+ override def exitTermId(ctx: NCIntentDslParser.TermIdContext): Unit = {
+ termId = ctx.ID().getText.trim
+ }
+
+ override def exitTermEq(ctx: NCIntentDslParser.TermEqContext): Unit = {
+ termConv = ctx.TILDA() != null
+ }
+
+ override def exitFlowDecl(ctx: NCIntentDslParser.FlowDeclContext):
Unit = {
+ val qRegex = ctx.qstring().getText.trim
+
+ if (qRegex != null && qRegex.length > 2) {
+ val regex = qRegex.substring(1, qRegex.length - 1).strip //
Remove single quotes.
+
+ flowRegex = if (regex.nonEmpty) Some(regex) else None
+ }
+ }
+
+ override def exitIntentId(ctx: NCIntentDslParser.IntentIdContext):
Unit = {
+ id = ctx.ID().getText.trim
+ }
+
+ override def exitMetaDecl(ctx: NCIntentDslParser.MetaDeclContext):
Unit = {
+ meta = U.jsonToObject(ctx.jsonObj().getText, classOf[Map[String,
Any]])
+ }
+
+ override def exitOrderedDecl(ctx:
NCIntentDslParser.OrderedDeclContext): Unit = {
+ ordered = ctx.BOOL().getText.strip == "true"
+ }
+
/**
*
* @return
@@ -52,7 +109,7 @@ object NCIntentDslCompiler extends LazyLogging {
require(id != null)
require(terms.nonEmpty)
- NCDslIntent(dsl, id, ordered, meta, flowRegex, terms.toArray)
+ NCDslIntent(dsl, id, ordered, if (meta == null) Map.empty else
meta, flowRegex, terms.toArray)
}
}
@@ -107,22 +164,24 @@ object NCIntentDslCompiler extends LazyLogging {
def compile(dsl: String, mdlId: String): NCDslIntent = {
require(dsl != null)
+ val src = dsl.strip()
+
this.mdlId = mdlId
- val intent: NCDslIntent = cache.getOrElseUpdate(dsl, {
+ val intent: NCDslIntent = cache.getOrElseUpdate(src, {
// ANTLR4 armature.
- val lexer = new NCIntentDslLexer(CharStreams.fromString(dsl))
+ val lexer = new NCIntentDslLexer(CharStreams.fromString(src))
val tokens = new CommonTokenStream(lexer)
val parser = new NCIntentDslParser(tokens)
// Set custom error handlers.
lexer.removeErrorListeners()
parser.removeErrorListeners()
- lexer.addErrorListener(new CompilerErrorListener(dsl))
- parser.addErrorListener(new CompilerErrorListener(dsl))
+ lexer.addErrorListener(new CompilerErrorListener(src))
+ parser.addErrorListener(new CompilerErrorListener(src))
// State automata.
- val fsm = new FiniteStateMachine(dsl)
+ val fsm = new FiniteStateMachine(src)
// Parse the input DSL and walk built AST.
(new ParseTreeWalker).walk(fsm, parser.intent())
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
index 6e8dee8..41e66ae 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/NCDslTokenPredicate.java
@@ -242,7 +242,7 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
switch (paramFunc) {
case "trim":
if (lval instanceof String)
- return ((String) lval).trim();
+ return ((String) lval).strip();
break;
@@ -413,14 +413,14 @@ public class NCDslTokenPredicate implements
Function<NCToken, Boolean> {
}
else
switch (param) {
- case "id": lval = tok.getId().trim(); break;
+ case "id": lval = tok.getId().strip(); break;
case "groups": lval = tok.getGroups(); break;
case "aliases": lval = tok.getAliases(); break;
case "startidx": lval = tok.getStartCharIndex(); break;
case "endidx": lval = tok.getEndCharIndex(); break;
case "ancestors": lval = tok.getAncestors(); break;
- case "value": lval = tok.getValue() == null ? null :
tok.getValue().trim(); break;
- case "parent": lval = tok.getParentId() == null ? null :
tok.getParentId().trim(); break;
+ case "value": lval = tok.getValue() == null ? null :
tok.getValue().strip(); break;
+ case "parent": lval = tok.getParentId() == null ? null :
tok.getParentId().strip(); break;
default: throw new IllegalArgumentException(String.format(
"Invalid token predicate DSL parameter ('%s'): %s %s %s",
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslIntent.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslIntent.scala
index c93a3e4..f76de0d 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslIntent.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslIntent.scala
@@ -28,8 +28,7 @@ case class NCDslIntent(
flow: Option[String],
terms: Array[NCDslTerm]
) {
- if (id == null)
- throw new IllegalArgumentException("Intent ID must be provided.")
- if (terms.length == 0)
- throw new IllegalArgumentException("Intent should have at least one
term.")
+ require(id != null)
+ require(terms.nonEmpty)
+ require(meta != null)
}
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 61a7412..81b981f 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
@@ -1525,7 +1525,7 @@ object NCCli extends App {
val logPath = if (beacon.logPath != null) g(beacon.logPath) else
y("<not available>")
val jarsFolder = if (beacon.jarsFolder != null) g(beacon.jarsFolder)
else y("<not set>")
- val mdlSeq = beacon.models.split(",").map(s ⇒ s"${g(s.trim)}").toSeq
+ val mdlSeq = beacon.models.split(",").map(s ⇒ s"${g(s.strip)}").toSeq
tbl += ("PID", s"${g(beacon.pid)}")
tbl += ("Probe ID", s"${g(beacon.id)}")
@@ -2904,7 +2904,7 @@ object NCCli extends App {
if (buf.nonEmpty)
lines += buf.toString()
- lines.map(_.trim)
+ lines.map(_.strip)
}
/**
@@ -2922,8 +2922,8 @@ object NCCli extends App {
if (parts.size > 2)
throw mkError()
- val name = if (parts.size == 1) arg.trim else parts(0).trim
- val value = if (parts.size == 1) None else
Some(U.trimQuotes(parts(1).trim))
+ val name = if (parts.size == 1) arg.strip else parts(0).trim
+ val value = if (parts.size == 1) None else
Some(U.trimQuotes(parts(1).strip))
val hasSynth = cmd.params.exists(_.synthetic)
if (name.endsWith("=")) // Missing value or extra '='.
@@ -2993,7 +2993,7 @@ object NCCli extends App {
if (args.nonEmpty) {
try
if (args.head.head == '$') {
- val head = args.head.tail.trim // Remove '$' from 1st
argument.
+ val head = args.head.tail.strip // Remove '$' from 1st
argument.
val tail = args.tail.toList
execOsCmd(if (head.isEmpty) tail else head :: tail)
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 9926d92..2b2b714 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
@@ -73,13 +73,13 @@ object NCModelSynonymDslCompiler extends LazyLogging {
NCModelSynonymDsl(alias, toJavaFunc(alias, predStack.pop()))
}
- override def exitRvalSingle(ctx:
NCSynonymDslParser.RvalSingleContext): Unit = {
- rval = ctx.getText.trim()
- }
-
- override def exitRvalList(ctx: NCSynonymDslParser.RvalListContext):
Unit = {
- rvalList += rval
- }
+// override def exitRvalSingle(ctx:
NCSynonymDslParser.RvalSingleContext): Unit = {
+// rval = ctx.getText.trim()
+// }
+//
+// override def exitRvalList(ctx: NCSynonymDslParser.RvalListContext):
Unit = {
+// rvalList += rval
+// }
override def exitTokQualPart(ctx:
NCSynonymDslParser.TokQualPartContext): Unit = {
tokQualParts += ctx.ID().getText.trim()
@@ -178,42 +178,42 @@ object NCModelSynonymDslCompiler extends LazyLogging {
}
}
- override def exitPredicate(ctx: NCSynonymDslParser.PredicateContext):
Unit = {
- var lval: String = null
- var lvalFunc: String = null
- var op: String = null
-
- def getLvalNode(tree: ParseTree): String =
- tree.getChild(if (tree.getChildCount == 1) 0 else
1).getText.trim
-
- if (ctx.children.size() == 3) {
- lval = getLvalNode(ctx.getChild(0))
- op = ctx.getChild(1).getText.trim
- }
- else {
- lvalFunc = ctx.getChild(0).getText.trim
- lval = getLvalNode(ctx.getChild(2))
- op = ctx.getChild(4).getText.trim
- }
-
- val pred = new NCDslTokenPredicate(
- tokQualParts.asJava,
- lvalFunc,
- lval,
- op,
- if (rvalList.isEmpty) mkRvalObject(rval) else
rvalList.map(mkRvalObject).asJava
- )
-
- predStack.push(new Function[NCToken, Boolean] {
- override def apply(tok: NCToken): Boolean = pred.apply(tok)
- override def toString: String = pred.toString
- })
-
- // Reset.
- tokQualParts.clear()
- rvalList.clear()
- rval = null
- }
+// override def exitPredicate(ctx:
NCSynonymDslParser.PredicateContext): Unit = {
+// var lval: String = null
+// var lvalFunc: String = null
+// var op: String = null
+//
+// def getLvalNode(tree: ParseTree): String =
+// tree.getChild(if (tree.getChildCount == 1) 0 else
1).getText.trim
+//
+// if (ctx.children.size() == 3) {
+// lval = getLvalNode(ctx.getChild(0))
+// op = ctx.getChild(1).getText.trim
+// }
+// else {
+// lvalFunc = ctx.getChild(0).getText.trim
+// lval = getLvalNode(ctx.getChild(2))
+// op = ctx.getChild(4).getText.trim
+// }
+//
+// val pred = new NCDslTokenPredicate(
+// tokQualParts.asJava,
+// lvalFunc,
+// lval,
+// op,
+// if (rvalList.isEmpty) mkRvalObject(rval) else
rvalList.map(mkRvalObject).asJava
+// )
+//
+// predStack.push(new Function[NCToken, Boolean] {
+// override def apply(tok: NCToken): Boolean = pred.apply(tok)
+// override def toString: String = pred.toString
+// })
+//
+// // Reset.
+// tokQualParts.clear()
+// rvalList.clear()
+// rval = null
+// }
}
/**
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
index d177c10..80dd614 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/enrichers/sort/NCSortEnricher.scala
@@ -535,7 +535,7 @@ object NCSortEnricher extends NCProbeEnricher {
}
stemAnd = NCNlpCoreManager.stem("and")
- maskWords = (sort ++ by ++ order.map(_._1)).flatMap(_.split("
")).map(_.trim).filter(_.nonEmpty).distinct
+ maskWords = (sort ++ by ++ order.map(_._1)).flatMap(_.split("
")).map(_.strip).filter(_.nonEmpty).distinct
validate()
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/metro/NCGeoMetroGenerator.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/metro/NCGeoMetroGenerator.scala
index 8093576..28565ac 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/metro/NCGeoMetroGenerator.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/metro/NCGeoMetroGenerator.scala
@@ -43,7 +43,7 @@ object NCGeoMetroGenerator extends App {
U.normalize(s.replaceAll("\\(", " ").replaceAll("\\)", " "), " ")
private def generate() {
- val lines = U.readPath(in, "UTF-8").map(_.trim).filter(_.nonEmpty)
+ val lines = U.readPath(in, "UTF-8").map(_.strip).filter(_.nonEmpty)
// Skips header.
val metro = lines.tail.filter(!_.contains("(not set)")).map(line ⇒
Holder(line.takeWhile(_ != ',')))
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/unstats/NCUnsdStatsService.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/unstats/NCUnsdStatsService.scala
index f521a12..ac4ba82 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/unstats/NCUnsdStatsService.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/geo/tools/unstats/NCUnsdStatsService.scala
@@ -72,7 +72,7 @@ object NCUnsdStatsService {
private val codesPath = s"$dir/codes.txt"
private def read(path: String): Seq[String] =
- U.readPath(path, "UTF-8").map(_.trim).filter(_.nonEmpty).filter(_.head
!= '#')
+ U.readPath(path,
"UTF-8").map(_.strip).filter(_.nonEmpty).filter(_.head != '#')
def skip(iso: String): Boolean = SKIPPED_COUNTRIES_ISO3.contains(iso)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
index 72c587c..1732ffd 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/date/NCDateEnricher.scala
@@ -136,7 +136,7 @@ object NCDateEnricher extends NCServerEnricher {
val map = U.readTextGzipResource(res, "UTF-8", logger).map(p ⇒
{
val idx = p.indexOf("|")
- p.take(idx).trim → p.drop(idx + 1).trim
+ p.take(idx).strip → p.drop(idx + 1).trim
})
m ++= map
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/stopword/NCStopWordEnricher.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/stopword/NCStopWordEnricher.scala
index 71db333..331c020 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/stopword/NCStopWordEnricher.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/nlp/enrichers/stopword/NCStopWordEnricher.scala
@@ -275,7 +275,7 @@ object NCStopWordEnricher extends NCServerEnricher {
map(_.trim.toUpperCase).
filter(_.nonEmpty).
toSeq.
- map(p ⇒ if (p.head == '~') p.drop(1).trim → false else
p → true).
+ map(p ⇒ if (p.head == '~') p.drop(1).strip → false
else p → true).
toMap
else
Map.empty
@@ -634,7 +634,7 @@ object NCStopWordEnricher extends NCServerEnricher {
for (tup ← origToks; key = tup._2 if !foundKeys.contains(key) &&
!isException(tup._1))
foundKeys.find(key.startsWith) match {
case Some(s) ⇒
- if (nounWords.contains(key.substring(s.length).trim))
+ if (nounWords.contains(key.substring(s.length).strip))
tup._1.foreach(tok ⇒ ns.fixNote(tok.getNlpNote,
"stopWord" → true))
case None ⇒ ()
}
@@ -678,7 +678,7 @@ object NCStopWordEnricher extends NCServerEnricher {
val m =
readStopWords(
U.readResource("stopwords/stop_words.txt", "UTF-8", logger).
- map(_.trim).filter(s ⇒ s.nonEmpty &&
!s.startsWith("#")).toSeq
+ map(_.strip).filter(s ⇒ s.nonEmpty &&
!s.startsWith("#")).toSeq
)
stopWords = m(false)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
index 40d3f3d..ea96314 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
@@ -215,13 +215,13 @@ class NCBasicRestApi extends NCRestApi with LazyLogging
with NCOpenCensusTrace w
s.resultType.isDefined &&
s.resultType.get == "json"
)
- U.js2Obj(s.resultBody.get)
+ U.jsonToObject(s.resultBody.get)
else
s.resultBody.orNull
),
"error" → s.error.orNull,
"errorCode" → s.errorCode.map(Integer.valueOf).orNull,
- "logHolder" → (if (s.logJson.isDefined) U.js2Obj(s.logJson.get)
else null),
+ "logHolder" → (if (s.logJson.isDefined)
U.jsonToObject(s.logJson.get) else null),
"intentId" → s.intentId.orNull
).filter(_._2 != null).asJava
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala
index d23a632..93d8788 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/sql/NCSqlManager.scala
@@ -1021,11 +1021,11 @@ object NCSqlManager extends NCService with
NCIgniteInstance {
@throws[NCE]
private def executeScript(sqlPath: String): Unit =
startScopedSpan("executeScript", "sqlPath" → sqlPath) { _ ⇒
U.readResource(sqlPath, "UTF-8").
- map(_.trim).
+ map(_.strip).
filter(p ⇒ !p.startsWith("--")).
mkString("\n").
split(";").
- map(_.trim).
+ map(_.strip).
filter(_.nonEmpty).
foreach(p ⇒ NCSql.ddl(p))
}
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/examples/sql/NCSqlExampleSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/examples/sql/NCSqlExampleSpec.scala
index 5505d3c..104e20e 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/examples/sql/NCSqlExampleSpec.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/examples/sql/NCSqlExampleSpec.scala
@@ -56,7 +56,7 @@ class NCSqlExampleSpec extends NCTestContext {
NORM.
foldLeft(s) { (res, s) ⇒ res.replaceAll(s, " ") }.
split(" ").
- map(_.trim).
+ map(_.strip).
filter(_.nonEmpty).
mkString(" ")
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslIntent.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslCompilerSpec.scala
similarity index 63%
copy from
nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslIntent.scala
copy to
nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslCompilerSpec.scala
index c93a3e4..3656d74 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslIntent.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslCompilerSpec.scala
@@ -15,21 +15,22 @@
* limitations under the License.
*/
-package org.apache.nlpcraft.model.intent.utils.ver2
+package org.apache.nlpcraft.model.intent.dsl
+
+import org.apache.nlpcraft.common.NCException
+import org.apache.nlpcraft.model.intent.impl.ver2.NCIntentDslCompiler
+import org.junit.jupiter.api.Test
/**
- * DSL intent.
+ * Tests for DSL compiler.
*/
-case class NCDslIntent(
- orig: String,
- id: String,
- ordered: Boolean,
- meta: Map[String, Any],
- flow: Option[String],
- terms: Array[NCDslTerm]
-) {
- if (id == null)
- throw new IllegalArgumentException("Intent ID must be provided.")
- if (terms.length == 0)
- throw new IllegalArgumentException("Intent should have at least one
term.")
+class NCDslCompilerSpec {
+ @Test
+ @throws[NCException]
+ def test(): Unit = {
+ NCIntentDslCompiler.compile(
+ """
+ |intent=i1 meta={'a': true} term={}
+ |""".stripMargin, "mdl.id")
+ }
}