[jboss-svn-commits] JBL Code SVN: r8533 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/lang main/java/org/drools/lang/descr main/resources/org/drools/lang test/java/org/drools/integrationtests test/java/org/drools/lang test/resources/org/drools/integrationtests test/resources/org/drools/lang
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Dec 21 18:37:14 EST 2006
Author: tirelli
Date: 2006-12-21 18:36:56 -0500 (Thu, 21 Dec 2006)
New Revision: 8533
Added:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedConditionalElements.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/nested_conditional_elements.drl
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Log:
JBRULES-218: parser now supports nested elements. Unit test added
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java 2006-12-21 23:36:56 UTC (rev 8533)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b5 D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g 2006-12-19 22:28:01
+// $ANTLR 3.0b5 D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g 2006-12-21 21:35:24
package org.drools.lang;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java 2006-12-21 23:36:56 UTC (rev 8533)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b5 D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g 2006-12-19 22:28:00
+// $ANTLR 3.0b5 D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g 2006-12-21 21:35:24
package org.drools.lang;
import java.util.List;
@@ -4363,7 +4363,7 @@
// $ANTLR start lhs_exist
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1254:1: lhs_exist returns [BaseDescr d] : loc= 'exists' ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column ) ;
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1254:1: lhs_exist returns [BaseDescr d] : loc= 'exists' ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column ) ;
public BaseDescr lhs_exist() throws RecognitionException {
BaseDescr d = null;
@@ -4375,12 +4375,12 @@
d = null;
try {
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:4: (loc= 'exists' ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column ) )
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:4: loc= 'exists' ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column )
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:4: (loc= 'exists' ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column ) )
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:4: loc= 'exists' ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column )
{
loc=(Token)input.LT(1);
match(input,70,FOLLOW_70_in_lhs_exist3127); if (failed) return d;
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:17: ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column )
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:17: ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column )
int alt46=2;
int LA46_0 = input.LA(1);
if ( (LA46_0==LEFT_PAREN) ) {
@@ -4392,17 +4392,17 @@
else {
if (backtracking>0) {failed=true; return d;}
NoViableAltException nvae =
- new NoViableAltException("1258:17: ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column )", 46, 0, input);
+ new NoViableAltException("1258:17: ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column )", 46, 0, input);
throw nvae;
}
switch (alt46) {
case 1 :
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:18: ( '(' lhs_column ')' )=> '(' column= lhs_column ')'
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:18: ( '(' lhs_or ')' )=> '(' column= lhs_or ')'
{
match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist3130); if (failed) return d;
- pushFollow(FOLLOW_lhs_column_in_lhs_exist3134);
- column=lhs_column();
+ pushFollow(FOLLOW_lhs_or_in_lhs_exist3134);
+ column=lhs_or();
_fsp--;
if (failed) return d;
match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist3136); if (failed) return d;
@@ -4410,7 +4410,7 @@
}
break;
case 2 :
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:46: column= lhs_column
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1258:42: column= lhs_column
{
pushFollow(FOLLOW_lhs_column_in_lhs_exist3142);
column=lhs_column();
@@ -4444,7 +4444,7 @@
// $ANTLR start lhs_not
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1265:1: lhs_not returns [NotDescr d] : loc= 'not' ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column ) ;
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1265:1: lhs_not returns [NotDescr d] : loc= 'not' ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column ) ;
public NotDescr lhs_not() throws RecognitionException {
NotDescr d = null;
@@ -4456,12 +4456,12 @@
d = null;
try {
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:4: (loc= 'not' ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column ) )
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:4: loc= 'not' ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column )
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:4: (loc= 'not' ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column ) )
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:4: loc= 'not' ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column )
{
loc=(Token)input.LT(1);
match(input,71,FOLLOW_71_in_lhs_not3172); if (failed) return d;
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:14: ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column )
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:14: ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column )
int alt47=2;
int LA47_0 = input.LA(1);
if ( (LA47_0==LEFT_PAREN) ) {
@@ -4473,17 +4473,17 @@
else {
if (backtracking>0) {failed=true; return d;}
NoViableAltException nvae =
- new NoViableAltException("1269:14: ( ( '(' lhs_column ')' )=> '(' column= lhs_column ')' | column= lhs_column )", 47, 0, input);
+ new NoViableAltException("1269:14: ( ( '(' lhs_or ')' )=> '(' column= lhs_or ')' | column= lhs_column )", 47, 0, input);
throw nvae;
}
switch (alt47) {
case 1 :
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:15: ( '(' lhs_column ')' )=> '(' column= lhs_column ')'
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:15: ( '(' lhs_or ')' )=> '(' column= lhs_or ')'
{
match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not3175); if (failed) return d;
- pushFollow(FOLLOW_lhs_column_in_lhs_not3179);
- column=lhs_column();
+ pushFollow(FOLLOW_lhs_or_in_lhs_not3179);
+ column=lhs_or();
_fsp--;
if (failed) return d;
match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not3182); if (failed) return d;
@@ -4491,7 +4491,7 @@
}
break;
case 2 :
- // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:44: column= lhs_column
+ // D:\\workspace\\jboss\\jbossrules\\drools-compiler\\src\\main\\resources\\org\\drools\\lang\\DRL.g:1269:40: column= lhs_column
{
pushFollow(FOLLOW_lhs_column_in_lhs_not3188);
column=lhs_column();
@@ -4505,7 +4505,7 @@
if ( backtracking==0 ) {
- d = new NotDescr( (ColumnDescr) column );
+ d = new NotDescr( column );
d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
}
@@ -5355,13 +5355,13 @@
public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary3093 = new BitSet(new long[]{0x0000000020000002L});
public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary3103 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_70_in_lhs_exist3127 = new BitSet(new long[]{0x0000000000000810L});
- public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist3130 = new BitSet(new long[]{0x0000000000000010L});
- public static final BitSet FOLLOW_lhs_column_in_lhs_exist3134 = new BitSet(new long[]{0x0000000000001000L});
+ public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist3130 = new BitSet(new long[]{0x0000000000000810L,0x00000000000001C0L});
+ public static final BitSet FOLLOW_lhs_or_in_lhs_exist3134 = new BitSet(new long[]{0x0000000000001000L});
public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist3136 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_lhs_column_in_lhs_exist3142 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_71_in_lhs_not3172 = new BitSet(new long[]{0x0000000000000810L});
- public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not3175 = new BitSet(new long[]{0x0000000000000010L});
- public static final BitSet FOLLOW_lhs_column_in_lhs_not3179 = new BitSet(new long[]{0x0000000000001000L});
+ public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not3175 = new BitSet(new long[]{0x0000000000000810L,0x00000000000001C0L});
+ public static final BitSet FOLLOW_lhs_or_in_lhs_not3179 = new BitSet(new long[]{0x0000000000001000L});
public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not3182 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_lhs_column_in_lhs_not3188 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_72_in_lhs_eval3216 = new BitSet(new long[]{0x0000000000000800L});
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java 2006-12-21 23:36:56 UTC (rev 8533)
@@ -32,8 +32,8 @@
public ExistsDescr() {
}
- public ExistsDescr(final ColumnDescr column) {
- addDescr( column );
+ public ExistsDescr(final BaseDescr baseDescr) {
+ addDescr( baseDescr );
}
public void addDescr(final BaseDescr baseDescr) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java 2006-12-21 23:36:56 UTC (rev 8533)
@@ -32,8 +32,8 @@
public NotDescr() {
}
- public NotDescr(final ColumnDescr column) {
- addDescr( column );
+ public NotDescr(final BaseDescr descr) {
+ addDescr( descr );
}
public void addDescr(final BaseDescr baseDescr) {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2006-12-21 23:36:56 UTC (rev 8533)
@@ -1255,7 +1255,7 @@
@init {
d = null;
}
- : loc='exists' ('(' column=lhs_column ')' | column=lhs_column)
+ : loc='exists' ('(' column=lhs_or ')' | column=lhs_column)
{
d = new ExistsDescr( (ColumnDescr) column );
d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
@@ -1266,9 +1266,9 @@
@init {
d = null;
}
- : loc='not' ('(' column=lhs_column ')' | column=lhs_column)
+ : loc='not' ('(' column=lhs_or ')' | column=lhs_column)
{
- d = new NotDescr( (ColumnDescr) column );
+ d = new NotDescr( column );
d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
}
;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java 2006-12-21 23:36:56 UTC (rev 8533)
@@ -3648,4 +3648,39 @@
Assert.fail("Should have thrown an InvalidRulePackage Exception instead of "+e.getMessage());
}
}
+
+ public void testNestedConditionalElements() throws Exception {
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NestedConditionalElements.drl" ) ) );
+ final Package pkg = builder.getPackage();
+
+ final RuleBase ruleBase = getRuleBase();
+ ruleBase.addPackage( pkg );
+ final WorkingMemory workingMemory = ruleBase.newWorkingMemory();
+
+ final List list = new ArrayList();
+ workingMemory.setGlobal( "results",
+ list );
+
+ State state = new State("SP");
+ workingMemory.assertObject( state );
+
+ Person bob = new Person( "Bob" );
+ bob.setStatus( state.getState() );
+ bob.setLikes( "stilton" );
+ workingMemory.assertObject( bob );
+
+ workingMemory.fireAllRules();
+
+ assertEquals( 0,
+ list.size() );
+
+ workingMemory.assertObject( new Cheese( bob.getLikes(), 10 ) );
+ workingMemory.fireAllRules();
+
+ assertEquals( 1,
+ list.size() );
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java 2006-12-21 23:36:56 UTC (rev 8533)
@@ -2410,6 +2410,36 @@
assertFalse( this.parser.getErrorMessages().toString(), this.parser.hasErrors() );
}
+ public void testNestedCEs() throws Exception {
+ final RuleDescr rule = parseResource( "nested_conditional_elements.drl" ).rule();
+
+ assertFalse( this.parser.getErrorMessages().toString(), this.parser.hasErrors() );
+
+ assertNotNull( rule );
+
+ AndDescr root = rule.getLhs();
+ NotDescr not1 = (NotDescr) root.getDescrs().get( 0 );
+ AndDescr and1 = (AndDescr) not1.getDescrs().get( 0 );
+
+ ColumnDescr state = (ColumnDescr) and1.getDescrs().get( 0 );
+ NotDescr not2 = (NotDescr) and1.getDescrs().get( 1 );
+ AndDescr and2 = (AndDescr) not2.getDescrs().get( 0 );
+ ColumnDescr person = (ColumnDescr) and2.getDescrs().get( 0 );
+ ColumnDescr cheese = (ColumnDescr) and2.getDescrs().get( 1 );
+
+ ColumnDescr person2 = (ColumnDescr) root.getDescrs().get( 1 );
+ OrDescr or = (OrDescr) root.getDescrs().get( 2 );
+ ColumnDescr cheese2 = (ColumnDescr) or.getDescrs().get( 0 );
+ ColumnDescr cheese3 = (ColumnDescr) or.getDescrs().get( 1 );
+
+ assertEquals( state.getObjectType(), "State" );
+ assertEquals( person.getObjectType(), "Person" );
+ assertEquals( cheese.getObjectType(), "Cheese" );
+ assertEquals( person2.getObjectType(), "Person" );
+ assertEquals( cheese2.getObjectType(), "Cheese" );
+ assertEquals( cheese3.getObjectType(), "Cheese" );
+ }
+
private DRLParser parse(final String text) throws Exception {
this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
return this.parser;
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedConditionalElements.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedConditionalElements.drl 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedConditionalElements.drl 2006-12-21 23:36:56 UTC (rev 8533)
@@ -0,0 +1,12 @@
+package org.drools;
+
+global java.util.List results
+
+rule "test nested CEs"
+ when
+ not ( State( $state : state ) and
+ not( Person( status == $state, $likes : likes ) and
+ Cheese( type == $likes ) ) )
+ then
+ results.add("OK");
+end
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_NestedConditionalElements.drl
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:eol-style
+ native
Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/nested_conditional_elements.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/nested_conditional_elements.drl 2006-12-21 23:28:57 UTC (rev 8532)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/nested_conditional_elements.drl 2006-12-21 23:36:56 UTC (rev 8533)
@@ -0,0 +1,10 @@
+rule "test nested CEs"
+ when
+ not ( State( $state : state ) and
+ not( Person( status == $state, $likes : likes ) and
+ Cheese( type == $likes ) ) )
+ Person( name == "Bob" )
+ ( Cheese( price == 10 ) or Cheese( type == "brie" ) )
+ then
+ results.add("OK");
+end
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/nested_conditional_elements.drl
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list