This is an automated email from the ASF dual-hosted git repository.

mariofusco pushed a commit to branch dev-new-parser
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git

commit f71a4667a5a63057293d55de987b33b2e40b14d0
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Fri Sep 22 19:57:21 2023 +0900

    [DROOLS-7292] Implement eval (#32)
---
 .../src/main/antlr4/org/drools/parser/DRLLexer.g4   |  1 +
 .../src/main/antlr4/org/drools/parser/DRLParser.g4  | 21 ++++++++++++++++++---
 .../main/java/org/drools/parser/DRLVisitorImpl.java |  6 ++++++
 .../java/org/drools/parser/MiscDRLParserTest.java   |  2 --
 .../test/resources/org/drools/parser/with_eval.drl  |  1 +
 5 files changed, 26 insertions(+), 5 deletions(-)

diff --git 
a/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLLexer.g4 
b/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLLexer.g4
index 56d0ada08c..b03d022557 100644
--- 
a/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLLexer.g4
+++ 
b/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLLexer.g4
@@ -50,6 +50,7 @@ DRL_ACTION : 'action';
 DRL_REVERSE : 'reverse';
 DRL_RESULT : 'result';
 DRL_ENTRY_POINT : 'entry-point';
+DRL_EVAL : 'eval';
 
 DRL_SALIENCE : 'salience';
 DRL_ENABLED : 'enabled';
diff --git 
a/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLParser.g4 
b/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLParser.g4
index d775f02b27..760c0bec2b 100644
--- 
a/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLParser.g4
+++ 
b/drools-drl/drools-drl10-parser/src/main/antlr4/org/drools/parser/DRLParser.g4
@@ -67,8 +67,9 @@ lhsUnary : ( lhsExists namedConsequence?
 lhsUnary : (
            lhsExists
            | lhsNot
-           | lhsPatternBind
+           | lhsEval
            | lhsAccumulate
+           | lhsPatternBind
            ) ;
 
 lhsPatternBind : label? ( LPAREN lhsPattern (DRL_OR lhsPattern)* RPAREN | 
lhsPattern ) ;
@@ -139,6 +140,7 @@ drlKeywords
     : DRL_UNIT
     | DRL_FUNCTION
     | DRL_GLOBAL
+    | DRL_DECLARE
     | DRL_RULE
     | DRL_QUERY
     | DRL_WHEN
@@ -151,6 +153,13 @@ drlKeywords
     | DRL_IN
     | DRL_FROM
     | DRL_MATCHES
+    | DRL_ACCUMULATE
+    | DRL_INIT
+    | DRL_ACTION
+    | DRL_REVERSE
+    | DRL_RESULT
+    | DRL_ENTRY_POINT
+    | DRL_EVAL
     | DRL_SALIENCE
     | DRL_ENABLED
     | DRL_NO_LOOP
@@ -182,6 +191,7 @@ drlExpression
        | explicitGenericInvocation
       )
     | drlExpression LBRACK drlExpression RBRACK
+    | DRL_EVAL LPAREN conditionalOrExpression RPAREN
     | methodCall
     | NEW drlCreator
     | LPAREN annotation* typeType (BITAND typeType)* RPAREN drlExpression
@@ -267,9 +277,9 @@ mapEntry
                 | fromWindow
                 | fromExpression )
 */
-patternSource : fromExpression
-              | fromAccumulate
+patternSource : fromAccumulate
               | fromEntryPoint
+              | fromExpression
               ;
 
 fromExpression : conditionalOrExpression ;
@@ -315,6 +325,11 @@ lhsExists : DRL_EXISTS lhsPatternBind ;
 */
 lhsNot : DRL_NOT lhsPatternBind ;
 
+/**
+ * lhsEval := EVAL LEFT_PAREN conditionalExpression RIGHT_PAREN
+ */
+lhsEval : DRL_EVAL LPAREN conditionalOrExpression RPAREN ;
+
 /**
  * lhsAccumulate := (ACCUMULATE|ACC) LEFT_PAREN lhsAnd (COMMA|SEMICOLON)
  *                      accumulateFunctionBinding (COMMA 
accumulateFunctionBinding)*
diff --git 
a/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
 
b/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
index ff4a0f594a..28c299438a 100644
--- 
a/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
+++ 
b/drools-drl/drools-drl10-parser/src/main/java/org/drools/parser/DRLVisitorImpl.java
@@ -16,6 +16,7 @@ import org.drools.drl.ast.descr.AnnotationDescr;
 import org.drools.drl.ast.descr.AttributeDescr;
 import org.drools.drl.ast.descr.BaseDescr;
 import org.drools.drl.ast.descr.EntryPointDescr;
+import org.drools.drl.ast.descr.EvalDescr;
 import org.drools.drl.ast.descr.ExistsDescr;
 import org.drools.drl.ast.descr.ExprConstraintDescr;
 import org.drools.drl.ast.descr.FromDescr;
@@ -357,6 +358,11 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
         return notDescr;
     }
 
+    @Override
+    public EvalDescr visitLhsEval(DRLParser.LhsEvalContext ctx) {
+        return new 
EvalDescr(getTextPreservingWhitespace(ctx.conditionalOrExpression()));
+    }
+
     @Override
     public BaseDescr 
visitLhsExpressionEnclosed(DRLParser.LhsExpressionEnclosedContext ctx) {
         return (BaseDescr) visit(ctx.lhsExpression());
diff --git 
a/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
 
b/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
index b678d1ccce..75f910d3a5 100644
--- 
a/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
+++ 
b/drools-drl/drools-drl10-parser/src/test/java/org/drools/parser/MiscDRLParserTest.java
@@ -1519,7 +1519,6 @@ class MiscDRLParserTest {
         assertThat(bar3.getObjectType()).isEqualTo("Bar");
     }
 
-    @Disabled("Priority : High | Implement eval")
     @Test
     public void parse_EvalMultiple() throws Exception {
         final PackageDescr pkg = parseAndGetPackageDescrFromFile(
@@ -1537,7 +1536,6 @@ class MiscDRLParserTest {
 
     }
 
-    @Disabled("Priority : High | Implement eval")
     @Test
     public void parse_WithEval() throws Exception {
         final PackageDescr pkg = parseAndGetPackageDescrFromFile(
diff --git 
a/drools-drl/drools-drl10-parser/src/test/resources/org/drools/parser/with_eval.drl
 
b/drools-drl/drools-drl10-parser/src/test/resources/org/drools/parser/with_eval.drl
index b888b36ad8..37d49e9844 100644
--- 
a/drools-drl/drools-drl10-parser/src/test/resources/org/drools/parser/with_eval.drl
+++ 
b/drools-drl/drools-drl10-parser/src/test/resources/org/drools/parser/with_eval.drl
@@ -20,4 +20,5 @@ rule simple_rule
     Bar()
     eval(abc("foo"))
   then
+    Kapow
 end


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to