This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-247
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-247 by this push:
new c69ea71 WIP.
c69ea71 is described below
commit c69ea7113a1224654d28bcdf40e2566980895d4f
Author: Aaron Radzinski <[email protected]>
AuthorDate: Mon Feb 22 16:49:16 2021 -0800
WIP.
---
.../nlpcraft/common/makro/NCMacroCompiler.scala | 88 ++++---
.../nlpcraft/common/makro/antlr4/NCMacroDsl.g4 | 5 +-
.../nlpcraft/common/makro/antlr4/NCMacroDsl.interp | 5 +-
.../makro/antlr4/NCMacroDslBaseListener.java | 18 +-
.../common/makro/antlr4/NCMacroDslLexer.java | 2 +-
.../common/makro/antlr4/NCMacroDslListener.java | 20 +-
.../common/makro/antlr4/NCMacroDslParser.java | 260 +++++++++++----------
.../common/makro/NCMacroCompilerSpec.scala | 6 +-
8 files changed, 232 insertions(+), 172 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
index 5bdc38d..16a43a6 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
@@ -33,13 +33,13 @@ object NCMacroCompiler extends LazyLogging {
/**
*
* @param buffer
- * @param inGroup
+ * @param isGroup
*/
case class StackItem (
var buffer: mutable.Buffer[String],
- inGroup: Boolean
+ isGroup: Boolean
)
-
+
/**
*
* @param parser
@@ -50,9 +50,21 @@ object NCMacroCompiler extends LazyLogging {
// Current min/max quantifier.
private var min = 1
private var max = 1
-
+
private var expandedSyns: Set[String] = _
-
+
+ /**
+ *
+ * @param optS
+ * @param s
+ * @return
+ */
+ private def add(optS: String, s: String): String =
+ if (optS.isEmpty)
+ s
+ else
+ optS + " " + s
+
/**
*
* @param errMsg
@@ -61,38 +73,42 @@ object NCMacroCompiler extends LazyLogging {
*/
def error(errMsg: String)(implicit ctx: ParserRuleContext):
RecognitionException =
new RecognitionException(errMsg, parser, parser.getInputStream,
ctx)
-
- override def enterMakro(ctx: NCMacroDslParser.MakroContext): Unit = {
+
+ override def enterExpr(ctx: NCMacroDslParser.ExprContext): Unit = {
val buf = mutable.Buffer.empty[String]
-
+
buf += ""
-
+
stack.push(StackItem(buf, false))
}
-
+
override def enterGroup(ctx: P.GroupContext): Unit =
stack.push(StackItem(mutable.Buffer.empty[String], true))
-
- private def add(optS: String, s: String): String =
- if (optS.isEmpty)
- s
- else
- optS + " " + s
-
+
+ override def exitExpr(ctx: NCMacroDslParser.ExprContext): Unit = {
+ if (stack.size > 1) {
+ val expr = stack.pop()
+
+ require(expr.buffer.nonEmpty)
+
+ val prn = stack.top
+
+ if (prn.isGroup)
+ prn.buffer ++= expr.buffer
+ else
+ prn.buffer = for (z ← expr.buffer; i ← prn.buffer.indices)
yield add(prn.buffer(i), z)
+ }
+ }
+
override def exitGroup(ctx: NCMacroDslParser.GroupContext): Unit = {
- val top = stack.pop()
-
- require(top.inGroup)
+ val grp = stack.pop()
+
+ require(grp.isGroup)
- val arg = stack.top
-
- arg.buffer = arg.buffer.flatMap { s ⇒
- (
- for (z ← top.buffer) yield
- for (i ← min to max) yield
- add(s, (s"$z " * i)).trim
- )
- .flatten.toSet
+ val prn = stack.top
+
+ prn.buffer = prn.buffer.flatMap {
+ s ⇒ (for (z ← grp.buffer; i ← min to max) yield add(s, s"$z "
* i).trim).toSet
}
// Reset min max.
@@ -102,21 +118,17 @@ object NCMacroCompiler extends LazyLogging {
override def exitSyn(ctx: P.SynContext): Unit = {
val syn = if (ctx.TXT() != null) ctx.TXT().getText else
ctx.INT().getText
- val top = stack.top
- val buf = top.buffer
+ val buf = stack.top.buffer
- if (top.inGroup)
+ if (buf.isEmpty)
buf += syn
- else {
- if (buf.isEmpty)
- buf += syn
- else
- for (i ← buf.indices) buf.update(i, add(buf(i), syn))
- }
+ else
+ for (i ← buf.indices) buf.update(i, add(buf(i), syn))
}
override def exitList(ctx: P.ListContext): Unit =
if (ctx.UNDERSCORE() != null) stack.top.buffer += ""
+
override def exitMakro(ctx: P.MakroContext): Unit =
expandedSyns = stack.pop().buffer.map(_.trim).toSet
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
index b230d43..a959aef 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
@@ -19,9 +19,10 @@ grammar NCMacroDsl;
makro: expr;
expr
- : (syn | group)
- | expr (syn | group)
+ : item
+ | expr item
;
+item: syn | group;
syn : (TXT | INT); // NOTE: since TXT and INT overlap - we catch them both
here and resolve in compiler.
group: LCURLY list RCURLY minMax?;
minMax: LBR INT COMMA INT RBR;
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.interp
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.interp
index fe4c49c..16ca7b6 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.interp
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.interp
@@ -28,7 +28,8 @@ ErrorCharacter
rule names:
makro
-line
+expr
+item
syn
group
minMax
@@ -36,4 +37,4 @@ list
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 13, 60, 4, 2,
9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 3, 2, 3, 2,
3, 3, 3, 3, 3, 3, 5, 3, 20, 10, 3, 3, 3, 3, 3, 3, 3, 5, 3, 25, 10, 3, 7, 3, 27,
10, 3, 12, 3, 14, 3, 30, 11, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 38,
10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7,
3, 7, 5, 7, 53, 10, 7, 7, 7, 55, 10, 7, 12, 7, 14, 7, 58, 11, 7, 3, 7, 2, 4, 4,
12, 8, 2, 4, 6, 8, 1 [...]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 13, 61, 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,
3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 24, 10, 3, 12, 3, 14, 3, 27,
11, 3, 3, 4, 3, 4, 5, 4, 31, 10, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6,
39, 10, 6, 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, 5, 8, 54, 10, 8, 7, 8, 56, 10, 8, 12, 8, 14, 8, 59, 11, 8, 3, 8, 2, 4,
4, 14, 9, 2, 4, 6, 8, [...]
\ No newline at end of file
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslBaseListener.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslBaseListener.java
index bfbd231..66acd0f 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslBaseListener.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslBaseListener.java
@@ -1,4 +1,4 @@
-// Generated from
/Users/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
by ANTLR 4.9.1
+// Generated from C:/Users/Nikita
Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4\NCMacroDsl.g4
by ANTLR 4.9.1
package org.apache.nlpcraft.common.makro.antlr4;
import org.antlr.v4.runtime.ParserRuleContext;
@@ -28,13 +28,25 @@ public class NCMacroDslBaseListener implements
NCMacroDslListener {
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void enterLine(NCMacroDslParser.LineContext ctx) { }
+ @Override public void enterExpr(NCMacroDslParser.ExprContext ctx) { }
/**
* {@inheritDoc}
*
* <p>The default implementation does nothing.</p>
*/
- @Override public void exitLine(NCMacroDslParser.LineContext ctx) { }
+ @Override public void exitExpr(NCMacroDslParser.ExprContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void enterItem(NCMacroDslParser.ItemContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * <p>The default implementation does nothing.</p>
+ */
+ @Override public void exitItem(NCMacroDslParser.ItemContext ctx) { }
/**
* {@inheritDoc}
*
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.java
index 56b3382..1a45648 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.java
@@ -1,4 +1,4 @@
-// Generated from
/Users/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
by ANTLR 4.9.1
+// Generated from C:/Users/Nikita
Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4\NCMacroDsl.g4
by ANTLR 4.9.1
package org.apache.nlpcraft.common.makro.antlr4;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslListener.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslListener.java
index 1621ba0..c7de456 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslListener.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslListener.java
@@ -1,4 +1,4 @@
-// Generated from
/Users/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
by ANTLR 4.9.1
+// Generated from C:/Users/Nikita
Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4\NCMacroDsl.g4
by ANTLR 4.9.1
package org.apache.nlpcraft.common.makro.antlr4;
import org.antlr.v4.runtime.tree.ParseTreeListener;
@@ -18,15 +18,25 @@ public interface NCMacroDslListener extends
ParseTreeListener {
*/
void exitMakro(NCMacroDslParser.MakroContext ctx);
/**
- * Enter a parse tree produced by {@link NCMacroDslParser#line}.
+ * Enter a parse tree produced by {@link NCMacroDslParser#expr}.
* @param ctx the parse tree
*/
- void enterLine(NCMacroDslParser.LineContext ctx);
+ void enterExpr(NCMacroDslParser.ExprContext ctx);
/**
- * Exit a parse tree produced by {@link NCMacroDslParser#line}.
+ * Exit a parse tree produced by {@link NCMacroDslParser#expr}.
* @param ctx the parse tree
*/
- void exitLine(NCMacroDslParser.LineContext ctx);
+ void exitExpr(NCMacroDslParser.ExprContext ctx);
+ /**
+ * Enter a parse tree produced by {@link NCMacroDslParser#item}.
+ * @param ctx the parse tree
+ */
+ void enterItem(NCMacroDslParser.ItemContext ctx);
+ /**
+ * Exit a parse tree produced by {@link NCMacroDslParser#item}.
+ * @param ctx the parse tree
+ */
+ void exitItem(NCMacroDslParser.ItemContext ctx);
/**
* Enter a parse tree produced by {@link NCMacroDslParser#syn}.
* @param ctx the parse tree
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslParser.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslParser.java
index 0f42537..13b43ab 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslParser.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslParser.java
@@ -1,4 +1,4 @@
-// Generated from
/Users/nivanov/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.g4
by ANTLR 4.9.1
+// Generated from C:/Users/Nikita
Ivanov/Documents/GitHub/incubator-nlpcraft/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4\NCMacroDsl.g4
by ANTLR 4.9.1
package org.apache.nlpcraft.common.makro.antlr4;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
@@ -20,11 +20,11 @@ public class NCMacroDslParser extends Parser {
LCURLY=1, RCURLY=2, LBR=3, RBR=4, VERT=5, COMMA=6,
UNDERSCORE=7, INT=8,
TXT=9, WS=10, ErrorCharacter=11;
public static final int
- RULE_makro = 0, RULE_line = 1, RULE_syn = 2, RULE_group = 3,
RULE_minMax = 4,
- RULE_list = 5;
+ RULE_makro = 0, RULE_expr = 1, RULE_item = 2, RULE_syn = 3,
RULE_group = 4,
+ RULE_minMax = 5, RULE_list = 6;
private static String[] makeRuleNames() {
return new String[] {
- "makro", "line", "syn", "group", "minMax", "list"
+ "makro", "expr", "item", "syn", "group", "minMax",
"list"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -93,8 +93,8 @@ public class NCMacroDslParser extends Parser {
}
public static class MakroContext extends ParserRuleContext {
- public LineContext line() {
- return getRuleContext(LineContext.class,0);
+ public ExprContext expr() {
+ return getRuleContext(ExprContext.class,0);
}
public MakroContext(ParserRuleContext parent, int
invokingState) {
super(parent, invokingState);
@@ -116,8 +116,8 @@ public class NCMacroDslParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(12);
- line(0);
+ setState(14);
+ expr(0);
}
}
catch (RecognitionException re) {
@@ -131,105 +131,68 @@ public class NCMacroDslParser extends Parser {
return _localctx;
}
- public static class LineContext extends ParserRuleContext {
- public SynContext syn() {
- return getRuleContext(SynContext.class,0);
+ public static class ExprContext extends ParserRuleContext {
+ public ItemContext item() {
+ return getRuleContext(ItemContext.class,0);
}
- public GroupContext group() {
- return getRuleContext(GroupContext.class,0);
+ public ExprContext expr() {
+ return getRuleContext(ExprContext.class,0);
}
- public LineContext line() {
- return getRuleContext(LineContext.class,0);
- }
- public LineContext(ParserRuleContext parent, int invokingState)
{
+ public ExprContext(ParserRuleContext parent, int invokingState)
{
super(parent, invokingState);
}
- @Override public int getRuleIndex() { return RULE_line; }
+ @Override public int getRuleIndex() { return RULE_expr; }
@Override
public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof NCMacroDslListener )
((NCMacroDslListener)listener).enterLine(this);
+ if ( listener instanceof NCMacroDslListener )
((NCMacroDslListener)listener).enterExpr(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof NCMacroDslListener )
((NCMacroDslListener)listener).exitLine(this);
+ if ( listener instanceof NCMacroDslListener )
((NCMacroDslListener)listener).exitExpr(this);
}
}
- public final LineContext line() throws RecognitionException {
- return line(0);
+ public final ExprContext expr() throws RecognitionException {
+ return expr(0);
}
- private LineContext line(int _p) throws RecognitionException {
+ private ExprContext expr(int _p) throws RecognitionException {
ParserRuleContext _parentctx = _ctx;
int _parentState = getState();
- LineContext _localctx = new LineContext(_ctx, _parentState);
- LineContext _prevctx = _localctx;
+ ExprContext _localctx = new ExprContext(_ctx, _parentState);
+ ExprContext _prevctx = _localctx;
int _startState = 2;
- enterRecursionRule(_localctx, 2, RULE_line, _p);
+ enterRecursionRule(_localctx, 2, RULE_expr, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
setState(17);
- _errHandler.sync(this);
- switch (_input.LA(1)) {
- case INT:
- case TXT:
- {
- setState(15);
- syn();
- }
- break;
- case LCURLY:
- {
- setState(16);
- group();
- }
- break;
- default:
- throw new NoViableAltException(this);
- }
+ item();
}
_ctx.stop = _input.LT(-1);
- setState(26);
+ setState(23);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,2,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,0,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
_prevctx = _localctx;
{
{
- _localctx = new LineContext(_parentctx,
_parentState);
- pushNewRecursionContext(_localctx,
_startState, RULE_line);
+ _localctx = new ExprContext(_parentctx,
_parentState);
+ pushNewRecursionContext(_localctx,
_startState, RULE_expr);
setState(19);
if (!(precpred(_ctx, 1))) throw new
FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(22);
- _errHandler.sync(this);
- switch (_input.LA(1)) {
- case INT:
- case TXT:
- {
- setState(20);
- syn();
- }
- break;
- case LCURLY:
- {
- setState(21);
- group();
- }
- break;
- default:
- throw new
NoViableAltException(this);
- }
+ setState(20);
+ item();
}
}
}
- setState(28);
+ setState(25);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,2,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,0,_ctx);
}
}
}
@@ -244,6 +207,64 @@ public class NCMacroDslParser extends Parser {
return _localctx;
}
+ public static class ItemContext extends ParserRuleContext {
+ public SynContext syn() {
+ return getRuleContext(SynContext.class,0);
+ }
+ public GroupContext group() {
+ return getRuleContext(GroupContext.class,0);
+ }
+ public ItemContext(ParserRuleContext parent, int invokingState)
{
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_item; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof NCMacroDslListener )
((NCMacroDslListener)listener).enterItem(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof NCMacroDslListener )
((NCMacroDslListener)listener).exitItem(this);
+ }
+ }
+
+ public final ItemContext item() throws RecognitionException {
+ ItemContext _localctx = new ItemContext(_ctx, getState());
+ enterRule(_localctx, 4, RULE_item);
+ try {
+ setState(28);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case INT:
+ case TXT:
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(26);
+ syn();
+ }
+ break;
+ case LCURLY:
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(27);
+ group();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class SynContext extends ParserRuleContext {
public TerminalNode TXT() { return
getToken(NCMacroDslParser.TXT, 0); }
public TerminalNode INT() { return
getToken(NCMacroDslParser.INT, 0); }
@@ -263,12 +284,12 @@ public class NCMacroDslParser extends Parser {
public final SynContext syn() throws RecognitionException {
SynContext _localctx = new SynContext(_ctx, getState());
- enterRule(_localctx, 4, RULE_syn);
+ enterRule(_localctx, 6, RULE_syn);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(29);
+ setState(30);
_la = _input.LA(1);
if ( !(_la==INT || _la==TXT) ) {
_errHandler.recoverInline(this);
@@ -316,22 +337,22 @@ public class NCMacroDslParser extends Parser {
public final GroupContext group() throws RecognitionException {
GroupContext _localctx = new GroupContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_group);
+ enterRule(_localctx, 8, RULE_group);
try {
enterOuterAlt(_localctx, 1);
{
- setState(31);
- match(LCURLY);
setState(32);
- list(0);
+ match(LCURLY);
setState(33);
+ list(0);
+ setState(34);
match(RCURLY);
- setState(35);
+ setState(36);
_errHandler.sync(this);
- switch (
getInterpreter().adaptivePredict(_input,3,_ctx) ) {
+ switch (
getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
{
- setState(34);
+ setState(35);
minMax();
}
break;
@@ -373,19 +394,19 @@ public class NCMacroDslParser extends Parser {
public final MinMaxContext minMax() throws RecognitionException {
MinMaxContext _localctx = new MinMaxContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_minMax);
+ enterRule(_localctx, 10, RULE_minMax);
try {
enterOuterAlt(_localctx, 1);
{
- setState(37);
- match(LBR);
setState(38);
- match(INT);
+ match(LBR);
setState(39);
- match(COMMA);
- setState(40);
match(INT);
+ setState(40);
+ match(COMMA);
setState(41);
+ match(INT);
+ setState(42);
match(RBR);
}
}
@@ -401,8 +422,8 @@ public class NCMacroDslParser extends Parser {
}
public static class ListContext extends ParserRuleContext {
- public SynContext syn() {
- return getRuleContext(SynContext.class,0);
+ public ExprContext expr() {
+ return getRuleContext(ExprContext.class,0);
}
public ListContext list() {
return getRuleContext(ListContext.class,0);
@@ -432,20 +453,20 @@ public class NCMacroDslParser extends Parser {
int _parentState = getState();
ListContext _localctx = new ListContext(_ctx, _parentState);
ListContext _prevctx = _localctx;
- int _startState = 10;
- enterRecursionRule(_localctx, 10, RULE_list, _p);
+ int _startState = 12;
+ enterRecursionRule(_localctx, 12, RULE_list, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(44);
- syn();
+ setState(45);
+ expr(0);
}
_ctx.stop = _input.LT(-1);
- setState(54);
+ setState(55);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,5,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,4,_ctx);
while ( _alt!=2 &&
_alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null )
triggerExitRuleEvent();
@@ -454,23 +475,24 @@ public class NCMacroDslParser extends Parser {
{
_localctx = new ListContext(_parentctx,
_parentState);
pushNewRecursionContext(_localctx,
_startState, RULE_list);
- setState(46);
- if (!(precpred(_ctx, 1))) throw new
FailedPredicateException(this, "precpred(_ctx, 1)");
setState(47);
+ if (!(precpred(_ctx, 1))) throw new
FailedPredicateException(this, "precpred(_ctx, 1)");
+ setState(48);
match(VERT);
- setState(50);
+ setState(51);
_errHandler.sync(this);
switch (_input.LA(1)) {
+ case LCURLY:
case INT:
case TXT:
{
- setState(48);
- syn();
+ setState(49);
+ expr(0);
}
break;
case UNDERSCORE:
{
- setState(49);
+ setState(50);
match(UNDERSCORE);
}
break;
@@ -480,9 +502,9 @@ public class NCMacroDslParser extends Parser {
}
}
}
- setState(56);
+ setState(57);
_errHandler.sync(this);
- _alt =
getInterpreter().adaptivePredict(_input,5,_ctx);
+ _alt =
getInterpreter().adaptivePredict(_input,4,_ctx);
}
}
}
@@ -500,13 +522,13 @@ public class NCMacroDslParser extends Parser {
public boolean sempred(RuleContext _localctx, int ruleIndex, int
predIndex) {
switch (ruleIndex) {
case 1:
- return line_sempred((LineContext)_localctx, predIndex);
- case 5:
+ return expr_sempred((ExprContext)_localctx, predIndex);
+ case 6:
return list_sempred((ListContext)_localctx, predIndex);
}
return true;
}
- private boolean line_sempred(LineContext _localctx, int predIndex) {
+ private boolean expr_sempred(ExprContext _localctx, int predIndex) {
switch (predIndex) {
case 0:
return precpred(_ctx, 1);
@@ -522,22 +544,22 @@ public class NCMacroDslParser extends Parser {
}
public static final String _serializedATN =
-
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\r<\4\2\t\2\4\3\t"+
-
"\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2\3\2\3\3\3\3\3\3\5\3\24\n\3\3\3"+
-
"\3\3\3\3\5\3\31\n\3\7\3\33\n\3\f\3\16\3\36\13\3\3\4\3\4\3\5\3\5\3\5\3"+
-
"\5\5\5&\n\5\3\6\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\3\7\5\7\65"+
-
"\n\7\7\7\67\n\7\f\7\16\7:\13\7\3\7\2\4\4\f\b\2\4\6\b\n\f\2\3\3\2\n\13"+
-
"\2;\2\16\3\2\2\2\4\20\3\2\2\2\6\37\3\2\2\2\b!\3\2\2\2\n\'\3\2\2\2\f-\3"+
-
"\2\2\2\16\17\5\4\3\2\17\3\3\2\2\2\20\23\b\3\1\2\21\24\5\6\4\2\22\24\5"+
-
"\b\5\2\23\21\3\2\2\2\23\22\3\2\2\2\24\34\3\2\2\2\25\30\f\3\2\2\26\31\5"+
-
"\6\4\2\27\31\5\b\5\2\30\26\3\2\2\2\30\27\3\2\2\2\31\33\3\2\2\2\32\25\3"+
-
"\2\2\2\33\36\3\2\2\2\34\32\3\2\2\2\34\35\3\2\2\2\35\5\3\2\2\2\36\34\3"+
- "\2\2\2\37 \t\2\2\2
\7\3\2\2\2!\"\7\3\2\2\"#\5\f\7\2#%\7\4\2\2$&\5\n\6"+
-
"\2%$\3\2\2\2%&\3\2\2\2&\t\3\2\2\2\'(\7\5\2\2()\7\n\2\2)*\7\b\2\2*+\7\n"+
-
"\2\2+,\7\6\2\2,\13\3\2\2\2-.\b\7\1\2./\5\6\4\2/8\3\2\2\2\60\61\f\3\2\2"+
-
"\61\64\7\7\2\2\62\65\5\6\4\2\63\65\7\t\2\2\64\62\3\2\2\2\64\63\3\2\2\2"+
-
"\65\67\3\2\2\2\66\60\3\2\2\2\67:\3\2\2\28\66\3\2\2\289\3\2\2\29\r\3\2"+
- "\2\2:8\3\2\2\2\b\23\30\34%\648";
+
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\r=\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\3\2\3\2\3\3\3\3\3\3\3\3\3\3"+
+
"\7\3\30\n\3\f\3\16\3\33\13\3\3\4\3\4\5\4\37\n\4\3\5\3\5\3\6\3\6\3\6\3"+
+
"\6\5\6\'\n\6\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\5\b\66"+
+
"\n\b\7\b8\n\b\f\b\16\b;\13\b\3\b\2\4\4\16\t\2\4\6\b\n\f\16\2\3\3\2\n\13"+
+ "\2:\2\20\3\2\2\2\4\22\3\2\2\2\6\36\3\2\2\2\b
\3\2\2\2\n\"\3\2\2\2\f(\3"+
+
"\2\2\2\16.\3\2\2\2\20\21\5\4\3\2\21\3\3\2\2\2\22\23\b\3\1\2\23\24\5\6"+
+
"\4\2\24\31\3\2\2\2\25\26\f\3\2\2\26\30\5\6\4\2\27\25\3\2\2\2\30\33\3\2"+
+
"\2\2\31\27\3\2\2\2\31\32\3\2\2\2\32\5\3\2\2\2\33\31\3\2\2\2\34\37\5\b"+
+ "\5\2\35\37\5\n\6\2\36\34\3\2\2\2\36\35\3\2\2\2\37\7\3\2\2\2
!\t\2\2\2"+
+
"!\t\3\2\2\2\"#\7\3\2\2#$\5\16\b\2$&\7\4\2\2%\'\5\f\7\2&%\3\2\2\2&\'\3"+
+
"\2\2\2\'\13\3\2\2\2()\7\5\2\2)*\7\n\2\2*+\7\b\2\2+,\7\n\2\2,-\7\6\2\2"+
+
"-\r\3\2\2\2./\b\b\1\2/\60\5\4\3\2\609\3\2\2\2\61\62\f\3\2\2\62\65\7\7"+
+
"\2\2\63\66\5\4\3\2\64\66\7\t\2\2\65\63\3\2\2\2\65\64\3\2\2\2\668\3\2\2"+
+
"\2\67\61\3\2\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:\17\3\2\2\2;9\3\2\2\2"+
+ "\7\31\36&\659";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
index 357e69a..3f0880e 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
@@ -55,7 +55,9 @@ class NCMacroCompilerSpec {
checkEq(" { A }{B}", Seq("A B"))
checkEq(" { A } {B}", Seq("A B"))
checkEq("A {B | C}", Seq("A B", "A C"))
- checkEq("{A}[1,2]{B}[2, 2]", Seq("A B B", "A A B B"))
-// checkEq("A {B| xxx {C|E}} D", Seq("A B D", "A xxx C D", "A xxx E D"))
+ checkEq("{A}[2,2]", Seq("A A"))
+ checkEq("{A}[1,2]", Seq("A", "A A"))
+ checkEq("{A}[1,2] {B}[2,2]", Seq("A B B", "A A B B"))
+ checkEq("A {B| xxx {C|E}} D", Seq("A B D", "A xxx C D", "A xxx E D"))
}
}