Skip to content

Commit

Permalink
[DROOLS-7591] Experiment branch : migrate a new drools-lsp parser int… (
Browse files Browse the repository at this point in the history
apache#5682)

* add antlr4 based drl parser

* bump to drools 8.16.0.Beta

* improve node position discovery

* first c3 integration

* Module reorganization (#2)

* WIP

* Ignore directories

* Add debug. Minor modifications

* WIP

* Fix tests - add comments

* manage null ast nodes and fix failing test

* improve drl parser

* Fix basic completion (#4)

* Add Java grammar, fix DRL grammar, simplify token index calculation, remove template code

* Add ignored tokens to completion

Co-authored-by: livio <[email protected]>

* add constraints parsing

* - Added DRLParserWrapper to store errors using DRLErrorListener (#5)

- Added MiscDRLParserTest which is being ported from RuleParserTest to enhance coverage.

* Enhance test/grammar coverage. function import, global, exists, not (#6)

* Enhance test/grammar coverage. and, or, listExpression (#7)

* Enhance test/grammar coverage. matches, single quoted string, escape (#9)

- Introduced drlExpression, drlPrimary, drlLiteral, DRL_STRING_LITERAL

* Enhance test/grammar coverage. dialect, invalid lhs (#10)

* Enhance test/grammar coverage. keyword collision (#11)

- Add "DRL_" prefix for DRL keywords for clarification

* Enhance test/grammar coverage. function, attributes, consequence (#12)

* Enhance test/grammar coverage. function, attributes, consequence
- better getText preserving whitespaces
- resolving WARNs because of overlapping keywords

* - No need to declare duplicate keywords

* Enhance test/grammar coverage. OR, inline map (#13)

* OpenRewrite applied for junit5 and assertj (#14)

* Enhance test/grammar coverage. label, consequenceLocation, test refac… (#15)

* Enhance test/grammar coverage. label, consequenceLocation, test refactoring, assertj best practice

* - better test method names

* [DROOLS-7253] Review and improve drools-lsp parser Visitor design (#16)

* [DROOLS-7253] Review and improve drools-lsp parser Visitor design
- Remove currentConstructStack. Utilize return object instead.

* - Remove instance fields. Utilize return objects instead.

* [DROOLS-7270] Enhance test/grammar coverage : andRestriction, orRestriction (#4)

- Removed some unused cast

* [DROOLS-7271] Fully port RuleParserTest as MiscDRLParserTest with @disabled and priority comment (#10)

* [DROOLS-7285] Failed to parse and/or with parentheses in LHS (#15)

* [DROOLS-7286] Failed to parse binding with || (#21)

* [DROOLS-7287] Failed to parse comments in RHS (#23)

* [DROOLS-7287] Failed to parse comments in RHS

* - add rhs string check

* [DROOLS-7515] Parser : Accept plain text in RHS (#26)

* [DROOLS-7515] Parser : Accept plain text in RHS

* - Handle keyword token in RHS

* - Removed sysout

* - Revert statementKeywords. Instead, define DRL_END with newline or EOF

* - fix method name

* [DROOLS-7288] Failed to parse complex parentheses (#27)

* [DROOLS-7288] Failed to parse complex parentheses
- bump to 8.43.0.Final

* additional tests

* [DROOLS-7289] Implement accumulate (#28)

* [DROOLS-7296] Implement from entry-point (#30)

* [DROOLS-7297] Implement import accumulate (#29)

* [DROOLS-7290] Implement BigInteger literal, BigDecimal literal (#31)

* [DROOLS-7292] Implement eval (#32)

* [DROOLS-7293] Implement extends (#33)

* [DROOLS-7294] Implement forall (#34)

* [DROOLS-7298] Implement memberOf (#35)

* [DROOLS-7300] Implement positional constraint (#36)

* [DROOLS-7304] Implement temporal operators (#38)

- Also covers [DROOLS-7303] Implement sliding window

* [DROOLS-7301] Implement query (#37)

- Also partially fixes [DROOLS-7302] Implement semicolon delimiter

* [DROOLS-7295] Implement from collect (#39)

* [DROOLS-7305] Implement type declaration (#40)

- also covers [DROOLS-7291] Implement entry-point declaration
- also covers window declaration

* [DROOLS-7306] Implement unification (#41)

* [DROOLS-7306] Implement unification
- Also [DROOLS-7307] Parse attribute agenda-group

* [DROOLS-7308] Parse attribute without value
- Also [DROOLS-7309] Parse attribute with parentheses

* [DROOLS-7310] parse nested parentheses (#42)

* [DROOLS-7310] parse nested parentheses

* - Adding code commentes and explanations
- Adding more nested level tests

* [DROOLS-7577] drools-lsp : Add comments and explanations for drools-p… (#43)

* [DROOLS-7577] drools-lsp : Add comments and explanations for drools-parser

* removed syntax examples

* [DROOLS-7591] Experiment branch : migrate a new drools-lsp parser into drools (#44)

- Add some methods to call from drools code base

* Move necessary files without any additional modifications

* Update DRL6Expressions.g4 to ANTLR 4 (#47)

* Add DescrDumperTest and fix the expression parser grammar (#48)

* Add DescrDumperTest

* Fix it

* [DROOLS-7591] Experiment branch : migrate a new drools-lsp parser into drools
- New parser is migrated in drools-drl/drools-drl-parser with org.drools.drl10.parser package
- To enable the new parser, run `mvn test -PDRL10`
- At the moment, we get lots of test failures especially in drools-model/drools-model-codegen and drools-test-coverage/test-compiler-integration

* - License header
- Revert an inappropriate test edit
- Removed unnecessary profile
- Clarify unsupported methods
- Removed unnecessary bom dependency

---------

Co-authored-by: mariofusco <[email protected]>
Co-authored-by: Gabriele Cardosi <[email protected]>
Co-authored-by: Livio Benčik <[email protected]>
Co-authored-by: livio <[email protected]>
Co-authored-by: Jiří Locker <[email protected]>
  • Loading branch information
6 people authored and rgdoliveira committed Oct 24, 2024
1 parent 00576e5 commit d577bd6
Show file tree
Hide file tree
Showing 131 changed files with 11,957 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@ public KnowledgeBuilderRulesConfigurationImpl(CompositeConfiguration<KnowledgeBu
}

private void init() {

setProperty( TrimCellsInDTableOption.PROPERTY_NAME,
getPropertyValue(TrimCellsInDTableOption.PROPERTY_NAME,
"true"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.drools.drl.ast.descr.OperatorDescr;
import org.drools.drl.ast.descr.RelationalExprDescr;
import org.drools.drl.parser.DrlExprParser;
import org.drools.drl.parser.DrlExprParserFactory;
import org.drools.drl.parser.impl.Operator;
import org.kie.internal.builder.conf.LanguageLevelOption;

Expand Down Expand Up @@ -137,7 +138,7 @@ public StringBuilder dump( StringBuilder sbuilder,
}

private void processConstraint(StringBuilder sbuilder, ExprConstraintDescr base, boolean isInsideRelCons, DumperContext context) {
DrlExprParser expr = new DrlExprParser( context.getRuleContext().getConfiguration().getOption(LanguageLevelOption.KEY));
DrlExprParser expr = DrlExprParserFactory.getDrlExrParser(context.getRuleContext().getConfiguration().getOption(LanguageLevelOption.KEY));
ConstraintConnectiveDescr result = expr.parse( base.getExpression() );
if ( result.getDescrs().size() == 1 ) {
dump( sbuilder,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
import org.drools.drl.ast.descr.ReturnValueRestrictionDescr;
import org.drools.drl.ast.descr.RuleDescr;
import org.drools.drl.parser.DrlExprParser;
import org.drools.drl.parser.DrlExprParserFactory;
import org.drools.drl.parser.DroolsParserException;
import org.drools.util.ClassUtils;
import org.drools.util.StringUtils;
Expand Down Expand Up @@ -1803,7 +1804,7 @@ protected ConstraintConnectiveDescr parseExpression(final RuleBuildContext conte
final PatternDescr patternDescr,
final BaseDescr original,
final String expression) {
DrlExprParser parser = new DrlExprParser(context.getConfiguration().getOption(LanguageLevelOption.KEY));
DrlExprParser parser = DrlExprParserFactory.getDrlExrParser(context.getConfiguration().getOption(LanguageLevelOption.KEY));
ConstraintConnectiveDescr result = parser.parse(normalizeEval(expression));
result.setResource(patternDescr.getResource());
result.copyLocation(original);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import org.drools.drl.ast.descr.ExprConstraintDescr;
import org.drools.drl.ast.descr.PatternDescr;
import org.drools.drl.parser.DrlExprParser;
import org.drools.drl.parser.DrlExprParserFactory;
import org.drools.drl.parser.DroolsParserException;
import org.drools.util.ClassUtils;
import org.drools.util.StringUtils;
Expand Down Expand Up @@ -264,7 +265,7 @@ private void processBinding( RuleBuildContext context,
} else {
// it must be a literal/expression
// it's an expression and thus an input
DrlExprParser parser = new DrlExprParser( context.getConfiguration().getOption(LanguageLevelOption.KEY));
DrlExprParser parser = DrlExprParserFactory.getDrlExrParser(context.getConfiguration().getOption(LanguageLevelOption.KEY));
ConstraintConnectiveDescr bresult = parser.parse( bind.getExpression() );
if ( parser.hasErrors() ) {
for ( DroolsParserException error : parser.getErrors() ) {
Expand Down Expand Up @@ -395,7 +396,7 @@ private static int getPos( String identifier,
private ConstraintConnectiveDescr parseExpression( final RuleBuildContext context,
final PatternDescr patternDescr,
final String expression ) {
DrlExprParser parser = new DrlExprParser( context.getConfiguration().getOption(LanguageLevelOption.KEY));
DrlExprParser parser = DrlExprParserFactory.getDrlExrParser( context.getConfiguration().getOption(LanguageLevelOption.KEY));
ConstraintConnectiveDescr result = parser.parse( expression );
if ( result == null || parser.hasErrors() ) {
for ( DroolsParserException error : parser.getErrors() ) {
Expand Down
81 changes: 81 additions & 0 deletions drools-drl/drools-drl-parser-tests/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.drools</groupId>
<artifactId>drools-drl</artifactId>
<version>999-SNAPSHOT</version>
</parent>

<groupId>org.drools</groupId>
<artifactId>drools-drl-parser-tests</artifactId>

<name>Drools :: DRL :: Parser :: Tests</name>

<properties>
<java.module.name>org.drools.drl.parser.tests</java.module.name>
</properties>

<dependencies>
<!-- Tests -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-drl-parser</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-mvel</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

</project>
Loading

0 comments on commit d577bd6

Please sign in to comment.