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

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


The following commit(s) were added to refs/heads/dev-new-parser by this push:
     new 9dc78129f4 [incubator-kie-drools-5724] [new-parser] Broken 
ExisistentialTest#tes… (#5871)
9dc78129f4 is described below

commit 9dc78129f4af059d774e34d3702499a9499d8926
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Tue Apr 30 17:13:21 2024 +0900

    [incubator-kie-drools-5724] [new-parser] Broken ExisistentialTest#tes… 
(#5871)
    
    * [incubator-kie-drools-5724] [new-parser] Broken 
ExisistentialTest#test2NotsWithAnd
    
    * - Addtional test for LPAREN lhsExpression RPAREN 
namedConsequenceInvocation?
---
 .../drl/parser/antlr4/MiscDRLParserTest.java       | 92 ++++++++++++++++++++++
 .../org/drools/drl/parser/antlr4/DRLParser.g4      | 17 ++--
 2 files changed, 97 insertions(+), 12 deletions(-)

diff --git 
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
 
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
index d400c7b00f..f44b6b5abd 100644
--- 
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
+++ 
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
@@ -4387,6 +4387,34 @@ class MiscDRLParserTest {
         
assertThat(namedConsequenceDescr.getName()).isEqualTo("FoundMarkOrMario");
     }
 
+    @Test
+    void namedConsequenceOrWithBindVariables() {
+        final String text =
+                "rule R when\n" +
+                        "  $r : Result()\n" +
+                        "  ( $p1 : Person(name == \"Mark\") or $p1 : 
Person(name == \"Mario\") )\n" +
+                        "  do[FoundMarkOrMario]\n" +
+                        "  $p2 : Person(name != \"Mark\", age > $p1.age)\n" +
+                        "then\n" +
+                        "  $r.addValue($p2.getName() + \" is older than \" + 
$p1.getName());\n" +
+                        "then[FoundMark]\n" +
+                        "  $r.addValue(\"Found \" + $p1.getName());\n" +
+                        "end";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+
+        OrDescr orDescr = (OrDescr) ruleDescr.getLhs().getDescrs().get(1);
+        PatternDescr patternDescr1 = (PatternDescr) orDescr.getDescrs().get(0);
+        assertThat(patternDescr1.getIdentifier()).isEqualTo("$p1");
+        
assertThat(((ExprConstraintDescr)patternDescr1.getConstraint().getDescrs().get(0)).getExpression()).isEqualTo("name
 == \"Mark\"");
+        PatternDescr patternDescr2 = (PatternDescr) orDescr.getDescrs().get(1);
+        assertThat(patternDescr2.getIdentifier()).isEqualTo("$p1");
+        
assertThat(((ExprConstraintDescr)patternDescr2.getConstraint().getDescrs().get(0)).getExpression()).isEqualTo("name
 == \"Mario\"");
+
+        NamedConsequenceDescr namedConsequenceDescr = (NamedConsequenceDescr) 
ruleDescr.getLhs().getDescrs().get(2);
+        
assertThat(namedConsequenceDescr.getName()).isEqualTo("FoundMarkOrMario");
+    }
+
     @Test
     public void queryComplexLhs() {
         final String text = "query isContainedIn(String x, String y)\n" +
@@ -4463,6 +4491,70 @@ class MiscDRLParserTest {
                 });
     }
 
+    @Test
+    void notWithPrefixAnd() {
+        final String text =
+                "package org.drools.compiler\n" +
+                        "rule R when\n" +
+                        "  (not (and Integer( $i : intValue )\n" +
+                        "            String( length > $i ) \n" +
+                        "       )\n" +
+                        "  )\n" +
+                        "then\n" +
+                        "end";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+        
assertThat(ruleDescr.getLhs().getDescrs().get(0)).isInstanceOfSatisfying(NotDescr.class,
 notDescr -> {
+            
assertThat(notDescr.getDescrs().get(0)).isInstanceOfSatisfying(AndDescr.class, 
andDescr -> {
+                assertThat(andDescr.getDescrs()).hasSize(2);
+                
assertThat(andDescr.getDescrs().get(0)).isInstanceOfSatisfying(PatternDescr.class,
 patternDescr -> {
+                    
assertThat(patternDescr.getObjectType()).isEqualTo("Integer");
+                    
assertThat(patternDescr.getConstraint().getDescrs().get(0)).isInstanceOfSatisfying(ExprConstraintDescr.class,
 exprConstraintDescr -> {
+                        
assertThat(exprConstraintDescr.getExpression()).isEqualTo("$i : intValue");
+                    });
+                });
+                
assertThat(andDescr.getDescrs().get(1)).isInstanceOfSatisfying(PatternDescr.class,
 patternDescr -> {
+                    
assertThat(patternDescr.getObjectType()).isEqualTo("String");
+                    
assertThat(patternDescr.getConstraint().getDescrs().get(0)).isInstanceOfSatisfying(ExprConstraintDescr.class,
 exprConstraintDescr -> {
+                        
assertThat(exprConstraintDescr.getExpression()).isEqualTo("length > $i");
+                    });
+                });
+            });
+        });
+    }
+
+    @Test
+    void existsWithPrefixAnd() {
+        final String text =
+                "package org.drools.compiler\n" +
+                        "rule R when\n" +
+                        "  (exists (and Integer( $i : intValue )\n" +
+                        "            String( length > $i ) \n" +
+                        "       )\n" +
+                        "  )\n" +
+                        "then\n" +
+                        "end";
+        PackageDescr packageDescr = parseAndGetPackageDescr(text);
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+        
assertThat(ruleDescr.getLhs().getDescrs().get(0)).isInstanceOfSatisfying(ExistsDescr.class,
 existsDescr -> {
+            
assertThat(existsDescr.getDescrs().get(0)).isInstanceOfSatisfying(AndDescr.class,
 andDescr -> {
+                assertThat(andDescr.getDescrs()).hasSize(2);
+                
assertThat(andDescr.getDescrs().get(0)).isInstanceOfSatisfying(PatternDescr.class,
 patternDescr -> {
+                    
assertThat(patternDescr.getObjectType()).isEqualTo("Integer");
+                    
assertThat(patternDescr.getConstraint().getDescrs().get(0)).isInstanceOfSatisfying(ExprConstraintDescr.class,
 exprConstraintDescr -> {
+                        
assertThat(exprConstraintDescr.getExpression()).isEqualTo("$i : intValue");
+                    });
+                });
+                
assertThat(andDescr.getDescrs().get(1)).isInstanceOfSatisfying(PatternDescr.class,
 patternDescr -> {
+                    
assertThat(patternDescr.getObjectType()).isEqualTo("String");
+                    
assertThat(patternDescr.getConstraint().getDescrs().get(0)).isInstanceOfSatisfying(ExprConstraintDescr.class,
 exprConstraintDescr -> {
+                        
assertThat(exprConstraintDescr.getExpression()).isEqualTo("length > $i");
+                    });
+                });
+            });
+        });
+    }
+
     @Test
     public void enumDeclaration() {
         final String text =
diff --git 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
index b173157c93..03d6b20ced 100644
--- 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
+++ 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLParser.g4
@@ -103,7 +103,7 @@ lhs : DRL_WHEN lhsExpression* ;
 
 queryLhs : lhsExpression+ ;
 
-lhsExpression : LPAREN lhsExpression RPAREN namedConsequenceInvocation? 
#lhsExpressionEnclosed
+lhsExpression : LPAREN lhsExpression RPAREN                             
#lhsExpressionEnclosed
               | lhsUnary                                                
#lhsUnarySingle
               | LPAREN DRL_AND lhsExpression+ RPAREN                    #lhsAnd
               | lhsExpression (DRL_AND lhsExpression)+                  #lhsAnd
@@ -123,7 +123,7 @@ lhsUnary : ( lhsExists namedConsequence?
            | lhsEval consequenceInvocation*
            | lhsForall
            | lhsAccumulate
-           | LPAREN lhsOr RPAREN namedConsequence? // this part is handled by 
#lhsExpressionEnclosed
+           | LPAREN lhsOr RPAREN namedConsequence?
            | lhsPatternBind consequenceInvocation*
            ) SEMI? ;
 */
@@ -135,6 +135,7 @@ lhsUnary : (
            | lhsForall
            | lhsAccumulate
            | lhsGroupBy
+           | LPAREN lhsExpression RPAREN namedConsequenceInvocation?
            | conditionalBranch // not in the above old parser definition, but 
actually implemented in the old parser
            | lhsPatternBind consequenceInvocation*
            ) SEMI? ;
@@ -369,11 +370,7 @@ fromWindow : DRL_WINDOW IDENTIFIER ;
            )
 */
 // Use lhsExpression instead of lhsOr because lhsExpression has good enough 
structure
-lhsExists : DRL_EXISTS
-          ( LPAREN lhsExpression RPAREN
-          | lhsPatternBind
-          )
-          ;
+lhsExists : DRL_EXISTS ( lhsPatternBind | lhsExpression ) ;
 
 /*
  lhsNot := NOT
@@ -383,11 +380,7 @@ lhsExists : DRL_EXISTS
            )
 */
 // Use lhsExpression instead of lhsOr because lhsExpression has good enough 
structure
-lhsNot : DRL_NOT
-         ( LPAREN lhsExpression RPAREN
-         | lhsPatternBind
-         )
-         ;
+lhsNot : DRL_NOT ( lhsPatternBind | lhsExpression ) ;
 
 /**
  * lhsEval := EVAL LEFT_PAREN conditionalExpression RIGHT_PAREN


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

Reply via email to