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


The following commit(s) were added to refs/heads/dev-new-parser by this push:
     new b456e22036 [incubator-kie-drools#5679] New DRL parser : Test failure : 
RHS end without preceding white-space (#5698)
b456e22036 is described below

commit b456e2203627f6b56b7283fe68b05bf98cc1d399
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Wed Feb 21 16:30:56 2024 +0900

    [incubator-kie-drools#5679] New DRL parser : Test failure : RHS end without 
preceding white-space (#5698)
---
 .../drl/parser/antlr4/MiscDRLParserTest.java       | 49 ++++++++++++++++++++++
 .../org/drools/drl/parser/antlr4/DRLLexer.g4       |  7 +++-
 2 files changed, 55 insertions(+), 1 deletion(-)

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 ae45a8cc3e..c40543c485 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
@@ -3440,4 +3440,53 @@ class MiscDRLParserTest {
         RuleDescr ruleDescr = packageDescr.getRules().get(0);
         
assertThat(ruleDescr.getConsequence().toString()).isEqualToIgnoringWhitespace("int
 rule = 10;");
     }
+
+    @Test
+    void semicolonEnd() {
+        final String text = "package org.drools\n" +
+                "rule X\n" +
+                "when\n" +
+                "    $s : String()\n" +
+                "then\n" +
+                "    delete($s);end\n"; // no space after semicolon
+
+        PackageDescr packageDescr = parser.parse(text );
+
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+        
assertThat(ruleDescr.getConsequence().toString()).isEqualToIgnoringWhitespace("delete($s);");
+    }
+
+    @Test
+    void braceEnd() {
+        final String text = "package org.drools\n" +
+                "rule X\n" +
+                "when\n" +
+                "    $p : Person()\n" +
+                "then\n" +
+                "    modify($p) { setAge(2) }end\n"; // no space after right 
brace
+
+        System.out.println(text);
+
+        PackageDescr packageDescr = parser.parse(text );
+
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+        
assertThat(ruleDescr.getConsequence().toString()).isEqualToIgnoringWhitespace("modify($p)
 { setAge(2) }");
+    }
+
+    @Test
+    void parenthesisEnd() {
+        final String text = "package org.drools\n" +
+                "rule X\n" +
+                "when\n" +
+                "    $p : Person()\n" +
+                "then\n" +
+                "    retract($p)end\n"; // no space after right parenthesis
+
+        System.out.println(text);
+
+        PackageDescr packageDescr = parser.parse(text );
+
+        RuleDescr ruleDescr = packageDescr.getRules().get(0);
+        
assertThat(ruleDescr.getConsequence().toString()).isEqualToIgnoringWhitespace("retract($p)");
+    }
 }
diff --git 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
index 8aac81873c..a2ef032823 100644
--- 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
+++ 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRLLexer.g4
@@ -158,4 +158,9 @@ DrlUnicodeEscape
 mode RHS;
 RHS_WS : [ \t\r\n\u000C]+ -> channel(HIDDEN);
 DRL_RHS_END : 'end' [ \t]* SEMI? [ \t]* ('\n' | '\r\n' | EOF) 
{setText("end");} -> popMode;
-RHS_CHUNK : ~[ \t\r\n\u000C]+ ;
+RHS_CHUNK
+    : ~[ ;})\t\r\n\u000C]+ [;})]? // ; } ) could be a delimitter proceding 
'end'
+    | SEMI
+    | RBRACE
+    | RPAREN
+    ;
\ No newline at end of file


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

Reply via email to