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 d80646294f [incubator-kie-drools-5808] [new-parser] Combining 
DRLParser.g4 and DRL6Expressions.g4 (#5845)
d80646294f is described below

commit d80646294fc6a5b4d6281ef484c65747bd6d60ad
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Tue Apr 16 16:13:25 2024 +0900

    [incubator-kie-drools-5808] [new-parser] Combining DRLParser.g4 and 
DRL6Expressions.g4 (#5845)
    
    * WIP: import DRL6Expressions.g4 into DRLParser.g4
    
    - Removed conflicting rules to make the antlr4 goal successful.
    - Java compilation fails because DRL6Expressions's @members section
      injects a DRL6Expression constructor and method overrides into 
DRLParser.java.
    
    * [incubator-kie-drools-5808] [new-parser] Combining DRLParser.g4 and 
DRL6Expressions.g4
    - Modified DRL6Expressions.g4 @members to work with DRLParser
    - Now DRLParser holds ParserHelper
    - Fixed BigDecimal/BigInteger literal issues
    
    * - Reverted some parser rules which are no longer required after 
DRL6Expressions.g4 import
    
    ---------
    
    Co-authored-by: Jiří Locker <[email protected]>
---
 .../drl/parser/antlr4/MiscDRLParserTest.java       |   5 +
 .../drools/drl/parser/antlr4/DRL6Expressions.g4    |  10 +-
 .../org/drools/drl/parser/antlr4/DRLParser.g4      | 147 +--------------------
 .../drools/drl/parser/antlr4/DRLParserHelper.java  |   6 +-
 .../drools/drl/parser/antlr4/DRLVisitorImpl.java   |   6 +-
 .../drl/parser/antlr4/Drl6ExprParserAntlr4.java    |   3 +-
 6 files changed, 25 insertions(+), 152 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 2f98ddea42..14c30ca67c 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
@@ -42,6 +42,7 @@ import org.drools.drl.ast.descr.RuleDescr;
 import org.drools.drl.ast.descr.TypeDeclarationDescr;
 import org.drools.drl.ast.descr.TypeFieldDescr;
 import org.drools.drl.ast.descr.WindowDeclarationDescr;
+import org.drools.drl.parser.impl.Operator;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
@@ -4010,6 +4011,10 @@ class MiscDRLParserTest {
                 "   list.add( \"E\" ); \n" +
                 "   don( $t, E.class ); \n" +
                 "end\n";
+
+        Operator.addOperatorToRegistry("isA", false);
+        Operator.addOperatorToRegistry("isA", true);
+
         PatternDescr pattern = (PatternDescr) 
parseAndGetFirstRuleDescr(source).getLhs().getDescrs().get(0);
         assertThat(pattern.getConstraint().getDescrs())
                 .extracting(Object::toString)
diff --git 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
index 348e8907a1..138f79ede2 100644
--- 
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
+++ 
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL6Expressions.g4
@@ -30,12 +30,7 @@ options {
 @members {
     private ParserHelper helper;
 
-    public DRL6Expressions(TokenStream input,
-                          ParserHelper helper ) {
-        this( input );
-        this.helper = helper;
-    }
-
+    public void setHelper( ParserHelper helper )              { this.helper = 
helper; }
     public ParserHelper getHelper()                           { return helper; 
}
     public boolean hasErrors()                                { return 
helper.hasErrors(); }
     public List<DroolsParserException> getErrors()            { return 
helper.getErrors(); }
@@ -59,7 +54,6 @@ options {
     public void setHasBindings( boolean value ) { this.hasBindings = value; }
     public boolean hasBindings() { return this.hasBindings; }
 
-    @Override
     public final BaseDescr conditionalOrExpressionDescr() throws 
RecognitionException {
         return conditionalOrExpression().result;
     }
@@ -101,8 +95,10 @@ literal
     :  STRING_LITERAL  {       helper.emit($STRING_LITERAL, 
DroolsEditorType.STRING_CONST);    }
     |  DRL_STRING_LITERAL  {   helper.emit($DRL_STRING_LITERAL, 
DroolsEditorType.STRING_CONST);        }
     |  DECIMAL_LITERAL {       helper.emit($DECIMAL_LITERAL, 
DroolsEditorType.NUMERIC_CONST);  }
+    |  DRL_BIG_INTEGER_LITERAL {       helper.emit($DRL_BIG_INTEGER_LITERAL, 
DroolsEditorType.NUMERIC_CONST);  }
     |  HEX_LITERAL     {       helper.emit($HEX_LITERAL, 
DroolsEditorType.NUMERIC_CONST);      }
     |  FLOAT_LITERAL   {       helper.emit($FLOAT_LITERAL, 
DroolsEditorType.NUMERIC_CONST);    }
+    |  DRL_BIG_DECIMAL_LITERAL   {     helper.emit($DRL_BIG_DECIMAL_LITERAL, 
DroolsEditorType.NUMERIC_CONST);  }
     |  BOOL_LITERAL    {       helper.emit($BOOL_LITERAL, 
DroolsEditorType.BOOLEAN_CONST);     }
     |  NULL_LITERAL    {       helper.emit($NULL_LITERAL, 
DroolsEditorType.NULL_CONST);        }
     |   TIME_INTERVAL {        helper.emit($TIME_INTERVAL, 
DroolsEditorType.NULL_CONST); }
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 6afee1260e..0d6c42b8d7 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
@@ -2,7 +2,7 @@ parser grammar DRLParser;
 
 options { tokenVocab=DRLLexer; }
 
-import JavaParser;
+import DRL6Expressions, JavaParser;
 
     /*
      * statement := importStatement
@@ -138,26 +138,6 @@ constraints : constraint (COMMA constraint)* ;
 constraint : ( nestedConstraint | conditionalOrExpression ) ;
 nestedConstraint : ( IDENTIFIER ( DOT | NULL_SAFE_DOT | HASH ) )* IDENTIFIER 
(DOT | NULL_SAFE_DOT ) LPAREN constraints RPAREN ;
 
-// TBD: constraint parsing could be delegated to DRL6ExpressionParser
-conditionalOrExpression : left=conditionalAndExpression (OR 
right=conditionalAndExpression)* ;
-conditionalAndExpression : left=inclusiveOrExpression (AND 
right=inclusiveOrExpression)* ;
-inclusiveOrExpression : left=exclusiveOrExpression (BITOR 
right=exclusiveOrExpression)* ;
-exclusiveOrExpression : left=andExpression (CARET right=andExpression)* ;
-andExpression : left=equalityExpression (BITAND right=equalityExpression)* ;
-equalityExpression : label? left=instanceOfExpression ( ( op=EQUAL | 
op=NOTEQUAL ) right=instanceOfExpression )* ;
-instanceOfExpression : left=inExpression ( 'instanceof' right=type )? ;
-inExpression : left=relationalExpression ( 'not'? 'in' LPAREN drlExpression 
(COMMA drlExpression)* RPAREN )? ;
-relationalExpression : left=drlExpression (right=orRestriction)* ;
-orRestriction : left=andRestriction (OR right=andRestriction)* ;
-andRestriction : left=singleRestriction (AND right=singleRestriction)* ;
-singleRestriction : op=relationalOperator squareArguments? drlExpression ;
-
-// OOPath
-xpathSeparator : DIV | QUESTION_DIV ;
-xpathPrimary : label? xpathChunk+ ;
-xpathChunk : xpathSeparator drlIdentifier (DOT drlIdentifier)* (HASH 
drlIdentifier)? (LBRACK xpathExpressionList RBRACK)? ;
-xpathExpressionList : label? drlExpression (COMMA label? drlExpression)* ;
-
 // named consequence
 
 // consequenceInvocation := conditionalBranch | namedConsequence
@@ -188,8 +168,7 @@ relationalOperator
     | temporalOperator
     ;
 
-// IDENTIFIER is required to accept custom operators.
-drlRelationalOperator : DRL_NOT? (IDENTIFIER | builtInOperator) ;
+drlRelationalOperator : DRL_NOT? builtInOperator ;
 
 /* function := FUNCTION type? ID parameters(typed) chunk_{_} */
 functiondef : DRL_FUNCTION typeTypeOrVoid? IDENTIFIER formalParameters 
drlBlock ;
@@ -200,93 +179,6 @@ drlQualifiedName
     : drlIdentifier (DOT drlIdentifier)*
     ;
 
-/* extending JavaParser identifier */
-drlIdentifier
-    : drlKeywords
-    | IDENTIFIER
-    | MODULE
-    | OPEN
-    | REQUIRES
-    | EXPORTS
-    | OPENS
-    | TO
-    | USES
-    | PROVIDES
-    | WITH
-    | TRANSITIVE
-    | YIELD
-    | SEALED
-    | PERMITS
-    | RECORD
-    | VAR
-    | THIS
-    ;
-
-drlKeywords
-    : builtInOperator
-    | DRL_UNIT
-    | DRL_FUNCTION
-    | DRL_GLOBAL
-    | DRL_DECLARE
-    | DRL_RULE
-    | DRL_QUERY
-    | DRL_WHEN
-    | DRL_THEN
-    | DRL_END
-    | DRL_AND
-    | DRL_OR
-    | DRL_EXISTS
-    | DRL_NOT
-    | DRL_IN
-    | DRL_FROM
-    | DRL_ACCUMULATE
-    | DRL_ACC
-    | DRL_INIT
-    | DRL_ACTION
-    | DRL_REVERSE
-    | DRL_RESULT
-    | DRL_ENTRY_POINT
-    | DRL_EVAL
-    | DRL_SALIENCE
-    | DRL_ENABLED
-    | DRL_NO_LOOP
-    | DRL_AUTO_FOCUS
-    | DRL_LOCK_ON_ACTIVE
-    | DRL_REFRACT
-    | DRL_DIRECT
-    | DRL_AGENDA_GROUP
-    | DRL_ACTIVATION_GROUP
-    | DRL_RULEFLOW_GROUP
-    | DRL_DATE_EFFECTIVE
-    | DRL_DATE_EXPIRES
-    | DRL_DIALECT
-    | DRL_CALENDARS
-    | DRL_TIMER
-    | DRL_DURATION
-    ;
-
-builtInOperator
-    : DRL_CONTAINS
-    | DRL_EXCLUDES
-    | DRL_MATCHES
-    | DRL_MEMBEROF
-    | DRL_SOUNDSLIKE
-    | DRL_AFTER
-    | DRL_BEFORE
-    | DRL_COINCIDES
-    | DRL_DURING
-    | DRL_FINISHED_BY
-    | DRL_FINISHES
-    | DRL_INCLUDES
-    | DRL_MEETS
-    | DRL_MET_BY
-    | DRL_OVERLAPPED_BY
-    | DRL_OVERLAPS
-    | DRL_STARTED_BY
-    | DRL_STARTS
-    | DRL_STR
-    ;
-
 /* extending JavaParser expression */
 drlExpression
     : drlPrimary
@@ -351,16 +243,6 @@ temporalOperator : DRL_NOT? bop=(DRL_AFTER | DRL_BEFORE | 
DRL_COINCIDES | DRL_DU
 
 timeAmount : LBRACK (TIME_INTERVAL | DECIMAL_LITERAL | MUL | SUB MUL) (COMMA 
(TIME_INTERVAL | DECIMAL_LITERAL | MUL | SUB MUL))* RBRACK ;
 
-unaryExpressionNotPlusMinus : (left2=xpathPrimary | left1=drlPrimary) 
(selector)* ;
-
-selector
-    : DOT SUPER superSuffix
-    | DOT NEW (nonWildcardTypeArguments)? innerCreator
-    | (DOT | NULL_SAFE_DOT) drlIdentifier (drlArguments)?
-    | (DOT | NULL_SAFE_DOT) drlMethodCall
-    | LBRACK drlExpression RBRACK
-    ;
-
 /* extending JavaParser primary */
 drlPrimary
     : LPAREN drlExpression RPAREN
@@ -368,7 +250,7 @@ drlPrimary
     | SUPER
     | NEW drlCreator
     | drlLiteral
-    | drlIdentifier drlIdentifierMiddle* identifierSuffix?
+    | drlIdentifier
     | typeTypeOrVoid DOT CLASS
     | nonWildcardTypeArguments (explicitGenericInvocationSuffix | THIS 
arguments)
     | inlineListExpression
@@ -376,17 +258,6 @@ drlPrimary
     | inlineCast
     ;
 
-drlIdentifierMiddle
-    : (DOT | NULL_SAFE_DOT | HASH) drlIdentifier
-    | (DOT | NULL_SAFE_DOT) LPAREN drlExpression (COMMA drlExpression)* RPAREN
-    ;
-
-identifierSuffix
-    : (LBRACK RBRACK)+ DOT CLASS
-    | (LBRACK drlExpression RBRACK)+
-    | arguments
-    ;
-
 inlineCast : drlIdentifier HASH drlIdentifier ;
 
 /* extending JavaParser literal */
@@ -403,16 +274,10 @@ drlLiteral
     | TIME_INTERVAL
     ;
 
-squareArguments : LBRACK expressionList? RBRACK ;
-
 inlineListExpression
     :   LBRACK expressionList? RBRACK
     ;
 
-expressionList
-    :   drlExpression (COMMA drlExpression)*
-    ;
-
 inlineMapExpression
     :  LBRACK mapExpressionList RBRACK
     ;
@@ -446,7 +311,7 @@ patternSource : fromAccumulate
               | fromExpression
               ;
 
-fromExpression : unaryExpressionNotPlusMinus ;
+fromExpression : conditionalOrExpression ;
 
 
 /*
@@ -559,7 +424,7 @@ drlElementValue
     ;
 
 attributes : attribute ( COMMA? attribute )* ;
-attribute : name=( 'salience' | 'enabled' ) conditionalOrExpression 
#expressionAttribute
+attribute : name=( 'salience' | 'enabled' ) conditionalAttributeValue 
#expressionAttribute
           | name=( 'no-loop' | 'auto-focus' | 'lock-on-active' | 'refract' | 
'direct' ) BOOL_LITERAL? #booleanAttribute
           | name=( 'agenda-group' | 'activation-group' | 'ruleflow-group' | 
'date-effective' | 'date-expires' | 'dialect' ) DRL_STRING_LITERAL 
#stringAttribute
           | name='calendars' DRL_STRING_LITERAL ( COMMA DRL_STRING_LITERAL )* 
#stringListAttribute
@@ -567,6 +432,8 @@ attribute : name=( 'salience' | 'enabled' ) 
conditionalOrExpression #expressionA
           | name='duration' ( DECIMAL_LITERAL | TIME_INTERVAL | LPAREN 
TIME_INTERVAL RPAREN ) #durationAttribute
           ;
 
+conditionalAttributeValue : ( LPAREN conditionalExpression RPAREN | 
conditionalExpression ) ;
+
 chunk : .+?;
 
 assignmentOperator : ASSIGN
diff --git 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLParserHelper.java
 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLParserHelper.java
index 3d91f782a4..9c8fef57d0 100644
--- 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLParserHelper.java
+++ 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLParserHelper.java
@@ -32,6 +32,7 @@ import org.antlr.v4.runtime.tree.ErrorNode;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.tree.TerminalNode;
 import org.drools.drl.ast.descr.PackageDescr;
+import org.kie.internal.builder.conf.LanguageLevelOption;
 
 /**
  * Collection of static helper methods for DRLParser
@@ -76,7 +77,10 @@ public class DRLParserHelper {
     private static DRLParser createDrlParser(CharStream charStream) {
         DRLLexer drlLexer = new DRLLexer(charStream);
         CommonTokenStream commonTokenStream = new CommonTokenStream(drlLexer);
-        return new DRLParser(commonTokenStream);
+        DRLParser parser = new DRLParser(commonTokenStream);
+        ParserHelper helper = new ParserHelper(commonTokenStream, 
LanguageLevelOption.DRL6);
+        parser.setHelper(helper);
+        return parser;
     }
 
     /**
diff --git 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
index ba9157897e..526aaddf24 100644
--- 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
+++ 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
@@ -399,7 +399,7 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
         AttributeDescr attributeDescr = BaseDescrFactory.builder(new 
AttributeDescr(ctx.name.getText()))
                 .withParserRuleContext(ctx)
                 .build();
-        
attributeDescr.setValue(getTextPreservingWhitespace(ctx.conditionalOrExpression()));
+        
attributeDescr.setValue(getTextPreservingWhitespace(ctx.conditionalAttributeValue()));
         attributeDescr.setType(AttributeDescr.Type.EXPRESSION);
         return attributeDescr;
     }
@@ -673,8 +673,8 @@ public class DRLVisitorImpl extends 
DRLParserBaseVisitor<Object> {
                 .build();
         behaviorDescr.setType(ctx.DRL_WINDOW().getText());
         behaviorDescr.setSubType(ctx.IDENTIFIER().getText());
-        List<DRLParser.DrlExpressionContext> drlExpressionContexts = 
ctx.expressionList().drlExpression();
-        List<String> parameters = 
drlExpressionContexts.stream().map(Antlr4ParserStringUtils::getTextPreservingWhitespace).collect(Collectors.toList());
+        List<DRLParser.ExpressionContext> expressionContexts = 
ctx.expressionList().expression();
+        List<String> parameters = 
expressionContexts.stream().map(Antlr4ParserStringUtils::getTextPreservingWhitespace).collect(Collectors.toList());
         behaviorDescr.setParameters(parameters);
         return behaviorDescr;
     }
diff --git 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Drl6ExprParserAntlr4.java
 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Drl6ExprParserAntlr4.java
index 4505ca428a..29102a0f7d 100644
--- 
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Drl6ExprParserAntlr4.java
+++ 
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/Drl6ExprParserAntlr4.java
@@ -52,7 +52,8 @@ public class Drl6ExprParserAntlr4 implements DrlExprParser {
             DRLLexer lexer = new DRLLexer(CharStreams.fromString(text));
             CommonTokenStream input = new CommonTokenStream(lexer);
             helper = new ParserHelper(input, languageLevel);
-            DRLExpressions parser = new DRL6Expressions(input, helper);
+            DRL6Expressions parser = new DRL6Expressions(input);
+            parser.setHelper(helper);
             parser.addErrorListener(new BaseErrorListener() {
                 @Override
                 public void syntaxError(Recognizer<?, ?> recognizer, Object 
offendingSymbol, int line, int charPositionInLine, String msg, 
RecognitionException e) {


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

Reply via email to