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 5c27ba78039ec68a2d348645b4fec0b9e0835459
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Fri Sep 29 15:53:29 2023 +0900

    [DROOLS-7294] Implement forall (#34)
---
 .../src/main/antlr4/org/drools/parser/DRLLexer.g4              |  1 +
 .../src/main/antlr4/org/drools/parser/DRLParser.g4             |  9 ++++++++-
 .../src/main/java/org/drools/parser/DRLVisitorImpl.java        | 10 +++++++++-
 .../src/test/java/org/drools/parser/MiscDRLParserTest.java     |  2 --
 4 files changed, 18 insertions(+), 4 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 b03d022557..0d9a61ca91 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
@@ -51,6 +51,7 @@ DRL_REVERSE : 'reverse';
 DRL_RESULT : 'result';
 DRL_ENTRY_POINT : 'entry-point';
 DRL_EVAL : 'eval';
+DRL_FORALL : 'forall';
 
 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 aaedc2bf7e..24f4595ce8 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
@@ -68,9 +68,10 @@ lhsUnary : (
            lhsExists
            | lhsNot
            | lhsEval
+           | lhsForall
            | lhsAccumulate
            | lhsPatternBind
-           ) ;
+           ) SEMI? ;
 
 lhsPatternBind : label? ( LPAREN lhsPattern (DRL_OR lhsPattern)* RPAREN | 
lhsPattern ) ;
 
@@ -330,6 +331,12 @@ lhsNot : DRL_NOT lhsPatternBind ;
  */
 lhsEval : DRL_EVAL LPAREN conditionalOrExpression RPAREN ;
 
+/**
+ * lhsForall := FORALL LEFT_PAREN lhsPatternBind+ RIGHT_PAREN
+ */
+
+lhsForall : DRL_FORALL LPAREN lhsPatternBind+ 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 cd0ca10007..4a82522af1 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
@@ -19,6 +19,7 @@ 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.ForallDescr;
 import org.drools.drl.ast.descr.FromDescr;
 import org.drools.drl.ast.descr.FunctionDescr;
 import org.drools.drl.ast.descr.FunctionImportDescr;
@@ -262,6 +263,13 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
         return patternDescr;
     }
 
+    @Override
+    public ForallDescr visitLhsForall(DRLParser.LhsForallContext ctx) {
+        ForallDescr forallDescr = new ForallDescr();
+        visitDescrChildren(ctx).forEach(forallDescr::addDescr);
+        return forallDescr;
+    }
+
     @Override
     public PatternDescr visitLhsAccumulate(DRLParser.LhsAccumulateContext ctx) 
{
         AccumulateDescr accumulateDescr = new AccumulateDescr();
@@ -398,7 +406,7 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
 
     @Override
     public BaseDescr visitLhsUnary(DRLParser.LhsUnaryContext ctx) {
-        return (BaseDescr) visitChildren(ctx);
+        return visitDescrChildren(ctx).get(0);
     }
 
     private void populateStartEnd(BaseDescr descr, ParserRuleContext ctx) {
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 9b3ebc2744..2528dacb5e 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
@@ -2126,7 +2126,6 @@ class MiscDRLParserTest {
         assertThat("Cheese").isEqualTo(cheese3.getObjectType());
     }
 
-    @Disabled("Priority : High | Implement forall")
     @Test
     public void parse_Forall() throws Exception {
         final PackageDescr pkg = parseAndGetPackageDescrFromFile(
@@ -2147,7 +2146,6 @@ class MiscDRLParserTest {
         assertThat(cheese.getObjectType()).isEqualTo("Cheese");
     }
 
-    @Disabled("Priority : High | Implement forall")
     @Test
     public void parse_ForallWithFrom() throws Exception {
         final PackageDescr pkg = parseAndGetPackageDescrFromFile(


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

Reply via email to