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]
