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 ae0a10b  WIP.
ae0a10b is described below

commit ae0a10b5de6b803f339792eabaaf9cc45693100e
Author: Aaron Radzinski <[email protected]>
AuthorDate: Sat Feb 20 16:07:40 2021 -0800

    WIP.
---
 .../nlpcraft/common/makro/antlr4/NCMacroDsl.g4     | 111 ++---
 .../nlpcraft/common/makro/antlr4/NCMacroDsl.interp |  38 ++
 .../nlpcraft/common/makro/antlr4/NCMacroDsl.tokens |  18 +
 .../makro/antlr4/NCMacroDslBaseListener.java       |  99 +++++
 .../common/makro/antlr4/NCMacroDslLexer.interp     |  52 +++
 .../common/makro/antlr4/NCMacroDslLexer.java       | 140 ++++++
 .../common/makro/antlr4/NCMacroDslLexer.tokens     |  18 +
 .../common/makro/antlr4/NCMacroDslListener.java    |  60 +++
 .../common/makro/antlr4/NCMacroDslParser.java      | 488 +++++++++++++++++++++
 9 files changed, 945 insertions(+), 79 deletions(-)

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 07f4871..df477f2 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
@@ -22,92 +22,45 @@ line
     | line syn
     ;
 syn
-    :
-
-
-
-intent: intentId orderedDecl? flowDecl? terms EOF;
-intentId: 'intent' EQ ID;
-orderedDecl: 'ordered' EQ BOOL;
-flowDecl: 'flow' EQ qstring;
-terms: term | terms term;
-termEq: EQ | TILDA;
-term: 'term' termId? termEq LCURLY item RCURLY minMax?;
-termId: LPAREN ID RPAREN;
-item
-    : predicate
-    | LPAREN item RPAREN
-    | item (AND | OR) item
-    | EXCL item
-    ;
-predicate
-    : lval PRED_OP rval
-    | ID LPAREN lval RPAREN PRED_OP rval  // Function call.
+    : TXT
+    | INT // NOTE: since TXT and INT overlap - we catch them both here and 
resolve in compiler.
+    | group
     ;
-lval: lvalQual? ('id' | 'aliases' | 'startidx' | 'endidx' | 'parent' | 
'groups' | 'ancestors' | 'value' | meta);
-lvalQual: lvalPart | lvalQual lvalPart;
-lvalPart: ID DOT;
-rvalSingle
-    : 'null'
-    | MINUS? (INT | INT EXP)
-    | BOOL
-    | qstring
-    ;
-rval
-    : rvalSingle
-    | LPAREN rvalList RPAREN
-    ;
-rvalList
-    : rvalSingle
-    | rvalList COMMA rvalSingle
-    ;
-meta
-    : TILDA ID
-    | TILDA ID LBR INT RBR
-    | TILDA ID LBR qstring RBR
+group: LCURLY list RCURLY minMax?;
+minMax: LBR INT COMMA INT RBR;
+list
+    : syn
+    | list VERT (syn | UNDERSCORE)
     ;
-qstring: QSTRING;
-minMax: minMaxShortcut | minMaxRange;
-minMaxShortcut: PLUS | QUESTION | STAR;
-minMaxRange: LBR INT COMMA INT RBR;
-QSTRING: SQUOTE (~'\'')* SQUOTE;
-PRED_OP: '==' | '!=' | '>=' | '<=' | '>' | '<' | '@@' | '!@';
-AND: '&&';
-OR: '||';
-VERT: '|';
-EXCL: '!';
-LPAREN: '(';
-RPAREN: ')';
 LCURLY: '{';
 RCURLY: '}';
-SQUOTE: '\'';
-TILDA: '~';
-RIGHT: '>>';
 LBR: '[';
 RBR: ']';
+VERT: '|';
 COMMA: ',';
-COLON: ':';
-MINUS: '-';
-DOT: '.';
 UNDERSCORE: '_';
-EQ: '=';
-PLUS: '+';
-QUESTION: '?';
-STAR: '*';
-DOLLAR: '$';
-POWER: '^';
-BOOL: 'true' | 'false';
+fragment TXT_CHAR
+    : [.*^+<>\-&'":#!]
+    | '\u00B7'
+    | '\u0300'..'\u036F'
+    | '\u203F'..'\u2040'
+    | 'A'..'Z'
+    | 'a'..'z'
+    | '0'..'9'
+    | '\u00C0'..'\u00D6'
+    | '\u00D8'..'\u00F6'
+    | '\u00F8'..'\u02FF'
+    | '\u0370'..'\u037D'
+    | '\u037F'..'\u1FFF'
+    | '\u200C'..'\u200D'
+    | '\u2070'..'\u218F'
+    | '\u2C00'..'\u2FEF'
+    | '\u3001'..'\uD7FF'
+    | '\uF900'..'\uFDCF'
+    | '\uFDF0'..'\uFFFD'
+    ; // Ignoring ['\u10000-'\uEFFFF].
+fragment ESC: '\\' . ;
 INT: '0' | [1-9][_0-9]*;
-EXP: DOT [0-9]+;
-ID: (UNDERSCORE|[a-z]|[A-Z])+([a-z]|[A-Z]|[0-9]|COLON|MINUS|UNDERSCORE)*;
-
-
-
-
-WORD:
-
+TXT: (TXT_CHAR | ESC)+;
 WS: [ \r\t\u000C\n]+ -> skip ;
-
-ErrorCharacter
-  : .
-  ;
+ErrorCharacter: .;
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
new file mode 100644
index 0000000..b6beaa5
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.interp
@@ -0,0 +1,38 @@
+token literal names:
+null
+'{'
+'}'
+'['
+']'
+'|'
+','
+'_'
+null
+null
+null
+null
+
+token symbolic names:
+null
+LCURLY
+RCURLY
+LBR
+RBR
+VERT
+COMMA
+UNDERSCORE
+INT
+TXT
+WS
+ErrorCharacter
+
+rule names:
+line
+syn
+group
+minMax
+list
+
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 13, 54, 4, 2, 
9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 3, 2, 3, 2, 3, 2, 3, 2, 
3, 2, 7, 2, 18, 10, 2, 12, 2, 14, 2, 21, 11, 2, 3, 3, 3, 3, 3, 3, 5, 3, 26, 10, 
3, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 32, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 
3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 47, 10, 6, 7, 6, 49, 10, 6, 12, 
6, 14, 6, 52, 11, 6, 3, 6, 2, 4, 2, 10, 7, 2, 4, 6, 8, 10, 2, 2, 2, 54, 2, 12, 
3, 2, 2, 2, 4, 25, [...]
\ No newline at end of file
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.tokens
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.tokens
new file mode 100644
index 0000000..de7a979
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDsl.tokens
@@ -0,0 +1,18 @@
+LCURLY=1
+RCURLY=2
+LBR=3
+RBR=4
+VERT=5
+COMMA=6
+UNDERSCORE=7
+INT=8
+TXT=9
+WS=10
+ErrorCharacter=11
+'{'=1
+'}'=2
+'['=3
+']'=4
+'|'=5
+','=6
+'_'=7
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
new file mode 100644
index 0000000..0633a30
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslBaseListener.java
@@ -0,0 +1,99 @@
+// 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;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+/**
+ * This class provides an empty implementation of {@link NCMacroDslListener},
+ * which can be extended to create a listener which only needs to handle a 
subset
+ * of the available methods.
+ */
+public class NCMacroDslBaseListener implements NCMacroDslListener {
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void enterLine(NCMacroDslParser.LineContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void exitLine(NCMacroDslParser.LineContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void enterSyn(NCMacroDslParser.SynContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void exitSyn(NCMacroDslParser.SynContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void enterGroup(NCMacroDslParser.GroupContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void exitGroup(NCMacroDslParser.GroupContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void enterMinMax(NCMacroDslParser.MinMaxContext ctx) { 
}
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void exitMinMax(NCMacroDslParser.MinMaxContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void enterList(NCMacroDslParser.ListContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void exitList(NCMacroDslParser.ListContext ctx) { }
+
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void enterEveryRule(ParserRuleContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void exitEveryRule(ParserRuleContext ctx) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void visitTerminal(TerminalNode node) { }
+       /**
+        * {@inheritDoc}
+        *
+        * <p>The default implementation does nothing.</p>
+        */
+       @Override public void visitErrorNode(ErrorNode node) { }
+}
\ No newline at end of file
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.interp
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.interp
new file mode 100644
index 0000000..17a658c
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.interp
@@ -0,0 +1,52 @@
+token literal names:
+null
+'{'
+'}'
+'['
+']'
+'|'
+','
+'_'
+null
+null
+null
+null
+
+token symbolic names:
+null
+LCURLY
+RCURLY
+LBR
+RBR
+VERT
+COMMA
+UNDERSCORE
+INT
+TXT
+WS
+ErrorCharacter
+
+rule names:
+LCURLY
+RCURLY
+LBR
+RBR
+VERT
+COMMA
+UNDERSCORE
+TXT_CHAR
+ESC
+INT
+TXT
+WS
+ErrorCharacter
+
+channel names:
+DEFAULT_TOKEN_CHANNEL
+HIDDEN
+
+mode names:
+DEFAULT_MODE
+
+atn:
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 13, 74, 8, 1, 
4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 
9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 
14, 9, 14, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 
7, 3, 8, 3, 8, 3, 9, 5, 9, 45, 10, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 
7, 11, 53, 10, 11, 12, 11, 14, 11, 56, 11, 11, 5, 11, 58, 10, 11, 3, 12, 3, 12, 
6, 12, 62, 10, 12, 1 [...]
\ No newline at end of file
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
new file mode 100644
index 0000000..cae6418
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.java
@@ -0,0 +1,140 @@
+// 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;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.misc.*;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class NCMacroDslLexer extends Lexer {
+       static { RuntimeMetaData.checkVersion("4.9.1", 
RuntimeMetaData.VERSION); }
+
+       protected static final DFA[] _decisionToDFA;
+       protected static final PredictionContextCache _sharedContextCache =
+               new PredictionContextCache();
+       public static final int
+               LCURLY=1, RCURLY=2, LBR=3, RBR=4, VERT=5, COMMA=6, 
UNDERSCORE=7, INT=8, 
+               TXT=9, WS=10, ErrorCharacter=11;
+       public static String[] channelNames = {
+               "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+       };
+
+       public static String[] modeNames = {
+               "DEFAULT_MODE"
+       };
+
+       private static String[] makeRuleNames() {
+               return new String[] {
+                       "LCURLY", "RCURLY", "LBR", "RBR", "VERT", "COMMA", 
"UNDERSCORE", "TXT_CHAR", 
+                       "ESC", "INT", "TXT", "WS", "ErrorCharacter"
+               };
+       }
+       public static final String[] ruleNames = makeRuleNames();
+
+       private static String[] makeLiteralNames() {
+               return new String[] {
+                       null, "'{'", "'}'", "'['", "']'", "'|'", "','", "'_'"
+               };
+       }
+       private static final String[] _LITERAL_NAMES = makeLiteralNames();
+       private static String[] makeSymbolicNames() {
+               return new String[] {
+                       null, "LCURLY", "RCURLY", "LBR", "RBR", "VERT", 
"COMMA", "UNDERSCORE", 
+                       "INT", "TXT", "WS", "ErrorCharacter"
+               };
+       }
+       private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+       public static final Vocabulary VOCABULARY = new 
VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+       /**
+        * @deprecated Use {@link #VOCABULARY} instead.
+        */
+       @Deprecated
+       public static final String[] tokenNames;
+       static {
+               tokenNames = new String[_SYMBOLIC_NAMES.length];
+               for (int i = 0; i < tokenNames.length; i++) {
+                       tokenNames[i] = VOCABULARY.getLiteralName(i);
+                       if (tokenNames[i] == null) {
+                               tokenNames[i] = VOCABULARY.getSymbolicName(i);
+                       }
+
+                       if (tokenNames[i] == null) {
+                               tokenNames[i] = "<INVALID>";
+                       }
+               }
+       }
+
+       @Override
+       @Deprecated
+       public String[] getTokenNames() {
+               return tokenNames;
+       }
+
+       @Override
+
+       public Vocabulary getVocabulary() {
+               return VOCABULARY;
+       }
+
+
+       public NCMacroDslLexer(CharStream input) {
+               super(input);
+               _interp = new 
LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+       }
+
+       @Override
+       public String getGrammarFileName() { return "NCMacroDsl.g4"; }
+
+       @Override
+       public String[] getRuleNames() { return ruleNames; }
+
+       @Override
+       public String getSerializedATN() { return _serializedATN; }
+
+       @Override
+       public String[] getChannelNames() { return channelNames; }
+
+       @Override
+       public String[] getModeNames() { return modeNames; }
+
+       @Override
+       public ATN getATN() { return _ATN; }
+
+       public static final String _serializedATN =
+               
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\rJ\b\1\4\2\t\2\4"+
+               
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
+               
"\13\4\f\t\f\4\r\t\r\4\16\t\16\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6"+
+               
"\3\7\3\7\3\b\3\b\3\t\5\t-\n\t\3\n\3\n\3\n\3\13\3\13\3\13\7\13\65\n\13"+
+               
"\f\13\16\138\13\13\5\13:\n\13\3\f\3\f\6\f>\n\f\r\f\16\f?\3\r\6\rC\n\r"+
+               
"\r\r\16\rD\3\r\3\r\3\16\3\16\2\2\17\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\2"+
+               
"\23\2\25\n\27\13\31\f\33\r\3\2\6\30\2#%(),-/\60\62<>>@@C\\``c|\u00b9\u00b9"+
+               
"\u00c2\u00d8\u00da\u00f8\u00fa\u037f\u0381\u2001\u200e\u200f\u2041\u2042"+
+               
"\u2072\u2191\u2c02\u2ff1\u3003\ud801\uf902\ufdd1\ufdf2\uffff\3\2\63;\4"+
+               
"\2\62;aa\5\2\13\f\16\17\"\"\2L\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t"+
+               
"\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2"+
+               
"\2\2\31\3\2\2\2\2\33\3\2\2\2\3\35\3\2\2\2\5\37\3\2\2\2\7!\3\2\2\2\t#\3"+
+               
"\2\2\2\13%\3\2\2\2\r\'\3\2\2\2\17)\3\2\2\2\21,\3\2\2\2\23.\3\2\2\2\25"+
+               
"9\3\2\2\2\27=\3\2\2\2\31B\3\2\2\2\33H\3\2\2\2\35\36\7}\2\2\36\4\3\2\2"+
+               "\2\37 \7\177\2\2 
\6\3\2\2\2!\"\7]\2\2\"\b\3\2\2\2#$\7_\2\2$\n\3\2\2\2"+
+               
"%&\7~\2\2&\f\3\2\2\2\'(\7.\2\2(\16\3\2\2\2)*\7a\2\2*\20\3\2\2\2+-\t\2"+
+               
"\2\2,+\3\2\2\2-\22\3\2\2\2./\7^\2\2/\60\13\2\2\2\60\24\3\2\2\2\61:\7\62"+
+               
"\2\2\62\66\t\3\2\2\63\65\t\4\2\2\64\63\3\2\2\2\658\3\2\2\2\66\64\3\2\2"+
+               
"\2\66\67\3\2\2\2\67:\3\2\2\28\66\3\2\2\29\61\3\2\2\29\62\3\2\2\2:\26\3"+
+               
"\2\2\2;>\5\21\t\2<>\5\23\n\2=;\3\2\2\2=<\3\2\2\2>?\3\2\2\2?=\3\2\2\2?"+
+               
"@\3\2\2\2@\30\3\2\2\2AC\t\5\2\2BA\3\2\2\2CD\3\2\2\2DB\3\2\2\2DE\3\2\2"+
+               
"\2EF\3\2\2\2FG\b\r\2\2G\32\3\2\2\2HI\13\2\2\2I\34\3\2\2\2\t\2,\669=?D"+
+               "\3\b\2\2";
+       public static final ATN _ATN =
+               new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+       static {
+               _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+               for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+                       _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), 
i);
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.tokens
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.tokens
new file mode 100644
index 0000000..de7a979
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslLexer.tokens
@@ -0,0 +1,18 @@
+LCURLY=1
+RCURLY=2
+LBR=3
+RBR=4
+VERT=5
+COMMA=6
+UNDERSCORE=7
+INT=8
+TXT=9
+WS=10
+ErrorCharacter=11
+'{'=1
+'}'=2
+'['=3
+']'=4
+'|'=5
+','=6
+'_'=7
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
new file mode 100644
index 0000000..3e7cfa3
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslListener.java
@@ -0,0 +1,60 @@
+// 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;
+
+/**
+ * This interface defines a complete listener for a parse tree produced by
+ * {@link NCMacroDslParser}.
+ */
+public interface NCMacroDslListener extends ParseTreeListener {
+       /**
+        * Enter a parse tree produced by {@link NCMacroDslParser#line}.
+        * @param ctx the parse tree
+        */
+       void enterLine(NCMacroDslParser.LineContext ctx);
+       /**
+        * Exit a parse tree produced by {@link NCMacroDslParser#line}.
+        * @param ctx the parse tree
+        */
+       void exitLine(NCMacroDslParser.LineContext ctx);
+       /**
+        * Enter a parse tree produced by {@link NCMacroDslParser#syn}.
+        * @param ctx the parse tree
+        */
+       void enterSyn(NCMacroDslParser.SynContext ctx);
+       /**
+        * Exit a parse tree produced by {@link NCMacroDslParser#syn}.
+        * @param ctx the parse tree
+        */
+       void exitSyn(NCMacroDslParser.SynContext ctx);
+       /**
+        * Enter a parse tree produced by {@link NCMacroDslParser#group}.
+        * @param ctx the parse tree
+        */
+       void enterGroup(NCMacroDslParser.GroupContext ctx);
+       /**
+        * Exit a parse tree produced by {@link NCMacroDslParser#group}.
+        * @param ctx the parse tree
+        */
+       void exitGroup(NCMacroDslParser.GroupContext ctx);
+       /**
+        * Enter a parse tree produced by {@link NCMacroDslParser#minMax}.
+        * @param ctx the parse tree
+        */
+       void enterMinMax(NCMacroDslParser.MinMaxContext ctx);
+       /**
+        * Exit a parse tree produced by {@link NCMacroDslParser#minMax}.
+        * @param ctx the parse tree
+        */
+       void exitMinMax(NCMacroDslParser.MinMaxContext ctx);
+       /**
+        * Enter a parse tree produced by {@link NCMacroDslParser#list}.
+        * @param ctx the parse tree
+        */
+       void enterList(NCMacroDslParser.ListContext ctx);
+       /**
+        * Exit a parse tree produced by {@link NCMacroDslParser#list}.
+        * @param ctx the parse tree
+        */
+       void exitList(NCMacroDslParser.ListContext ctx);
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..22219d0
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/antlr4/NCMacroDslParser.java
@@ -0,0 +1,488 @@
+// 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;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
+import org.antlr.v4.runtime.tree.*;
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class NCMacroDslParser extends Parser {
+       static { RuntimeMetaData.checkVersion("4.9.1", 
RuntimeMetaData.VERSION); }
+
+       protected static final DFA[] _decisionToDFA;
+       protected static final PredictionContextCache _sharedContextCache =
+               new PredictionContextCache();
+       public static final int
+               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_line = 0, RULE_syn = 1, RULE_group = 2, RULE_minMax = 3, 
RULE_list = 4;
+       private static String[] makeRuleNames() {
+               return new String[] {
+                       "line", "syn", "group", "minMax", "list"
+               };
+       }
+       public static final String[] ruleNames = makeRuleNames();
+
+       private static String[] makeLiteralNames() {
+               return new String[] {
+                       null, "'{'", "'}'", "'['", "']'", "'|'", "','", "'_'"
+               };
+       }
+       private static final String[] _LITERAL_NAMES = makeLiteralNames();
+       private static String[] makeSymbolicNames() {
+               return new String[] {
+                       null, "LCURLY", "RCURLY", "LBR", "RBR", "VERT", 
"COMMA", "UNDERSCORE", 
+                       "INT", "TXT", "WS", "ErrorCharacter"
+               };
+       }
+       private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+       public static final Vocabulary VOCABULARY = new 
VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+       /**
+        * @deprecated Use {@link #VOCABULARY} instead.
+        */
+       @Deprecated
+       public static final String[] tokenNames;
+       static {
+               tokenNames = new String[_SYMBOLIC_NAMES.length];
+               for (int i = 0; i < tokenNames.length; i++) {
+                       tokenNames[i] = VOCABULARY.getLiteralName(i);
+                       if (tokenNames[i] == null) {
+                               tokenNames[i] = VOCABULARY.getSymbolicName(i);
+                       }
+
+                       if (tokenNames[i] == null) {
+                               tokenNames[i] = "<INVALID>";
+                       }
+               }
+       }
+
+       @Override
+       @Deprecated
+       public String[] getTokenNames() {
+               return tokenNames;
+       }
+
+       @Override
+
+       public Vocabulary getVocabulary() {
+               return VOCABULARY;
+       }
+
+       @Override
+       public String getGrammarFileName() { return "NCMacroDsl.g4"; }
+
+       @Override
+       public String[] getRuleNames() { return ruleNames; }
+
+       @Override
+       public String getSerializedATN() { return _serializedATN; }
+
+       @Override
+       public ATN getATN() { return _ATN; }
+
+       public NCMacroDslParser(TokenStream input) {
+               super(input);
+               _interp = new 
ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+       }
+
+       public static class LineContext extends ParserRuleContext {
+               public SynContext syn() {
+                       return getRuleContext(SynContext.class,0);
+               }
+               public LineContext line() {
+                       return getRuleContext(LineContext.class,0);
+               }
+               public LineContext(ParserRuleContext parent, int invokingState) 
{
+                       super(parent, invokingState);
+               }
+               @Override public int getRuleIndex() { return RULE_line; }
+               @Override
+               public void enterRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).enterLine(this);
+               }
+               @Override
+               public void exitRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).exitLine(this);
+               }
+       }
+
+       public final LineContext line() throws RecognitionException {
+               return line(0);
+       }
+
+       private LineContext line(int _p) throws RecognitionException {
+               ParserRuleContext _parentctx = _ctx;
+               int _parentState = getState();
+               LineContext _localctx = new LineContext(_ctx, _parentState);
+               LineContext _prevctx = _localctx;
+               int _startState = 0;
+               enterRecursionRule(_localctx, 0, RULE_line, _p);
+               try {
+                       int _alt;
+                       enterOuterAlt(_localctx, 1);
+                       {
+                       {
+                       setState(11);
+                       syn();
+                       }
+                       _ctx.stop = _input.LT(-1);
+                       setState(17);
+                       _errHandler.sync(this);
+                       _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);
+                                       setState(13);
+                                       if (!(precpred(_ctx, 1))) throw new 
FailedPredicateException(this, "precpred(_ctx, 1)");
+                                       setState(14);
+                                       syn();
+                                       }
+                                       } 
+                               }
+                               setState(19);
+                               _errHandler.sync(this);
+                               _alt = 
getInterpreter().adaptivePredict(_input,0,_ctx);
+                       }
+                       }
+               }
+               catch (RecognitionException re) {
+                       _localctx.exception = re;
+                       _errHandler.reportError(this, re);
+                       _errHandler.recover(this, re);
+               }
+               finally {
+                       unrollRecursionContexts(_parentctx);
+               }
+               return _localctx;
+       }
+
+       public static class SynContext extends ParserRuleContext {
+               public TerminalNode TXT() { return 
getToken(NCMacroDslParser.TXT, 0); }
+               public TerminalNode INT() { return 
getToken(NCMacroDslParser.INT, 0); }
+               public GroupContext group() {
+                       return getRuleContext(GroupContext.class,0);
+               }
+               public SynContext(ParserRuleContext parent, int invokingState) {
+                       super(parent, invokingState);
+               }
+               @Override public int getRuleIndex() { return RULE_syn; }
+               @Override
+               public void enterRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).enterSyn(this);
+               }
+               @Override
+               public void exitRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).exitSyn(this);
+               }
+       }
+
+       public final SynContext syn() throws RecognitionException {
+               SynContext _localctx = new SynContext(_ctx, getState());
+               enterRule(_localctx, 2, RULE_syn);
+               try {
+                       setState(23);
+                       _errHandler.sync(this);
+                       switch (_input.LA(1)) {
+                       case TXT:
+                               enterOuterAlt(_localctx, 1);
+                               {
+                               setState(20);
+                               match(TXT);
+                               }
+                               break;
+                       case INT:
+                               enterOuterAlt(_localctx, 2);
+                               {
+                               setState(21);
+                               match(INT);
+                               }
+                               break;
+                       case LCURLY:
+                               enterOuterAlt(_localctx, 3);
+                               {
+                               setState(22);
+                               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 GroupContext extends ParserRuleContext {
+               public TerminalNode LCURLY() { return 
getToken(NCMacroDslParser.LCURLY, 0); }
+               public ListContext list() {
+                       return getRuleContext(ListContext.class,0);
+               }
+               public TerminalNode RCURLY() { return 
getToken(NCMacroDslParser.RCURLY, 0); }
+               public MinMaxContext minMax() {
+                       return getRuleContext(MinMaxContext.class,0);
+               }
+               public GroupContext(ParserRuleContext parent, int 
invokingState) {
+                       super(parent, invokingState);
+               }
+               @Override public int getRuleIndex() { return RULE_group; }
+               @Override
+               public void enterRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).enterGroup(this);
+               }
+               @Override
+               public void exitRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).exitGroup(this);
+               }
+       }
+
+       public final GroupContext group() throws RecognitionException {
+               GroupContext _localctx = new GroupContext(_ctx, getState());
+               enterRule(_localctx, 4, RULE_group);
+               try {
+                       enterOuterAlt(_localctx, 1);
+                       {
+                       setState(25);
+                       match(LCURLY);
+                       setState(26);
+                       list(0);
+                       setState(27);
+                       match(RCURLY);
+                       setState(29);
+                       _errHandler.sync(this);
+                       switch ( 
getInterpreter().adaptivePredict(_input,2,_ctx) ) {
+                       case 1:
+                               {
+                               setState(28);
+                               minMax();
+                               }
+                               break;
+                       }
+                       }
+               }
+               catch (RecognitionException re) {
+                       _localctx.exception = re;
+                       _errHandler.reportError(this, re);
+                       _errHandler.recover(this, re);
+               }
+               finally {
+                       exitRule();
+               }
+               return _localctx;
+       }
+
+       public static class MinMaxContext extends ParserRuleContext {
+               public TerminalNode LBR() { return 
getToken(NCMacroDslParser.LBR, 0); }
+               public List<TerminalNode> INT() { return 
getTokens(NCMacroDslParser.INT); }
+               public TerminalNode INT(int i) {
+                       return getToken(NCMacroDslParser.INT, i);
+               }
+               public TerminalNode COMMA() { return 
getToken(NCMacroDslParser.COMMA, 0); }
+               public TerminalNode RBR() { return 
getToken(NCMacroDslParser.RBR, 0); }
+               public MinMaxContext(ParserRuleContext parent, int 
invokingState) {
+                       super(parent, invokingState);
+               }
+               @Override public int getRuleIndex() { return RULE_minMax; }
+               @Override
+               public void enterRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).enterMinMax(this);
+               }
+               @Override
+               public void exitRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).exitMinMax(this);
+               }
+       }
+
+       public final MinMaxContext minMax() throws RecognitionException {
+               MinMaxContext _localctx = new MinMaxContext(_ctx, getState());
+               enterRule(_localctx, 6, RULE_minMax);
+               try {
+                       enterOuterAlt(_localctx, 1);
+                       {
+                       setState(31);
+                       match(LBR);
+                       setState(32);
+                       match(INT);
+                       setState(33);
+                       match(COMMA);
+                       setState(34);
+                       match(INT);
+                       setState(35);
+                       match(RBR);
+                       }
+               }
+               catch (RecognitionException re) {
+                       _localctx.exception = re;
+                       _errHandler.reportError(this, re);
+                       _errHandler.recover(this, re);
+               }
+               finally {
+                       exitRule();
+               }
+               return _localctx;
+       }
+
+       public static class ListContext extends ParserRuleContext {
+               public SynContext syn() {
+                       return getRuleContext(SynContext.class,0);
+               }
+               public ListContext list() {
+                       return getRuleContext(ListContext.class,0);
+               }
+               public TerminalNode VERT() { return 
getToken(NCMacroDslParser.VERT, 0); }
+               public TerminalNode UNDERSCORE() { return 
getToken(NCMacroDslParser.UNDERSCORE, 0); }
+               public ListContext(ParserRuleContext parent, int invokingState) 
{
+                       super(parent, invokingState);
+               }
+               @Override public int getRuleIndex() { return RULE_list; }
+               @Override
+               public void enterRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).enterList(this);
+               }
+               @Override
+               public void exitRule(ParseTreeListener listener) {
+                       if ( listener instanceof NCMacroDslListener ) 
((NCMacroDslListener)listener).exitList(this);
+               }
+       }
+
+       public final ListContext list() throws RecognitionException {
+               return list(0);
+       }
+
+       private ListContext list(int _p) throws RecognitionException {
+               ParserRuleContext _parentctx = _ctx;
+               int _parentState = getState();
+               ListContext _localctx = new ListContext(_ctx, _parentState);
+               ListContext _prevctx = _localctx;
+               int _startState = 8;
+               enterRecursionRule(_localctx, 8, RULE_list, _p);
+               try {
+                       int _alt;
+                       enterOuterAlt(_localctx, 1);
+                       {
+                       {
+                       setState(38);
+                       syn();
+                       }
+                       _ctx.stop = _input.LT(-1);
+                       setState(48);
+                       _errHandler.sync(this);
+                       _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();
+                                       _prevctx = _localctx;
+                                       {
+                                       {
+                                       _localctx = new ListContext(_parentctx, 
_parentState);
+                                       pushNewRecursionContext(_localctx, 
_startState, RULE_list);
+                                       setState(40);
+                                       if (!(precpred(_ctx, 1))) throw new 
FailedPredicateException(this, "precpred(_ctx, 1)");
+                                       setState(41);
+                                       match(VERT);
+                                       setState(44);
+                                       _errHandler.sync(this);
+                                       switch (_input.LA(1)) {
+                                       case LCURLY:
+                                       case INT:
+                                       case TXT:
+                                               {
+                                               setState(42);
+                                               syn();
+                                               }
+                                               break;
+                                       case UNDERSCORE:
+                                               {
+                                               setState(43);
+                                               match(UNDERSCORE);
+                                               }
+                                               break;
+                                       default:
+                                               throw new 
NoViableAltException(this);
+                                       }
+                                       }
+                                       } 
+                               }
+                               setState(50);
+                               _errHandler.sync(this);
+                               _alt = 
getInterpreter().adaptivePredict(_input,4,_ctx);
+                       }
+                       }
+               }
+               catch (RecognitionException re) {
+                       _localctx.exception = re;
+                       _errHandler.reportError(this, re);
+                       _errHandler.recover(this, re);
+               }
+               finally {
+                       unrollRecursionContexts(_parentctx);
+               }
+               return _localctx;
+       }
+
+       public boolean sempred(RuleContext _localctx, int ruleIndex, int 
predIndex) {
+               switch (ruleIndex) {
+               case 0:
+                       return line_sempred((LineContext)_localctx, predIndex);
+               case 4:
+                       return list_sempred((ListContext)_localctx, predIndex);
+               }
+               return true;
+       }
+       private boolean line_sempred(LineContext _localctx, int predIndex) {
+               switch (predIndex) {
+               case 0:
+                       return precpred(_ctx, 1);
+               }
+               return true;
+       }
+       private boolean list_sempred(ListContext _localctx, int predIndex) {
+               switch (predIndex) {
+               case 1:
+                       return precpred(_ctx, 1);
+               }
+               return true;
+       }
+
+       public static final String _serializedATN =
+               
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\r\66\4\2\t\2\4\3"+
+               
"\t\3\4\4\t\4\4\5\t\5\4\6\t\6\3\2\3\2\3\2\3\2\3\2\7\2\22\n\2\f\2\16\2\25"+
+               "\13\2\3\3\3\3\3\3\5\3\32\n\3\3\4\3\4\3\4\3\4\5\4 
\n\4\3\5\3\5\3\5\3\5"+
+               
"\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6/\n\6\7\6\61\n\6\f\6\16\6\64\13"+
+               
"\6\3\6\2\4\2\n\7\2\4\6\b\n\2\2\2\66\2\f\3\2\2\2\4\31\3\2\2\2\6\33\3\2"+
+               
"\2\2\b!\3\2\2\2\n\'\3\2\2\2\f\r\b\2\1\2\r\16\5\4\3\2\16\23\3\2\2\2\17"+
+               
"\20\f\3\2\2\20\22\5\4\3\2\21\17\3\2\2\2\22\25\3\2\2\2\23\21\3\2\2\2\23"+
+               
"\24\3\2\2\2\24\3\3\2\2\2\25\23\3\2\2\2\26\32\7\13\2\2\27\32\7\n\2\2\30"+
+               
"\32\5\6\4\2\31\26\3\2\2\2\31\27\3\2\2\2\31\30\3\2\2\2\32\5\3\2\2\2\33"+
+               "\34\7\3\2\2\34\35\5\n\6\2\35\37\7\4\2\2\36 
\5\b\5\2\37\36\3\2\2\2\37 "+
+               "\3\2\2\2 
\7\3\2\2\2!\"\7\5\2\2\"#\7\n\2\2#$\7\b\2\2$%\7\n\2\2%&\7\6\2"+
+               
"\2&\t\3\2\2\2\'(\b\6\1\2()\5\4\3\2)\62\3\2\2\2*+\f\3\2\2+.\7\7\2\2,/\5"+
+               
"\4\3\2-/\7\t\2\2.,\3\2\2\2.-\3\2\2\2/\61\3\2\2\2\60*\3\2\2\2\61\64\3\2"+
+               
"\2\2\62\60\3\2\2\2\62\63\3\2\2\2\63\13\3\2\2\2\64\62\3\2\2\2\7\23\31\37"+
+               ".\62";
+       public static final ATN _ATN =
+               new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+       static {
+               _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+               for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+                       _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), 
i);
+               }
+       }
+}
\ No newline at end of file

Reply via email to