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

commit 9f7d973af311d775360f6c57393af959941f88cb
Author: Aaron Radzinski <[email protected]>
AuthorDate: Tue Feb 16 18:55:16 2021 -0800

    WIP.
---
 .../model/intent/impl/ver2/NCBaseDslCompiler.scala | 285 +++++++++++++++++++++
 .../intent/impl/ver2/NCIntentDslCompiler.scala     | 248 +-----------------
 2 files changed, 294 insertions(+), 239 deletions(-)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCBaseDslCompiler.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCBaseDslCompiler.scala
new file mode 100644
index 0000000..bb02a22
--- /dev/null
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCBaseDslCompiler.scala
@@ -0,0 +1,285 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.nlpcraft.model.intent.impl.ver2
+
+import org.antlr.v4.runtime.tree.{TerminalNode ⇒ TN}
+import org.apache.nlpcraft.model.NCToken
+import org.apache.nlpcraft.model.intent.utils.ver2.{NCDslTermContext, 
NCDslTermRetVal}
+
+import java.lang.{Double ⇒ JDouble, IllegalArgumentException ⇒ IAE, Long ⇒ 
JLong}
+import scala.collection.mutable
+
+trait NCBaseDslCompiler {
+    type StackType = mutable.ArrayStack[NCDslTermRetVal]
+    type Instr = (NCToken, StackType,  NCDslTermContext) ⇒ Unit
+
+    def isJLong(v: AnyRef): Boolean = v.isInstanceOf[JLong]
+    def isJDouble(v: AnyRef): Boolean = v.isInstanceOf[JDouble]
+    def isString(v: AnyRef): Boolean = v.isInstanceOf[String]
+    def isBoolean(v: AnyRef): Boolean = v.isInstanceOf[Boolean]
+    def asJLong(v: AnyRef): Long = v.asInstanceOf[JLong].longValue()
+    def asJDouble(v: AnyRef): Double = v.asInstanceOf[JDouble].doubleValue()
+    def asString(v: AnyRef): String = v.asInstanceOf[String]
+    def asBoolean(v: AnyRef): Boolean = v.asInstanceOf[Boolean]
+
+    def pushAny(any: AnyRef, usedTok: Boolean)(implicit stack: StackType): 
Unit =
+        stack.push(NCDslTermRetVal(any, usedTok))
+    def pushLong(any: Long, usedTok: Boolean)(implicit stack: StackType): Unit 
=
+        stack.push(NCDslTermRetVal(Long.box(any), usedTok))
+    def pushDouble(any: Double, usedTok: Boolean)(implicit stack: StackType): 
Unit =
+        stack.push(NCDslTermRetVal(Double.box(any), usedTok))
+    def pushBoolean(any: Boolean, usedTok: Boolean)(implicit stack: 
StackType): Unit =
+        stack.push(NCDslTermRetVal(Boolean.box(any), usedTok))
+
+    def errUnaryOp(op: String, v: AnyRef): IAE =
+        new IAE(s"Unexpected '$op' DSL operation for value: $v")
+    def errBinaryOp(op: String, v1: AnyRef, v2: AnyRef): IAE =
+        new IAE(s"Unexpected '$op' DSL operation for values: $v1, $v2")
+    def errUnknownFun(fun: String): IAE =
+        new IAE(s"Unknown DSL function: $fun()")
+    def errMinParamNum(min: Int, fun: String): IAE =
+        new IAE(s"Invalid number of parameters for DSL function ($min is 
required): $fun()")
+    def errParamNum(fun: String): IAE =
+        new IAE(s"Invalid number of parameters for DSL function: $fun()")
+    def errParamType(fun: String, param: AnyRef, expectType: String): IAE =
+        new IAE(s"Expecting '$expectType' type of parameter for DSL function 
'$fun()', found: $param")
+
+    /**
+     *
+     * @param stack
+     * @return
+     */
+    def pop2()(implicit stack: StackType): (AnyRef, AnyRef, Boolean, Boolean) 
= {
+        require(stack.size >= 2)
+
+        // Stack pops in reverse order of push...
+        val NCDslTermRetVal(val2, f2) = stack.pop()
+        val NCDslTermRetVal(val1, f1) = stack.pop()
+
+        (val1, val2, f1, f2)
+    }
+    /**
+     *
+     * @param stack
+     * @return
+     */
+    def pop3()(implicit stack: StackType): (AnyRef, AnyRef, AnyRef, Boolean, 
Boolean, Boolean) = {
+        require(stack.size >= 3)
+
+        // Stack pops in reverse order of push...
+        val NCDslTermRetVal(val3, f3) = stack.pop()
+        val NCDslTermRetVal(val2, f2) = stack.pop()
+        val NCDslTermRetVal(val1, f1) = stack.pop()
+
+        (val1, val2, val3, f1, f2, f3)
+    }
+
+    /**
+     *
+     * @param stack
+     * @return
+     */
+    def pop1()(implicit stack: StackType): (AnyRef, Boolean) = {
+        require(stack.nonEmpty)
+
+        val NCDslTermRetVal(v, f) = stack.pop()
+
+        (v, f)
+    }
+
+    /**
+     *
+     * @param lt
+     * @param gt
+     * @param lteq
+     * @param gteq
+     */
+    def parseCompExpr(lt: TN, gt: TN, lteq: TN, gteq: TN): Instr = (_, stack: 
StackType, _) ⇒ {
+        implicit val s = stack
+
+        val (v1, v2, f1, f2) = pop2()
+        val usedTok = f1 || f2
+
+        if (lt != null) {
+            if (isJLong(v1) && isJLong(v2))
+                pushBoolean(asJLong(v1) < asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushBoolean(asJLong(v1) < asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushBoolean(asJDouble(v1) < asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushBoolean(asJDouble(v1) < asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp("<", v1, v2)
+        }
+        else if (gt != null) {
+            if (isJLong(v1) && isJLong(v2))
+                pushBoolean(asJLong(v1) > asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushBoolean(asJLong(v1) > asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushBoolean(asJDouble(v1) > asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushBoolean(asJDouble(v1) > asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp(">", v1, v2)
+        }
+        else if (lteq != null) {
+            if (isJLong(v1) && isJLong(v2))
+                pushBoolean(asJLong(v1) <= asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushBoolean(asJLong(v1) <= asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushBoolean(asJDouble(v1) <= asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushBoolean(asJDouble(v1) <= asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp("<=", v1, v2)
+        }
+        else {
+            assert(gteq != null)
+
+            if (isJLong(v1) && isJLong(v2))
+                pushBoolean(asJLong(v1) >= asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushBoolean(asJLong(v1) >= asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushBoolean(asJDouble(v1) >= asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushBoolean(asJDouble(v1) >= asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp(">=", v1, v2)
+        }
+    }
+
+    /**
+     *
+     * @param mult
+     * @param mod
+     * @param div
+     */
+    def parseMultExpr(mult: TN, mod: TN, div: TN): Instr = (_, stack: 
StackType, _) ⇒ {
+        implicit val s = stack
+
+        val (v1, v2, f1, f2) = pop2()
+        val usedTok = f1 || f2
+
+        if (mult != null) {
+            if (isJLong(v1) && isJLong(v2))
+                pushLong(asJLong(v1) * asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushDouble(asJLong(v1) * asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushDouble(asJDouble(v1) * asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushDouble(asJDouble(v1) * asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp("*", v1, v2)
+        }
+        else if (mod != null) {
+            if (isJLong(v1) && isJLong(v2))
+                pushLong(asJLong(v1) % asJLong(v2), usedTok)
+            else
+                throw errBinaryOp("%", v1, v2)
+        }
+        else {
+            assert(div != null)
+
+            if (isJLong(v1) && isJLong(v2))
+                pushLong(asJLong(v1) / asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushDouble(asJLong(v1) / asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushDouble(asJDouble(v1) / asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushDouble(asJDouble(v1) / asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp("/", v1, v2)
+        }
+    }
+
+    /**
+     *
+     * @param plus
+     * @param minus
+     */
+    def parsePlusExpr(plus: TN, minus: TN): Instr = (_, stack: StackType, _) ⇒ 
{
+        implicit val s = stack
+
+        val (v1, v2, f1, f2) = pop2()
+        val usedTok = f1 || f2
+
+        if (plus != null) {
+            if (isString(v1) && isString(v2))
+                pushAny(asString(v1) + asString(v2), usedTok)
+            else if (isJLong(v1) && isJLong(v2))
+                pushLong(asJLong(v1) + asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushDouble(asJLong(v1) + asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushDouble(asJDouble(v1) + asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushDouble(asJDouble(v1) + asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp("+", v1, v2)
+        }
+        else {
+            assert(minus != null)
+
+            if (isJLong(v1) && isJLong(v2))
+                pushLong(asJLong(v1) - asJLong(v2), usedTok)
+            else if (isJLong(v1) && isJDouble(v2))
+                pushDouble(asJLong(v1) - asJDouble(v2), usedTok)
+            else if (isJDouble(v1) && isJLong(v2))
+                pushDouble(asJDouble(v1) - asJLong(v2), usedTok)
+            else if (isJDouble(v1) && isJDouble(v2))
+                pushDouble(asJDouble(v1) - asJDouble(v2), usedTok)
+            else
+                throw errBinaryOp("-", v1, v2)
+        }
+    }
+
+
+    /**
+     * @param minus
+     * @param not
+     * @return
+     */
+    def parseUnaryExpr(minus: TN, not: TN): Instr = (_, stack: StackType, _) ⇒ 
{
+        implicit val s = stack
+
+        val (v, usedTok) = pop1()
+
+        if (minus != null) {
+            if (isJDouble(v))
+                pushDouble(-asJDouble(v), usedTok)
+            else if (isJLong(v))
+                pushLong(-asJLong(v), usedTok)
+            else
+                throw errUnaryOp("-", v)
+        }
+        else {
+            assert(not != null)
+
+            if (isBoolean(v))
+                pushBoolean(!asBoolean(v), usedTok)
+            else
+                throw errUnaryOp("!", v)
+        }
+    }
+}
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 11c94d3..e711b3c 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
@@ -44,7 +44,7 @@ object NCIntentDslCompiler extends LazyLogging {
      *
      */
     //noinspection DuplicatedCode
-    class FiniteStateMachine(dsl: String) extends NCIntentDslBaseListener {
+    class FiniteStateMachine(dsl: String) extends NCIntentDslBaseListener with 
NCBaseDslCompiler {
         // Intent components.
         private var id: String = _
         private var ordered: Boolean = false
@@ -60,43 +60,9 @@ object NCIntentDslCompiler extends LazyLogging {
         private var termClsName: String = _
         private var termMtdName: String = _
 
-        type StackType = mutable.ArrayStack[NCDslTermRetVal]
-        type Instr = (NCToken, StackType,  NCDslTermContext) ⇒ Unit
-
         // Term's code, i.e. list of instructions.
         private var termInstrs = 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 isBoolean(v: AnyRef): Boolean = v.isInstanceOf[Boolean]
-        private def asJLong(v: AnyRef): Long = 
v.asInstanceOf[JLong].longValue()
-        private def asJDouble(v: AnyRef): Double = 
v.asInstanceOf[JDouble].doubleValue()
-        private def asString(v: AnyRef): String = v.asInstanceOf[String]
-        private def asBoolean(v: AnyRef): Boolean = v.asInstanceOf[Boolean]
-
-        private def pushAny(any: AnyRef, usedTok: Boolean)(implicit stack: 
StackType): Unit =
-            stack.push(NCDslTermRetVal(any, usedTok))
-        private def pushLong(any: Long, usedTok: Boolean)(implicit stack: 
StackType): Unit =
-            stack.push(NCDslTermRetVal(Long.box(any), usedTok))
-        private def pushDouble(any: Double, usedTok: Boolean)(implicit stack: 
StackType): Unit =
-            stack.push(NCDslTermRetVal(Double.box(any), usedTok))
-        private def pushBoolean(any: Boolean, usedTok: Boolean)(implicit 
stack: StackType): Unit =
-            stack.push(NCDslTermRetVal(Boolean.box(any), usedTok))
-
-        private def errUnaryOp(op: String, v: AnyRef): IAE =
-            new IAE(s"Unexpected '$op' DSL operation for value: $v")
-        private def errBinaryOp(op: String, v1: AnyRef, v2: AnyRef): IAE =
-            new IAE(s"Unexpected '$op' DSL operation for values: $v1, $v2")
-        private def errUnknownFun(fun: String): IAE =
-            new IAE(s"Unknown DSL function: $fun()")
-        private def errMinParamNum(min: Int, fun: String): IAE =
-            new IAE(s"Invalid number of parameters for DSL function ($min is 
required): $fun()")
-        private def errParamNum(fun: String): IAE =
-            new IAE(s"Invalid number of parameters for DSL function: $fun()")
-        private def errParamType(fun: String, param: AnyRef, expectType: 
String): IAE =
-            new IAE(s"Expecting '$expectType' type of parameter for DSL 
function '$fun()', found: $param")
-
         /**
          *
          * @param min
@@ -118,213 +84,17 @@ object NCIntentDslCompiler extends LazyLogging {
                 assert(false)
         }
 
-        /**
-         *
-         * @param stack
-         * @return
-         */
-        private def pop2()(implicit stack: StackType): (AnyRef, AnyRef, 
Boolean, Boolean) = {
-            require(stack.size >= 2)
-
-            // Stack pops in reverse order of push...
-            val NCDslTermRetVal(val2, f2) = stack.pop()
-            val NCDslTermRetVal(val1, f1) = stack.pop()
-
-            (val1, val2, f1, f2)
-        }
-        /**
-         *
-         * @param stack
-         * @return
-         */
-        private def pop3()(implicit stack: StackType): (AnyRef, AnyRef, 
AnyRef, Boolean, Boolean, Boolean) = {
-            require(stack.size >= 3)
-
-            // Stack pops in reverse order of push...
-            val NCDslTermRetVal(val3, f3) = stack.pop()
-            val NCDslTermRetVal(val2, f2) = stack.pop()
-            val NCDslTermRetVal(val1, f1) = stack.pop()
-
-            (val1, val2, val3, f1, f2, f3)
-        }
-
-        /**
-         *
-         * @param stack
-         * @return
-         */
-        private def pop1()(implicit stack: StackType): (AnyRef, Boolean) = {
-            val NCDslTermRetVal(v, f) = stack.pop()
+        override def exitUnaryExpr(ctx: NCIntentDslParser.UnaryExprContext): 
Unit =
+            termInstrs += parseUnaryExpr(ctx.MINUS(), ctx.NOT())
 
-            (v, f)
-        }
+        override def exitMultExpr(ctx: NCIntentDslParser.MultExprContext): 
Unit =
+            termInstrs += parseMultExpr(ctx.MULT(), ctx.MOD(), ctx.DIV())
 
-        override def exitUnaryExpr(ctx: NCIntentDslParser.UnaryExprContext): 
Unit = {
-            termInstrs += ((_, stack: StackType, _) ⇒ {
-                require(stack.nonEmpty)
+        override def exitPlusExpr(ctx: NCIntentDslParser.PlusExprContext): 
Unit =
+            termInstrs += parsePlusExpr(ctx.PLUS(), ctx.MINUS())
 
-                implicit val s = stack
-
-                val (v, usedTok) = pop1()
-
-                if (ctx.MINUS() != null) {
-                    if (isJDouble(v))
-                        pushDouble(-asJDouble(v), usedTok)
-                    else if (isJLong(v))
-                        pushLong(-asJLong(v), usedTok)
-                    else
-                        throw errUnaryOp("-", v)
-                }
-                else {
-                    assert(ctx.NOT() != null)
-
-                    if (isBoolean(v))
-                        pushBoolean(!asBoolean(v), usedTok)
-                    else
-                        throw errUnaryOp("!", v)
-                }
-            })
-        }
-
-        override def exitMultExpr(ctx: NCIntentDslParser.MultExprContext): 
Unit = {
-            termInstrs += ((_, stack: StackType, _) ⇒ {
-                implicit val s = stack
-
-                val (v1, v2, f1, f2) = pop2()
-                val usedTok = f1 || f2
-
-                if (ctx.MULT() != null) {
-                    if (isJLong(v1) && isJLong(v2))
-                        pushLong(asJLong(v1) * asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushDouble(asJLong(v1) * asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushDouble(asJDouble(v1) * asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushDouble(asJDouble(v1) * asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp("*", v1, v2)
-                }
-                else if (ctx.MOD() != null) {
-                    if (isJLong(v1) && isJLong(v2))
-                        pushLong(asJLong(v1) % asJLong(v2), usedTok)
-                    else
-                        throw errBinaryOp("%", v1, v2)
-                }
-                else {
-                    assert(ctx.DIV() != null)
-
-                    if (isJLong(v1) && isJLong(v2))
-                        pushLong(asJLong(v1) / asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushDouble(asJLong(v1) / asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushDouble(asJDouble(v1) / asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushDouble(asJDouble(v1) / asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp("/", v1, v2)
-                }
-            })
-        }
-
-        override def exitPlusExpr(ctx: NCIntentDslParser.PlusExprContext): 
Unit = {
-            termInstrs += ((_, stack: StackType, _) ⇒ {
-                implicit val s = stack
-
-                val (v1, v2, f1, f2) = pop2()
-                val usedTok = f1 || f2
-
-                if (ctx.PLUS != null) {
-                    if (isString(v1) && isString(v2))
-                        pushAny(asString(v1) + asString(v2), usedTok)
-                    else if (isJLong(v1) && isJLong(v2))
-                        pushLong(asJLong(v1) + asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushDouble(asJLong(v1) + asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushDouble(asJDouble(v1) + asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushDouble(asJDouble(v1) + asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp("+", v1, v2)
-                }
-                else {
-                    assert(ctx.MINUS != null)
-
-                    if (isJLong(v1) && isJLong(v2))
-                        pushLong(asJLong(v1) - asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushDouble(asJLong(v1) - asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushDouble(asJDouble(v1) - asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushDouble(asJDouble(v1) - asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp("-", v1, v2)
-                }
-            })
-        }
-
-        override def exitCompExpr(ctx: NCIntentDslParser.CompExprContext): 
Unit = {
-            termInstrs += ((_, stack: StackType, _) ⇒ {
-                implicit val s = stack
-
-                val (v1, v2, f1, f2) = pop2()
-                val usedTok = f1 || f2
-
-                if (ctx.LT() != null) {
-                    if (isJLong(v1) && isJLong(v2))
-                        pushBoolean(asJLong(v1) < asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushBoolean(asJLong(v1) < asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushBoolean(asJDouble(v1) < asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushBoolean(asJDouble(v1) < asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp("<", v1, v2)
-                }
-                else if (ctx.GT() != null) {
-                    if (isJLong(v1) && isJLong(v2))
-                        pushBoolean(asJLong(v1) > asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushBoolean(asJLong(v1) > asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushBoolean(asJDouble(v1) > asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushBoolean(asJDouble(v1) > asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp(">", v1, v2)
-                }
-                else if (ctx.LTEQ() != null) {
-                    if (isJLong(v1) && isJLong(v2))
-                        pushBoolean(asJLong(v1) <= asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushBoolean(asJLong(v1) <= asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushBoolean(asJDouble(v1) <= asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushBoolean(asJDouble(v1) <= asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp("<=", v1, v2)
-                }
-                else {
-                    assert(ctx.GTEQ() != null)
-
-                    if (isJLong(v1) && isJLong(v2))
-                        pushBoolean(asJLong(v1) >= asJLong(v2), usedTok)
-                    else if (isJLong(v1) && isJDouble(v2))
-                        pushBoolean(asJLong(v1) >= asJDouble(v2), usedTok)
-                    else if (isJDouble(v1) && isJLong(v2))
-                        pushBoolean(asJDouble(v1) >= asJLong(v2), usedTok)
-                    else if (isJDouble(v1) && isJDouble(v2))
-                        pushBoolean(asJDouble(v1) >= asJDouble(v2), usedTok)
-                    else
-                        throw errBinaryOp(">=", v1, v2)
-                }
-            })
-        }
+        override def exitCompExpr(ctx: NCIntentDslParser.CompExprContext): 
Unit =
+            termInstrs += parseCompExpr(ctx.LT(), ctx.GT(), ctx.LTEQ(), 
ctx.GTEQ())
 
         override def exitLogExpr(ctx: NCIntentDslParser.LogExprContext): Unit 
= {
             termInstrs += ((_, stack: StackType, _) ⇒ {

Reply via email to