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 f7bd364 WIP.
f7bd364 is described below
commit f7bd3647f5d4f47cd1b135df00e1259aaa1c5664
Author: Aaron Radzinski <[email protected]>
AuthorDate: Fri Feb 12 19:49:23 2021 -0800
WIP.
---
.../model/intent/impl/antlr4/NCIntentDsl.g4 | 4 +-
.../model/intent/impl/antlr4/NCIntentDsl.interp | 2 +-
.../impl/antlr4/NCIntentDslBaseListener.java | 2 +-
.../model/intent/impl/antlr4/NCIntentDslLexer.java | 2 +-
.../intent/impl/antlr4/NCIntentDslListener.java | 2 +-
.../intent/impl/antlr4/NCIntentDslParser.java | 270 ++++++++++---------
.../intent/impl/ver2/NCIntentDslCompiler.scala | 285 ++++++++++++++++-----
.../model/intent/utils/ver2/NCDslTermRetVal.scala | 2 +-
8 files changed, 368 insertions(+), 201 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
index 57a595f..938b565 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
@@ -57,7 +57,9 @@ termDef
| termDef (AND | OR) termDef
| EXCL termDef
;
-termPred: expr PRED_OP expr;
+termPred
+ : expr PRED_OP expr
+ | expr;
expr
: val
| expr COMMA val
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 2c559f9..00bd601 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
@@ -120,4 +120,4 @@ minMaxRange
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 46, 260, 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, 3, 2, 3, 2, 5, 2, 53, 10, 2, 3, 2, 5, 2, 56, 10, 2, 3, 2, 5, 2, 59, 10, 2,
3, 2, 3, 2, 3, 2, 3, 3, 3 [...]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 46, 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, 3, 2, 3, 2, 5, 2, 53, 10, 2, 3, 2, 5, 2, 56, 10, 2, 3, 2, 5, 2, 59, 10, 2,
3, 2, 3, 2, 3, 2, 3, 3, 3 [...]
\ No newline at end of file
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 c083c73..ed640ba 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/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
by ANTLR 4.9.1
+// 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.9.1
package org.apache.nlpcraft.model.intent.impl.antlr4;
import org.antlr.v4.runtime.ParserRuleContext;
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 a42630c..24d3f45 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,4 +1,4 @@
-// Generated from
/Users/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
by ANTLR 4.9.1
+// 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.9.1
package org.apache.nlpcraft.model.intent.impl.antlr4;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
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 6cce4e1..e18b490 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/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
by ANTLR 4.9.1
+// 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.9.1
package org.apache.nlpcraft.model.intent.impl.antlr4;
import org.antlr.v4.runtime.tree.ParseTreeListener;
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 355e75b..2a1fce0 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,4 +1,4 @@
-// Generated from
/Users/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/antlr4/NCIntentDsl.g4
by ANTLR 4.9.1
+// 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.9.1
package org.apache.nlpcraft.model.intent.impl.antlr4;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
@@ -1264,14 +1264,27 @@ public class NCIntentDslParser extends Parser {
TermPredContext _localctx = new TermPredContext(_ctx,
getState());
enterRule(_localctx, 32, RULE_termPred);
try {
- enterOuterAlt(_localctx, 1);
- {
- setState(197);
- expr(0);
- setState(198);
- match(PRED_OP);
- setState(199);
- expr(0);
+ setState(202);
+ _errHandler.sync(this);
+ switch (
getInterpreter().adaptivePredict(_input,19,_ctx) ) {
+ case 1:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(197);
+ expr(0);
+ setState(198);
+ match(PRED_OP);
+ setState(199);
+ expr(0);
+ }
+ break;
+ case 2:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(201);
+ expr(0);
+ }
+ break;
}
}
catch (RecognitionException re) {
@@ -1336,7 +1349,7 @@ public class NCIntentDslParser extends Parser {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(208);
+ setState(211);
_errHandler.sync(this);
switch (_input.LA(1)) {
case SQSTRING:
@@ -1346,23 +1359,23 @@ public class NCIntentDslParser extends Parser {
case NULL:
case INT:
{
- setState(202);
+ setState(205);
val();
}
break;
case LPAREN:
{
- setState(203);
+ setState(206);
match(LPAREN);
- setState(204);
+ setState(207);
expr(0);
- setState(205);
+ setState(208);
match(RPAREN);
}
break;
case ID:
{
- setState(207);
+ setState(210);
funCall();
}
break;
@@ -1370,24 +1383,24 @@ public class NCIntentDslParser extends Parser {
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
- setState(218);
+ setState(221);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,22,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(216);
+ setState(219);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,20,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,21,_ctx) ) {
case 1:
{
_localctx = new
ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(210);
+ setState(213);
if (!(precpred(_ctx, 2))) throw
new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(211);
+ setState(214);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 &&
((1L << _la) & ((1L << MINUS) | (1L << PLUS) | (1L << STAR) | (1L << FSLASH) |
(1L << PERCENT))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1397,7 +1410,7 @@ public class NCIntentDslParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(212);
+ setState(215);
expr(3);
}
break;
@@ -1405,20 +1418,20 @@ public class NCIntentDslParser extends Parser {
{
_localctx = new
ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(213);
+ setState(216);
if (!(precpred(_ctx, 4))) throw
new FailedPredicateException(this, "precpred(_ctx, 4)");
- setState(214);
+ setState(217);
match(COMMA);
- setState(215);
+ setState(218);
val();
}
break;
}
}
}
- setState(220);
+ setState(223);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,21,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,22,_ctx);
}
}
}
@@ -1461,21 +1474,21 @@ public class NCIntentDslParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(221);
+ setState(224);
match(ID);
- setState(222);
+ setState(225);
match(LPAREN);
- setState(224);
+ setState(227);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L <<
SQSTRING) | (1L << DQSTRING) | (1L << LPAREN) | (1L << MINUS) | (1L << BOOL) |
(1L << NULL) | (1L << INT) | (1L << ID))) != 0)) {
{
- setState(223);
+ setState(226);
expr(0);
}
}
- setState(226);
+ setState(229);
match(RPAREN);
}
}
@@ -1519,13 +1532,13 @@ public class NCIntentDslParser extends Parser {
enterRule(_localctx, 38, RULE_val);
int _la;
try {
- setState(241);
+ setState(244);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NULL:
enterOuterAlt(_localctx, 1);
{
- setState(228);
+ setState(231);
match(NULL);
}
break;
@@ -1533,34 +1546,34 @@ public class NCIntentDslParser extends Parser {
case INT:
enterOuterAlt(_localctx, 2);
{
- setState(230);
+ setState(233);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==MINUS) {
{
- setState(229);
+ setState(232);
match(MINUS);
}
}
- setState(232);
+ setState(235);
match(INT);
- setState(234);
+ setState(237);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,24,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,25,_ctx) ) {
case 1:
{
- setState(233);
+ setState(236);
match(REAL);
}
break;
}
- setState(237);
+ setState(240);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,25,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,26,_ctx) ) {
case 1:
{
- setState(236);
+ setState(239);
match(EXP);
}
break;
@@ -1570,7 +1583,7 @@ public class NCIntentDslParser extends Parser {
case BOOL:
enterOuterAlt(_localctx, 3);
{
- setState(239);
+ setState(242);
match(BOOL);
}
break;
@@ -1578,7 +1591,7 @@ public class NCIntentDslParser extends Parser {
case DQSTRING:
enterOuterAlt(_localctx, 4);
{
- setState(240);
+ setState(243);
qstring();
}
break;
@@ -1621,7 +1634,7 @@ public class NCIntentDslParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(243);
+ setState(246);
_la = _input.LA(1);
if ( !(_la==SQSTRING || _la==DQSTRING) ) {
_errHandler.recoverInline(this);
@@ -1669,7 +1682,7 @@ public class NCIntentDslParser extends Parser {
MinMaxContext _localctx = new MinMaxContext(_ctx, getState());
enterRule(_localctx, 42, RULE_minMax);
try {
- setState(247);
+ setState(250);
_errHandler.sync(this);
switch (_input.LA(1)) {
case PLUS:
@@ -1677,14 +1690,14 @@ public class NCIntentDslParser extends Parser {
case STAR:
enterOuterAlt(_localctx, 1);
{
- setState(245);
+ setState(248);
minMaxShortcut();
}
break;
case LBR:
enterOuterAlt(_localctx, 2);
{
- setState(246);
+ setState(249);
minMaxRange();
}
break;
@@ -1728,7 +1741,7 @@ public class NCIntentDslParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(249);
+ setState(252);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L <<
PLUS) | (1L << QUESTION) | (1L << STAR))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1779,15 +1792,15 @@ public class NCIntentDslParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(251);
+ setState(254);
match(LBR);
- setState(252);
+ setState(255);
match(INT);
- setState(253);
+ setState(256);
match(COMMA);
- setState(254);
+ setState(257);
match(INT);
- setState(255);
+ setState(258);
match(RBR);
}
}
@@ -1847,7 +1860,7 @@ public class NCIntentDslParser extends Parser {
}
public static final String _serializedATN =
-
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3.\u0104\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"+
@@ -1861,78 +1874,79 @@ public class NCIntentDslParser extends Parser {
"\3\r\5\r\u009f\n\r\3\16\5\16\u00a2\n\16\3\16\3\16\3\16\3\17\3\17\3\17"+
"\3\17\3\17\3\17\7\17\u00ad\n\17\f\17\16\17\u00b0\13\17\3\20\3\20\3\20"+
"\3\20\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\5\21\u00be\n\21\3\21\3\21"+
-
"\3\21\7\21\u00c3\n\21\f\21\16\21\u00c6\13\21\3\22\3\22\3\22\3\22\3\23"+
-
"\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u00d3\n\23\3\23\3\23\3\23\3\23\3\23"+
-
"\3\23\7\23\u00db\n\23\f\23\16\23\u00de\13\23\3\24\3\24\3\24\5\24\u00e3"+
-
"\n\24\3\24\3\24\3\25\3\25\5\25\u00e9\n\25\3\25\3\25\5\25\u00ed\n\25\3"+
-
"\25\5\25\u00f0\n\25\3\25\3\25\5\25\u00f4\n\25\3\26\3\26\3\27\3\27\5\27"+
-
"\u00fa\n\27\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\2\6\24\34 $\32"+
- "\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36
\"$&(*,.\60\2\7\4\2\25\25\37\37"+
- "\3\2\13\f\5\2\34\34 \"$\3\2\b\t\3\2
\"\2\u010f\2\62\3\2\2\2\4?\3\2\2"+
-
"\2\6C\3\2\2\2\bG\3\2\2\2\nK\3\2\2\2\f\\\3\2\2\2\16^\3\2\2\2\20q\3\2\2"+
-
"\2\22\u0080\3\2\2\2\24\u0082\3\2\2\2\26\u008c\3\2\2\2\30\u008e\3\2\2\2"+
- "\32\u00a1\3\2\2\2\34\u00a6\3\2\2\2\36\u00b1\3\2\2\2
\u00bd\3\2\2\2\"\u00c7"+
-
"\3\2\2\2$\u00d2\3\2\2\2&\u00df\3\2\2\2(\u00f3\3\2\2\2*\u00f5\3\2\2\2,"+
-
"\u00f9\3\2\2\2.\u00fb\3\2\2\2\60\u00fd\3\2\2\2\62\64\5\4\3\2\63\65\5\6"+
-
"\4\2\64\63\3\2\2\2\64\65\3\2\2\2\65\67\3\2\2\2\668\5\b\5\2\67\66\3\2\2"+
-
"\2\678\3\2\2\28:\3\2\2\29;\5\n\6\2:9\3\2\2\2:;\3\2\2\2;<\3\2\2\2<=\5\24"+
-
"\13\2=>\7\2\2\3>\3\3\2\2\2?@\7\3\2\2@A\7\37\2\2AB\7,\2\2B\5\3\2\2\2CD"+
-
"\7\4\2\2DE\7\37\2\2EF\7\'\2\2F\7\3\2\2\2GH\7\5\2\2HI\7\37\2\2IJ\5*\26"+
-
"\2J\t\3\2\2\2KL\7\6\2\2LM\7\37\2\2MN\5\f\7\2N\13\3\2\2\2OP\7\21\2\2PU"+
-
"\5\16\b\2QR\7\32\2\2RT\5\16\b\2SQ\3\2\2\2TW\3\2\2\2US\3\2\2\2UV\3\2\2"+
-
"\2VX\3\2\2\2WU\3\2\2\2XY\7\22\2\2Y]\3\2\2\2Z[\7\21\2\2[]\7\22\2\2\\O\3"+
-
"\2\2\2\\Z\3\2\2\2]\r\3\2\2\2^_\5*\26\2_`\7\33\2\2`a\5\20\t\2a\17\3\2\2"+
-
"\2br\5*\26\2ce\7\34\2\2dc\3\2\2\2de\3\2\2\2ef\3\2\2\2fh\7)\2\2gi\7*\2"+
-
"\2hg\3\2\2\2hi\3\2\2\2ik\3\2\2\2jl\7+\2\2kj\3\2\2\2kl\3\2\2\2lr\3\2\2"+
-
"\2mr\5\f\7\2nr\5\22\n\2or\7\'\2\2pr\7(\2\2qb\3\2\2\2qd\3\2\2\2qm\3\2\2"+
-
"\2qn\3\2\2\2qo\3\2\2\2qp\3\2\2\2r\21\3\2\2\2st\7\27\2\2ty\5\20\t\2uv\7"+
-
"\32\2\2vx\5\20\t\2wu\3\2\2\2x{\3\2\2\2yw\3\2\2\2yz\3\2\2\2z|\3\2\2\2{"+
-
"y\3\2\2\2|}\7\30\2\2}\u0081\3\2\2\2~\177\7\27\2\2\177\u0081\7\30\2\2\u0080"+
-
"s\3\2\2\2\u0080~\3\2\2\2\u0081\23\3\2\2\2\u0082\u0083\b\13\1\2\u0083\u0084"+
-
"\5\30\r\2\u0084\u0089\3\2\2\2\u0085\u0086\f\3\2\2\u0086\u0088\5\30\r\2"+
-
"\u0087\u0085\3\2\2\2\u0088\u008b\3\2\2\2\u0089\u0087\3\2\2\2\u0089\u008a"+
-
"\3\2\2\2\u008a\25\3\2\2\2\u008b\u0089\3\2\2\2\u008c\u008d\t\2\2\2\u008d"+
-
"\27\3\2\2\2\u008e\u0090\7\7\2\2\u008f\u0091\5\36\20\2\u0090\u008f\3\2"+
-
"\2\2\u0090\u0091\3\2\2\2\u0091\u0092\3\2\2\2\u0092\u009b\5\26\f\2\u0093"+
- "\u0094\7\21\2\2\u0094\u0095\5
\21\2\u0095\u0096\7\22\2\2\u0096\u009c\3"+
-
"\2\2\2\u0097\u0098\7#\2\2\u0098\u0099\5\32\16\2\u0099\u009a\7#\2\2\u009a"+
-
"\u009c\3\2\2\2\u009b\u0093\3\2\2\2\u009b\u0097\3\2\2\2\u009c\u009e\3\2"+
-
"\2\2\u009d\u009f\5,\27\2\u009e\u009d\3\2\2\2\u009e\u009f\3\2\2\2\u009f"+
-
"\31\3\2\2\2\u00a0\u00a2\5\34\17\2\u00a1\u00a0\3\2\2\2\u00a1\u00a2\3\2"+
-
"\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a4\7\31\2\2\u00a4\u00a5\7,\2\2\u00a5"+
-
"\33\3\2\2\2\u00a6\u00a7\b\17\1\2\u00a7\u00a8\7,\2\2\u00a8\u00ae\3\2\2"+
-
"\2\u00a9\u00aa\f\3\2\2\u00aa\u00ab\7\35\2\2\u00ab\u00ad\7,\2\2\u00ac\u00a9"+
-
"\3\2\2\2\u00ad\u00b0\3\2\2\2\u00ae\u00ac\3\2\2\2\u00ae\u00af\3\2\2\2\u00af"+
-
"\35\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00b2\7\17\2\2\u00b2\u00b3\7,\2"+
-
"\2\u00b3\u00b4\7\20\2\2\u00b4\37\3\2\2\2\u00b5\u00b6\b\21\1\2\u00b6\u00be"+
- "\5\"\22\2\u00b7\u00b8\7\17\2\2\u00b8\u00b9\5
\21\2\u00b9\u00ba\7\20\2"+
- "\2\u00ba\u00be\3\2\2\2\u00bb\u00bc\7\16\2\2\u00bc\u00be\5
\21\3\u00bd"+
-
"\u00b5\3\2\2\2\u00bd\u00b7\3\2\2\2\u00bd\u00bb\3\2\2\2\u00be\u00c4\3\2"+
- "\2\2\u00bf\u00c0\f\4\2\2\u00c0\u00c1\t\3\2\2\u00c1\u00c3\5
\21\5\u00c2"+
-
"\u00bf\3\2\2\2\u00c3\u00c6\3\2\2\2\u00c4\u00c2\3\2\2\2\u00c4\u00c5\3\2"+
-
"\2\2\u00c5!\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c7\u00c8\5$\23\2\u00c8\u00c9"+
-
"\7\n\2\2\u00c9\u00ca\5$\23\2\u00ca#\3\2\2\2\u00cb\u00cc\b\23\1\2\u00cc"+
-
"\u00d3\5(\25\2\u00cd\u00ce\7\17\2\2\u00ce\u00cf\5$\23\2\u00cf\u00d0\7"+
-
"\20\2\2\u00d0\u00d3\3\2\2\2\u00d1\u00d3\5&\24\2\u00d2\u00cb\3\2\2\2\u00d2"+
-
"\u00cd\3\2\2\2\u00d2\u00d1\3\2\2\2\u00d3\u00dc\3\2\2\2\u00d4\u00d5\f\4"+
-
"\2\2\u00d5\u00d6\t\4\2\2\u00d6\u00db\5$\23\5\u00d7\u00d8\f\6\2\2\u00d8"+
-
"\u00d9\7\32\2\2\u00d9\u00db\5(\25\2\u00da\u00d4\3\2\2\2\u00da\u00d7\3"+
-
"\2\2\2\u00db\u00de\3\2\2\2\u00dc\u00da\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd"+
-
"%\3\2\2\2\u00de\u00dc\3\2\2\2\u00df\u00e0\7,\2\2\u00e0\u00e2\7\17\2\2"+
-
"\u00e1\u00e3\5$\23\2\u00e2\u00e1\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e4"+
-
"\3\2\2\2\u00e4\u00e5\7\20\2\2\u00e5\'\3\2\2\2\u00e6\u00f4\7(\2\2\u00e7"+
-
"\u00e9\7\34\2\2\u00e8\u00e7\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9\u00ea\3"+
-
"\2\2\2\u00ea\u00ec\7)\2\2\u00eb\u00ed\7*\2\2\u00ec\u00eb\3\2\2\2\u00ec"+
-
"\u00ed\3\2\2\2\u00ed\u00ef\3\2\2\2\u00ee\u00f0\7+\2\2\u00ef\u00ee\3\2"+
-
"\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f4\3\2\2\2\u00f1\u00f4\7\'\2\2\u00f2"+
-
"\u00f4\5*\26\2\u00f3\u00e6\3\2\2\2\u00f3\u00e8\3\2\2\2\u00f3\u00f1\3\2"+
-
"\2\2\u00f3\u00f2\3\2\2\2\u00f4)\3\2\2\2\u00f5\u00f6\t\5\2\2\u00f6+\3\2"+
-
"\2\2\u00f7\u00fa\5.\30\2\u00f8\u00fa\5\60\31\2\u00f9\u00f7\3\2\2\2\u00f9"+
-
"\u00f8\3\2\2\2\u00fa-\3\2\2\2\u00fb\u00fc\t\6\2\2\u00fc/\3\2\2\2\u00fd"+
-
"\u00fe\7\27\2\2\u00fe\u00ff\7)\2\2\u00ff\u0100\7\32\2\2\u0100\u0101\7"+
-
")\2\2\u0101\u0102\7\30\2\2\u0102\61\3\2\2\2\36\64\67:U\\dhkqy\u0080\u0089"+
-
"\u0090\u009b\u009e\u00a1\u00ae\u00bd\u00c4\u00d2\u00da\u00dc\u00e2\u00e8"+
- "\u00ec\u00ef\u00f3\u00f9";
+
"\3\21\7\21\u00c3\n\21\f\21\16\21\u00c6\13\21\3\22\3\22\3\22\3\22\3\22"+
+
"\5\22\u00cd\n\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u00d6\n\23\3"+
+
"\23\3\23\3\23\3\23\3\23\3\23\7\23\u00de\n\23\f\23\16\23\u00e1\13\23\3"+
+
"\24\3\24\3\24\5\24\u00e6\n\24\3\24\3\24\3\25\3\25\5\25\u00ec\n\25\3\25"+
+
"\3\25\5\25\u00f0\n\25\3\25\5\25\u00f3\n\25\3\25\3\25\5\25\u00f7\n\25\3"+
+
"\26\3\26\3\27\3\27\5\27\u00fd\n\27\3\30\3\30\3\31\3\31\3\31\3\31\3\31"+
+ "\3\31\3\31\2\6\24\34
$\32\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&"+
+ "(*,.\60\2\7\4\2\25\25\37\37\3\2\13\f\5\2\34\34
\"$\3\2\b\t\3\2 \"\2\u0113"+
+
"\2\62\3\2\2\2\4?\3\2\2\2\6C\3\2\2\2\bG\3\2\2\2\nK\3\2\2\2\f\\\3\2\2\2"+
+
"\16^\3\2\2\2\20q\3\2\2\2\22\u0080\3\2\2\2\24\u0082\3\2\2\2\26\u008c\3"+
+
"\2\2\2\30\u008e\3\2\2\2\32\u00a1\3\2\2\2\34\u00a6\3\2\2\2\36\u00b1\3\2"+
+ "\2\2
\u00bd\3\2\2\2\"\u00cc\3\2\2\2$\u00d5\3\2\2\2&\u00e2\3\2\2\2(\u00f6"+
+
"\3\2\2\2*\u00f8\3\2\2\2,\u00fc\3\2\2\2.\u00fe\3\2\2\2\60\u0100\3\2\2\2"+
+
"\62\64\5\4\3\2\63\65\5\6\4\2\64\63\3\2\2\2\64\65\3\2\2\2\65\67\3\2\2\2"+
+
"\668\5\b\5\2\67\66\3\2\2\2\678\3\2\2\28:\3\2\2\29;\5\n\6\2:9\3\2\2\2:"+
+
";\3\2\2\2;<\3\2\2\2<=\5\24\13\2=>\7\2\2\3>\3\3\2\2\2?@\7\3\2\2@A\7\37"+
+
"\2\2AB\7,\2\2B\5\3\2\2\2CD\7\4\2\2DE\7\37\2\2EF\7\'\2\2F\7\3\2\2\2GH\7"+
+
"\5\2\2HI\7\37\2\2IJ\5*\26\2J\t\3\2\2\2KL\7\6\2\2LM\7\37\2\2MN\5\f\7\2"+
+
"N\13\3\2\2\2OP\7\21\2\2PU\5\16\b\2QR\7\32\2\2RT\5\16\b\2SQ\3\2\2\2TW\3"+
+
"\2\2\2US\3\2\2\2UV\3\2\2\2VX\3\2\2\2WU\3\2\2\2XY\7\22\2\2Y]\3\2\2\2Z["+
+
"\7\21\2\2[]\7\22\2\2\\O\3\2\2\2\\Z\3\2\2\2]\r\3\2\2\2^_\5*\26\2_`\7\33"+
+
"\2\2`a\5\20\t\2a\17\3\2\2\2br\5*\26\2ce\7\34\2\2dc\3\2\2\2de\3\2\2\2e"+
+
"f\3\2\2\2fh\7)\2\2gi\7*\2\2hg\3\2\2\2hi\3\2\2\2ik\3\2\2\2jl\7+\2\2kj\3"+
+
"\2\2\2kl\3\2\2\2lr\3\2\2\2mr\5\f\7\2nr\5\22\n\2or\7\'\2\2pr\7(\2\2qb\3"+
+
"\2\2\2qd\3\2\2\2qm\3\2\2\2qn\3\2\2\2qo\3\2\2\2qp\3\2\2\2r\21\3\2\2\2s"+
+
"t\7\27\2\2ty\5\20\t\2uv\7\32\2\2vx\5\20\t\2wu\3\2\2\2x{\3\2\2\2yw\3\2"+
+
"\2\2yz\3\2\2\2z|\3\2\2\2{y\3\2\2\2|}\7\30\2\2}\u0081\3\2\2\2~\177\7\27"+
+
"\2\2\177\u0081\7\30\2\2\u0080s\3\2\2\2\u0080~\3\2\2\2\u0081\23\3\2\2\2"+
+
"\u0082\u0083\b\13\1\2\u0083\u0084\5\30\r\2\u0084\u0089\3\2\2\2\u0085\u0086"+
+
"\f\3\2\2\u0086\u0088\5\30\r\2\u0087\u0085\3\2\2\2\u0088\u008b\3\2\2\2"+
+
"\u0089\u0087\3\2\2\2\u0089\u008a\3\2\2\2\u008a\25\3\2\2\2\u008b\u0089"+
+
"\3\2\2\2\u008c\u008d\t\2\2\2\u008d\27\3\2\2\2\u008e\u0090\7\7\2\2\u008f"+
+
"\u0091\5\36\20\2\u0090\u008f\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0092\3"+
+ "\2\2\2\u0092\u009b\5\26\f\2\u0093\u0094\7\21\2\2\u0094\u0095\5
\21\2\u0095"+
+
"\u0096\7\22\2\2\u0096\u009c\3\2\2\2\u0097\u0098\7#\2\2\u0098\u0099\5\32"+
+
"\16\2\u0099\u009a\7#\2\2\u009a\u009c\3\2\2\2\u009b\u0093\3\2\2\2\u009b"+
+
"\u0097\3\2\2\2\u009c\u009e\3\2\2\2\u009d\u009f\5,\27\2\u009e\u009d\3\2"+
+
"\2\2\u009e\u009f\3\2\2\2\u009f\31\3\2\2\2\u00a0\u00a2\5\34\17\2\u00a1"+
+
"\u00a0\3\2\2\2\u00a1\u00a2\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00a4\7\31"+
+
"\2\2\u00a4\u00a5\7,\2\2\u00a5\33\3\2\2\2\u00a6\u00a7\b\17\1\2\u00a7\u00a8"+
+
"\7,\2\2\u00a8\u00ae\3\2\2\2\u00a9\u00aa\f\3\2\2\u00aa\u00ab\7\35\2\2\u00ab"+
+
"\u00ad\7,\2\2\u00ac\u00a9\3\2\2\2\u00ad\u00b0\3\2\2\2\u00ae\u00ac\3\2"+
+
"\2\2\u00ae\u00af\3\2\2\2\u00af\35\3\2\2\2\u00b0\u00ae\3\2\2\2\u00b1\u00b2"+
+
"\7\17\2\2\u00b2\u00b3\7,\2\2\u00b3\u00b4\7\20\2\2\u00b4\37\3\2\2\2\u00b5"+
+
"\u00b6\b\21\1\2\u00b6\u00be\5\"\22\2\u00b7\u00b8\7\17\2\2\u00b8\u00b9"+
+ "\5
\21\2\u00b9\u00ba\7\20\2\2\u00ba\u00be\3\2\2\2\u00bb\u00bc\7\16\2\2"+
+ "\u00bc\u00be\5
\21\3\u00bd\u00b5\3\2\2\2\u00bd\u00b7\3\2\2\2\u00bd\u00bb"+
+
"\3\2\2\2\u00be\u00c4\3\2\2\2\u00bf\u00c0\f\4\2\2\u00c0\u00c1\t\3\2\2\u00c1"+
+ "\u00c3\5
\21\5\u00c2\u00bf\3\2\2\2\u00c3\u00c6\3\2\2\2\u00c4\u00c2\3\2"+
+
"\2\2\u00c4\u00c5\3\2\2\2\u00c5!\3\2\2\2\u00c6\u00c4\3\2\2\2\u00c7\u00c8"+
+
"\5$\23\2\u00c8\u00c9\7\n\2\2\u00c9\u00ca\5$\23\2\u00ca\u00cd\3\2\2\2\u00cb"+
+
"\u00cd\5$\23\2\u00cc\u00c7\3\2\2\2\u00cc\u00cb\3\2\2\2\u00cd#\3\2\2\2"+
+
"\u00ce\u00cf\b\23\1\2\u00cf\u00d6\5(\25\2\u00d0\u00d1\7\17\2\2\u00d1\u00d2"+
+
"\5$\23\2\u00d2\u00d3\7\20\2\2\u00d3\u00d6\3\2\2\2\u00d4\u00d6\5&\24\2"+
+
"\u00d5\u00ce\3\2\2\2\u00d5\u00d0\3\2\2\2\u00d5\u00d4\3\2\2\2\u00d6\u00df"+
+
"\3\2\2\2\u00d7\u00d8\f\4\2\2\u00d8\u00d9\t\4\2\2\u00d9\u00de\5$\23\5\u00da"+
+
"\u00db\f\6\2\2\u00db\u00dc\7\32\2\2\u00dc\u00de\5(\25\2\u00dd\u00d7\3"+
+
"\2\2\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,\2\2\u00e3"+
+
"\u00e5\7\17\2\2\u00e4\u00e6\5$\23\2\u00e5\u00e4\3\2\2\2\u00e5\u00e6\3"+
+
"\2\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00e8\7\20\2\2\u00e8\'\3\2\2\2\u00e9"+
+
"\u00f7\7(\2\2\u00ea\u00ec\7\34\2\2\u00eb\u00ea\3\2\2\2\u00eb\u00ec\3\2"+
+
"\2\2\u00ec\u00ed\3\2\2\2\u00ed\u00ef\7)\2\2\u00ee\u00f0\7*\2\2\u00ef\u00ee"+
+
"\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f2\3\2\2\2\u00f1\u00f3\7+\2\2\u00f2"+
+
"\u00f1\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3\u00f7\3\2\2\2\u00f4\u00f7\7\'"+
+
"\2\2\u00f5\u00f7\5*\26\2\u00f6\u00e9\3\2\2\2\u00f6\u00eb\3\2\2\2\u00f6"+
+
"\u00f4\3\2\2\2\u00f6\u00f5\3\2\2\2\u00f7)\3\2\2\2\u00f8\u00f9\t\5\2\2"+
+
"\u00f9+\3\2\2\2\u00fa\u00fd\5.\30\2\u00fb\u00fd\5\60\31\2\u00fc\u00fa"+
+
"\3\2\2\2\u00fc\u00fb\3\2\2\2\u00fd-\3\2\2\2\u00fe\u00ff\t\6\2\2\u00ff"+
+
"/\3\2\2\2\u0100\u0101\7\27\2\2\u0101\u0102\7)\2\2\u0102\u0103\7\32\2\2"+
+
"\u0103\u0104\7)\2\2\u0104\u0105\7\30\2\2\u0105\61\3\2\2\2\37\64\67:U\\"+
+
"dhkqy\u0080\u0089\u0090\u009b\u009e\u00a1\u00ae\u00bd\u00c4\u00cc\u00d5"+
+ "\u00dd\u00df\u00e5\u00eb\u00ef\u00f2\u00f6\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/ver2/NCIntentDslCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
index e25c33f..b70d4cb 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
@@ -20,6 +20,7 @@ package org.apache.nlpcraft.model.intent.impl.ver2
import com.typesafe.scalalogging.LazyLogging
import org.antlr.v4.runtime._
import org.antlr.v4.runtime.tree.ParseTreeWalker
+import org.apache.commons.lang3.StringUtils
import org.apache.nlpcraft.common._
import org.apache.nlpcraft.model.NCToken
import org.apache.nlpcraft.model.intent.impl.antlr4._
@@ -28,6 +29,8 @@ import org.apache.nlpcraft.model.intent.utils.ver2._
import scala.collection.immutable.HashMap
import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer
+import java.lang.{Double ⇒ JDouble, IllegalArgumentException ⇒ IAE, Long ⇒
JLong}
+import java.util.{List ⇒ JList, Map ⇒ JMap}
object NCIntentDslCompiler extends LazyLogging {
// Compiler cache.
@@ -60,6 +63,15 @@ object NCIntentDslCompiler extends LazyLogging {
// Term's code, i.e. list of instructions.
private var termCode = mutable.Buffer.empty[Instr]
+ private def isJLong(v: AnyRef): Boolean = v.isInstanceOf[JLong]
+ private def isJDouble(v: AnyRef): Boolean = v.isInstanceOf[JDouble]
+ private def isString(v: AnyRef): Boolean = v.isInstanceOf[String]
+ private def asJLong(v: AnyRef): JLong = v.asInstanceOf[JLong]
+ private def asJDouble(v: AnyRef): JDouble = v.asInstanceOf[JDouble]
+ private def asString(v: AnyRef): String = v.asInstanceOf[String]
+ private def asJList(v: AnyRef): JList[_] = v.asInstanceOf[JList[_]]
+ private def isJList(v: AnyRef): Boolean = v.isInstanceOf[JList[_]]
+
/**
*
* @param min
@@ -91,10 +103,17 @@ object NCIntentDslCompiler extends LazyLogging {
val NCDslTermRetVal(lastVal, usedTok) = stack.pop()
- val newVal = lastVal match {
- case list: List[_] ⇒ mkVal(ctx.`val`().getText) :: list
- case _ ⇒ List(lastVal)
- }
+ // Only use Java collections.
+ val newVal: AnyRef =
+ if (lastVal.isInstanceOf[JList[Object]]) {
+ val x = lastVal.asInstanceOf[JList[Object]]
+
+ x.add(mkVal(ctx.`val`().getText))
+
+ x
+ }
+ else
+ java.util.Collections.singletonList(lastVal)
stack.push(NCDslTermRetVal(newVal, usedTok))
})
@@ -104,85 +123,80 @@ object NCIntentDslCompiler extends LazyLogging {
require(stack.size >= 2)
// Stack pop in reverse order of push...
- val NCDslTermRetVal(val2, usedTok2) = stack.pop()
- val NCDslTermRetVal(val1, usedTok1) = stack.pop()
-
- def push(any: Any): Unit = stack.push(NCDslTermRetVal(any,
usedTok1 || usedTok2))
- def isLong(v: Any): Boolean =
v.isInstanceOf[java.lang.Long]
- def isDouble(v: Any): Boolean =
v.isInstanceOf[java.lang.Double]
- def isString(v: Any): Boolean = v.isInstanceOf[String]
- def asLong(v: Any): java.lang.Long =
v.asInstanceOf[java.lang.Long]
- def asDouble(v: Any): java.lang.Double =
v.asInstanceOf[java.lang.Double]
- def asString(v: Any): String = v.asInstanceOf[String]
- def asList(v: Any): List[_] = v.asInstanceOf[List[_]]
- def isList(v: Any): Boolean = v.isInstanceOf[List[_]]
+ val NCDslTermRetVal(val2, f1) = stack.pop()
+ val NCDslTermRetVal(val1, f2) = stack.pop()
+
+ val usedTok = f1 || f2
- def error(op: String): Unit =
- throw new IllegalArgumentException(s"Unexpected '$op'
operation for values: $val1, $val2")
+ def push(any: AnyRef): Unit =
stack.push(NCDslTermRetVal(any, usedTok))
+ def pushLong(any: Long): Unit =
stack.push(NCDslTermRetVal(Long.box(any), usedTok))
+ def pushDouble(any: Double): Unit =
stack.push(NCDslTermRetVal(Double.box(any), usedTok))
+
+ def error(op: String): Unit = throw new IAE(s"Unexpected
'$op' operation for values: $val1, $val2")
if (ctx.PLUS() != null) { // '+'.
- if (isList(val1) && isList(val2))
- push(asList(val1) ::: asList(val2))
- else if (isList(val1))
- push(val2 :: asList(val1))
- else if (isList(val2))
- push(val1 :: asList(val2))
+ if (isJList(val1) && isJList(val2))
+ push(asJList(val1) ::: asJList(val2))
+ else if (isJList(val1))
+ push(val2 :: asJList(val1))
+ else if (isJList(val2))
+ push(val1 :: asJList(val2))
else if (isString(val1) && isString(val2))
push(asString(val1) + asString(val2))
- else if (isLong(val1) && isLong(val2))
- push(asLong(val1).longValue() +
asLong(val2).longValue())
- else if (isLong(val1) && isDouble(val2))
- push(asLong(val1).longValue() +
asDouble(val2).doubleValue())
- else if (isDouble(val1) && isLong(val2))
- push(asDouble(val1).doubleValue() +
asLong(val2).longValue())
- else if (isDouble(val1) && isDouble(val2))
- push(asDouble(val1).doubleValue() +
asDouble(val2).doubleValue())
+ else if (isJLong(val1) && isJLong(val2))
+ pushLong(asJLong(val1).longValue() +
asJLong(val2).longValue())
+ else if (isJLong(val1) && isJDouble(val2))
+ pushDouble(asJLong(val1).longValue() +
asJDouble(val2).doubleValue())
+ else if (isJDouble(val1) && isJLong(val2))
+ pushDouble(asJDouble(val1).doubleValue() +
asJLong(val2).longValue())
+ else if (isJDouble(val1) && isJDouble(val2))
+ pushDouble(asJDouble(val1).doubleValue() +
asJDouble(val2).doubleValue())
else
error("+")
}
else if (ctx.MINUS() != null) { // '-'.
- if (isList(val1) && isList(val2))
-
push(asList(val1).filterNot(asInstanceOf[List[_]].toSet))
- else if (isList(val1))
- push(asList(val1).filter(_ != val1))
- else if (isLong(val1) && isLong(val2))
- push(asLong(val1).longValue() -
asLong(val2).longValue())
- else if (isLong(val1) && isDouble(val2))
- push(asLong(val1).longValue() -
asDouble(val2).doubleValue())
- else if (isDouble(val1) && isLong(val2))
- push(asDouble(val1).doubleValue() -
asLong(val2).longValue())
- else if (isDouble(val1) && isDouble(val2))
- push(asDouble(val1).doubleValue() -
asDouble(val2).doubleValue())
+ if (isJList(val1) && isJList(val2))
+
push(asJList(val1).filterNot(asInstanceOf[List[_]].toSet))
+ else if (isJList(val1))
+ push(asJList(val1).filter(_ != val1))
+ else if (isJLong(val1) && isJLong(val2))
+ pushLong(asJLong(val1).longValue() -
asJLong(val2).longValue())
+ else if (isJLong(val1) && isJDouble(val2))
+ pushDouble(asJLong(val1).longValue() -
asJDouble(val2).doubleValue())
+ else if (isJDouble(val1) && isJLong(val2))
+ pushDouble(asJDouble(val1).doubleValue() -
asJLong(val2).longValue())
+ else if (isJDouble(val1) && isJDouble(val2))
+ pushDouble(asJDouble(val1).doubleValue() -
asJDouble(val2).doubleValue())
else
error("-")
}
else if (ctx.STAR() != null) { // '*'.
- if (isLong(val1) && isLong(val2))
- push(asLong(val1).longValue() *
asLong(val2).longValue())
- else if (isLong(val1) && isDouble(val2))
- push(asLong(val1).longValue() *
asDouble(val2).doubleValue())
- else if (isDouble(val1) && isLong(val2))
- push(asDouble(val1).doubleValue() *
asLong(val2).longValue())
- else if (isDouble(val1) && isDouble(val2))
- push(asDouble(val1).doubleValue() *
asDouble(val2).doubleValue())
+ if (isJLong(val1) && isJLong(val2))
+ pushLong(asJLong(val1).longValue() *
asJLong(val2).longValue())
+ else if (isJLong(val1) && isJDouble(val2))
+ pushDouble(asJLong(val1).longValue() *
asJDouble(val2).doubleValue())
+ else if (isJDouble(val1) && isJLong(val2))
+ pushDouble(asJDouble(val1).doubleValue() *
asJLong(val2).longValue())
+ else if (isJDouble(val1) && isJDouble(val2))
+ pushDouble(asJDouble(val1).doubleValue() *
asJDouble(val2).doubleValue())
else
error("*")
}
else if (ctx.FSLASH() != null) { // '/'.
- if (isLong(val1) && isLong(val2))
- push(asLong(val1).longValue() /
asLong(val2).longValue())
- else if (isLong(val1) && isDouble(val2))
- push(asLong(val1).longValue() /
asDouble(val2).doubleValue())
- else if (isDouble(val1) && isLong(val2))
- push(asDouble(val1).doubleValue() /
asLong(val2).longValue())
- else if (isDouble(val1) && isDouble(val2))
- push(asDouble(val1).doubleValue() /
asDouble(val2).doubleValue())
+ if (isJLong(val1) && isJLong(val2))
+ pushLong(asJLong(val1).longValue() /
asJLong(val2).longValue())
+ else if (isJLong(val1) && isJDouble(val2))
+ pushDouble(asJLong(val1).longValue() /
asJDouble(val2).doubleValue())
+ else if (isJDouble(val1) && isJLong(val2))
+ pushDouble(asJDouble(val1).doubleValue() /
asJLong(val2).longValue())
+ else if (isJDouble(val1) && isJDouble(val2))
+ pushDouble(asJDouble(val1).doubleValue() /
asJDouble(val2).doubleValue())
else
error("/")
}
else if (ctx.PERCENT() != null) { // '%'.
- if (isLong(val1) && isLong(val2))
- push(asLong(val1).longValue() %
asLong(val2).longValue())
+ if (isJLong(val1) && isJLong(val2))
+ pushLong(asJLong(val1).longValue() %
asJLong(val2).longValue())
else
error("%")
}
@@ -192,6 +206,143 @@ object NCIntentDslCompiler extends LazyLogging {
}
}
+ override def exitTermPred(ctx: NCIntentDslParser.TermPredContext):
Unit = {
+
+
+ }
+
+ override def exitFunCall(ctx: NCIntentDslParser.FunCallContext): Unit
= {
+ val fun = ctx.ID().getText
+
+ termCode += ((tok: NCToken, stack: StackType, ctx:
NCDslTermContext) ⇒ {
+ val NCDslTermRetVal(param, usedTok) = if (stack.nonEmpty)
stack.pop else (null, false)
+
+ def push(any: AnyRef, f: Boolean): Unit =
stack.push(NCDslTermRetVal(any, f))
+ def pushLong(any: Long, f: Boolean): Unit =
stack.push(NCDslTermRetVal(Long.box(any), f))
+ def pushDouble(any: Double, f: Boolean): Unit =
stack.push(NCDslTermRetVal(Double.box(any), f))
+ def pushBoolean(any: Boolean, f: Boolean): Unit =
stack.push(NCDslTermRetVal(Boolean.box(any), f))
+
+ def unknownFun(): Unit = throw new IAE(s"Unknown built-in
function: $fun")
+ def errParamNum(): Unit = throw new IAE(s"Invalid number of
parameters for built-in function: $fun")
+ def errParamType(): Unit = throw new IAE(s"Invalid parameter
type for built-in function: $fun")
+
+ def check1String(): Unit = if (param == null) errParamNum()
else if (!isString(param)) errParamType()
+ def check1Long(): Unit = if (param == null) errParamNum() else
if (!isJLong(param)) errParamType()
+ def check1Double(): Unit = if (param == null) errParamNum()
else if (!isJDouble(param)) errParamType()
+
+ def doTrim(): String = { check1String();
asString(param).strip() }
+ def doUppercase(): String = { check1String();
asString(param).toUpperCase() }
+ def doLowercase(): String = { check1String();
asString(param).toLowerCase() }
+ def doIsAlpha(): Boolean = { check1String();
StringUtils.isAlpha(asString(param)) }
+ def doIsNum(): Boolean = { check1String();
StringUtils.isNumeric(asString(param)) }
+ def doIsAlphaNum(): Boolean = { check1String();
StringUtils.isAlphanumeric(asString(param)) }
+ def doIsWhitespace(): Boolean = { check1String();
StringUtils.isWhitespace(asString(param)) }
+ def doIsAlphaSpace(): Boolean = { check1String();
StringUtils.isAlphaSpace(asString(param)) }
+ def doIsAlphaNumSpace(): Boolean = { check1String();
StringUtils.isAlphanumericSpace(asString(param)) }
+ def doIsNumSpace(): Boolean = { check1String();
StringUtils.isNumericSpace(asString(param)) }
+
+ fun match {
+ // Metadata access.
+ case "meta" ⇒
+
+ // Converts JSON to map.
+ case "json" ⇒
+
+ // Inline if-statement.
+ case "if" ⇒
+
+ // Token functions.
+ case "id" ⇒ push(tok.getId, true)
+ case "ancestors" ⇒ push(tok.getAncestors, true)
+ case "parent" ⇒ push(tok.getParentId, true)
+ case "groups" ⇒ push(tok.getGroups, true)
+ case "value" ⇒ push(tok.getValue, true)
+ case "aliases" ⇒ push(tok.getAliases, true)
+ case "start_idx" ⇒ pushLong(tok.getStartCharIndex, true)
+ case "end_idx" ⇒ pushLong(tok.getEndCharIndex, true)
+
+ // String functions.
+ case "trim" ⇒ push(doTrim(), usedTok)
+ case "strip" ⇒ push(doTrim(), usedTok)
+ case "uppercase" ⇒ push(doUppercase(), usedTok)
+ case "lowercase" ⇒ push(doLowercase(), usedTok)
+ case "is_alpha" ⇒ pushBoolean(doIsAlpha(), usedTok)
+ case "is_alphanum" ⇒ pushBoolean(doIsAlphaNum(), usedTok)
+ case "is_whitespace" ⇒ pushBoolean(doIsWhitespace(),
usedTok)
+ case "is_numeric" ⇒ pushBoolean(doIsNum(), usedTok)
+ case "is_numeric_space" ⇒ pushBoolean(doIsNumSpace(),
usedTok)
+ case "is_alpha_space" ⇒ pushBoolean(doIsAlphaSpace(),
usedTok)
+ case "is_alphanum_space" ⇒
pushBoolean(doIsAlphaNumSpace(), usedTok)
+ case "substring" ⇒
+ case "index" ⇒
+ case "soundex" ⇒
+ case "split" ⇒
+ case "replace" ⇒
+
+ // Math functions.
+ case "abs" ⇒
+ case "ceil" ⇒
+ case "floor" ⇒
+ case "rint" ⇒
+ case "round" ⇒
+ case "signum" ⇒
+ case "sqrt" ⇒
+ case "pi" ⇒
+ case "acos" ⇒
+ case "asin" ⇒
+ case "atan" ⇒
+ case "atn2" ⇒
+ case "cos" ⇒
+ case "cot" ⇒
+ case "degrees" ⇒
+ case "exp" ⇒
+ case "log" ⇒
+ case "log10" ⇒
+ case "power" ⇒
+ case "radians" ⇒
+ case "rand" ⇒
+ case "sin" ⇒
+ case "square" ⇒
+ case "tan" ⇒
+
+ // Collection, statistical (incl. string) functions.
+ case "avg" ⇒
+ case "max" ⇒
+ case "min" ⇒
+ case "stdev" ⇒
+ case "sum" ⇒
+ case "get" ⇒
+ case "index" ⇒
+ case "contains" ⇒
+ case "first" ⇒
+ case "last" ⇒
+ case "keys" ⇒
+ case "values" ⇒
+ case "length" ⇒
+ case "count" ⇒
+ case "size" ⇒
+ case "reverse" ⇒
+ case "is_empty" ⇒
+ case "non_empty" ⇒
+ case "to_string" ⇒
+
+ // Date-time functions.
+ case "year" ⇒
+ case "month" ⇒
+ case "day" ⇒
+ case "hour" ⇒
+ case "min" ⇒
+ case "sec" ⇒
+ case "week" ⇒
+ case "quarter" ⇒
+ case "msec" ⇒
+ case "now" ⇒
+
+ case _ ⇒ unknownFun()
+ }
+ })
+ }
+
override def exitClsNer(ctx: NCIntentDslParser.ClsNerContext): Unit = {
if (ctx.javaFqn() != null)
termClsName = ctx.javaFqn().getText.strip()
@@ -238,21 +389,21 @@ object NCIntentDslCompiler extends LazyLogging {
* @param s
* @return
*/
- private def mkVal(s: String): Any = {
+ private def mkVal(s: String): Object = {
if (s == "null") null // Try 'null'.
- else if (s == "true") true // Try 'boolean'.
- else if (s == "false") false // Try 'boolean'.
+ else if (s == "true") Boolean.box(true) // Try 'boolean'.
+ else if (s == "false") Boolean.box(false) // Try 'boolean'.
// Only numeric or string values below...
else {
// Strip '_' from numeric values.
val num = s.replaceAll("_", "")
try
- java.lang.Long.parseLong(num) // Try 'long'.
+ Long.box(JLong.parseLong(num)) // Try 'long'.
catch {
case _: NumberFormatException ⇒
try
- java.lang.Double.parseDouble(num) // Try 'double'.
+ Double.box(JDouble.parseDouble(num)) // Try
'double'.
catch {
case _: NumberFormatException ⇒ s // String by
default (incl. quotes).
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslTermRetVal.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslTermRetVal.scala
index f9563a4..1030416 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslTermRetVal.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/utils/ver2/NCDslTermRetVal.scala
@@ -21,6 +21,6 @@ package org.apache.nlpcraft.model.intent.utils.ver2
*
*/
case class NCDslTermRetVal (
- retVal: Any,
+ retVal: AnyRef,
usedTok: Boolean
)