[jboss-svn-commits] JBL Code SVN: r9993 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/clp and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Mar 5 20:12:13 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-03-05 20:12:12 -0500 (Mon, 05 Mar 2007)
New Revision: 9993
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/clp/CLP.g
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/clp/ClpParserTest.java
Log:
JBRULES-720 Clips Parser
-'not' and 'exists' now work
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/clp/CLP.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/clp/CLP.g 2007-03-06 00:45:50 UTC (rev 9992)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/clp/CLP.g 2007-03-06 01:12:12 UTC (rev 9993)
@@ -258,8 +258,7 @@
}
:
LEFT_PAREN
- 'and'
- {
+ 'and' {
andDescr = new AndDescr();
in_ce.addDescr( andDescr );
}
@@ -268,30 +267,53 @@
;
or_ce[ConditionalElementDescr in_ce]
- @init
- {
- OrDescr orDescr= null;
-
+ @init {
+ OrDescr orDescr= null;
}
:
LEFT_PAREN
- 'or'
- {
+ 'or' {
orDescr = new OrDescr();
in_ce.addDescr( orDescr );
}
ce[orDescr]*
RIGHT_PAREN
;
+
+not_ce[ConditionalElementDescr in_ce]
+ @init {
+ NotDescr notDescr= null;
+ }
+ :
+ LEFT_PAREN
+ 'not' {
+ notDescr = new NotDescr();
+ in_ce.addDescr( notDescr );
+ }
+ ce[notDescr]?
+ RIGHT_PAREN
+ ;
+
+exists_ce[ConditionalElementDescr in_ce]
+ @init {
+ ExistsDescr existsDescr= null;
+ }
+ :
+ LEFT_PAREN
+ 'not' {
+ existsDescr = new ExistsDescr();
+ in_ce.addDescr( existsDescr );
+ }
+ ce[existsDescr]?
+ RIGHT_PAREN
+ ;
normal_pattern[ConditionalElementDescr in_ce]
- @init
- {
+ @init {
ColumnDescr column = null;
}
: LEFT_PAREN
- name=ID
- {
+ name=ID {
column = new ColumnDescr(name.getText());
in_ce.addDescr( column );
}
@@ -302,20 +324,17 @@
bound_pattern[ConditionalElementDescr in_ce]
- @init
- {
+ @init {
ColumnDescr column = null;
String identifier = null;
}
:
- var=VAR
- {
+ var=VAR {
identifier = var.getText();
}
'<-'
LEFT_PAREN
- name=ID
- {
+ name=ID {
column = new ColumnDescr(name.getText());
column.setIdentifier( identifier );
in_ce.addDescr( column );
@@ -332,8 +351,7 @@
String op = "==";
}
: LEFT_PAREN
- f=ID
- {
+ f=ID {
fc = new FieldConstraintDescr(f.getText());
fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
@@ -351,15 +369,8 @@
connective [FieldConstraintDescr fc]
:
- ( '&'
- {
- fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));
- }
- |
- '|'
- {
- fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));
- }
+ ( '&' { fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND)); }
+ | '|' {fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR)); }
)
;
@@ -369,28 +380,20 @@
}
:
('~'{op = "!=";})?
- (
- predicate_constraint[op, column]
- |
- return_value_restriction[op, fc]
- |
- variable_restriction[op, fc]
- |
- lc=literal_restriction
- {
- fc.addRestriction( new LiteralRestrictionDescr(op, lc, true) );
- op = "==";
- }
+ ( predicate_constraint[op, column]
+ | return_value_restriction[op, fc]
+ | variable_restriction[op, fc]
+ | lc=literal_restriction {
+ fc.addRestriction( new LiteralRestrictionDescr(op, lc, true) );
+ op = "==";
+ }
)
;
predicate_constraint[String op, ColumnDescr column]
:
':'LEFT_PAREN
- id=ID
- {
- column.addDescr( new PredicateDescr( id.getText() ) );
- }
+ id=ID { column.addDescr( new PredicateDescr( id.getText() ) ); }
RIGHT_PAREN
;
@@ -402,10 +405,7 @@
}
:
'='LEFT_PAREN
- id=ID
- {
- fc.addRestriction( new ReturnValueRestrictionDescr(op, id.getText() ) );
- }
+ id=ID{ fc.addRestriction( new ReturnValueRestrictionDescr(op, id.getText() ) ); }
RIGHT_PAREN
;
@@ -422,12 +422,12 @@
@init {
text = null;
}
- : ( t=STRING { text = getString( t ); }
- | t=ID { text = t.getText(); }
- | t=INT { text = t.getText(); }
- | t=FLOAT { text = t.getText(); }
- | t=BOOL { text = t.getText(); }
- | t=NULL { text = null; }
+ : ( t=STRING { text = getString( t ); }
+ | t=ID { text = t.getText(); }
+ | t=INT { text = t.getText(); }
+ | t=FLOAT { text = t.getText(); }
+ | t=BOOL { text = t.getText(); }
+ | t=NULL { text = null; }
)
;
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/clp/ClpParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/clp/ClpParserTest.java 2007-03-06 00:45:50 UTC (rev 9992)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/clp/ClpParserTest.java 2007-03-06 01:12:12 UTC (rev 9993)
@@ -16,8 +16,10 @@
import org.drools.lang.DRLParser;
import org.drools.lang.descr.AndDescr;
import org.drools.lang.descr.ColumnDescr;
+import org.drools.lang.descr.ExistsDescr;
import org.drools.lang.descr.FieldConstraintDescr;
import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.NotDescr;
import org.drools.lang.descr.OrDescr;
import org.drools.lang.descr.PredicateDescr;
import org.drools.lang.descr.RestrictionConnectiveDescr;
@@ -26,144 +28,251 @@
import org.drools.lang.descr.VariableRestrictionDescr;
public class ClpParserTest extends TestCase {
-
+
private CLPParser parser;
-
+
public void testRule() throws Exception {
- RuleDescr rule = parse("(defrule xxx ?b <- (person (name \"yyy\"&?bf|~\"zzz\"|~=(ppp)&:(ooo)) ) ?c <- (hobby (type ?bf2&~iii) (rating fivestar) )").rule();
-
- assertEquals( "xxx", rule.getName() );
-
+ RuleDescr rule = parse( "(defrule xxx ?b <- (person (name \"yyy\"&?bf|~\"zzz\"|~=(ppp)&:(ooo)) ) ?c <- (hobby (type ?bf2&~iii) (rating fivestar) )" ).rule();
+
+ assertEquals( "xxx",
+ rule.getName() );
+
AndDescr lhs = rule.getLhs();
List lhsList = lhs.getDescrs();
- assertEquals(2, lhsList.size());
-
+ assertEquals( 2,
+ lhsList.size() );
+
// Parse the first column
- ColumnDescr col = ( ColumnDescr ) lhsList.get( 0 );
- assertEquals("?b", col.getIdentifier() );
- assertEquals("person", col.getObjectType() );
-
+ ColumnDescr col = (ColumnDescr) lhsList.get( 0 );
+ assertEquals( "?b",
+ col.getIdentifier() );
+ assertEquals( "person",
+ col.getObjectType() );
+
List colList = col.getDescrs();
- assertEquals(2, colList.size());
- FieldConstraintDescr fieldConstraintDescr = ( FieldConstraintDescr ) colList.get( 0 );
+ assertEquals( 2,
+ colList.size() );
+ FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) colList.get( 0 );
List restrictionList = fieldConstraintDescr.getRestrictions();
-
- assertEquals("name", fieldConstraintDescr.getFieldName() );
+
+ assertEquals( "name",
+ fieldConstraintDescr.getFieldName() );
// @todo the 7th one has no constraint, as its a predicate, have to figure out how to handle this
- assertEquals(8, restrictionList.size());
-
-
- LiteralRestrictionDescr litDescr = ( LiteralRestrictionDescr ) restrictionList.get( 0 );
- assertEquals("==", litDescr.getEvaluator() );
- assertEquals("yyy", litDescr.getText() );
+ assertEquals( 8,
+ restrictionList.size() );
- RestrictionConnectiveDescr connDescr = ( RestrictionConnectiveDescr ) restrictionList.get( 1 );
- assertEquals(RestrictionConnectiveDescr.AND, connDescr.getConnective() );
-
- VariableRestrictionDescr varDescr = ( VariableRestrictionDescr ) restrictionList.get( 2 );
- assertEquals("==", varDescr.getEvaluator() );
- assertEquals("?bf", varDescr.getIdentifier() );
-
- connDescr = ( RestrictionConnectiveDescr ) restrictionList.get( 3 );
- assertEquals(RestrictionConnectiveDescr.OR, connDescr.getConnective() );
-
- litDescr = ( LiteralRestrictionDescr ) restrictionList.get( 4 );
- assertEquals("!=", litDescr.getEvaluator() );
- assertEquals("zzz", litDescr.getText() );
-
- connDescr = ( RestrictionConnectiveDescr ) restrictionList.get( 5 );
- assertEquals(RestrictionConnectiveDescr.OR, connDescr.getConnective() );
-
- ReturnValueRestrictionDescr retDescr = ( ReturnValueRestrictionDescr ) restrictionList.get( 6 );
- assertEquals("!=", retDescr.getEvaluator() );
- assertEquals("ppp", retDescr.getText() );
-
- PredicateDescr predicateDescr = ( PredicateDescr ) colList.get( 1 );
- assertEquals( "ooo", predicateDescr.getText() );
-
-
+ LiteralRestrictionDescr litDescr = (LiteralRestrictionDescr) restrictionList.get( 0 );
+ assertEquals( "==",
+ litDescr.getEvaluator() );
+ assertEquals( "yyy",
+ litDescr.getText() );
+
+ RestrictionConnectiveDescr connDescr = (RestrictionConnectiveDescr) restrictionList.get( 1 );
+ assertEquals( RestrictionConnectiveDescr.AND,
+ connDescr.getConnective() );
+
+ VariableRestrictionDescr varDescr = (VariableRestrictionDescr) restrictionList.get( 2 );
+ assertEquals( "==",
+ varDescr.getEvaluator() );
+ assertEquals( "?bf",
+ varDescr.getIdentifier() );
+
+ connDescr = (RestrictionConnectiveDescr) restrictionList.get( 3 );
+ assertEquals( RestrictionConnectiveDescr.OR,
+ connDescr.getConnective() );
+
+ litDescr = (LiteralRestrictionDescr) restrictionList.get( 4 );
+ assertEquals( "!=",
+ litDescr.getEvaluator() );
+ assertEquals( "zzz",
+ litDescr.getText() );
+
+ connDescr = (RestrictionConnectiveDescr) restrictionList.get( 5 );
+ assertEquals( RestrictionConnectiveDescr.OR,
+ connDescr.getConnective() );
+
+ ReturnValueRestrictionDescr retDescr = (ReturnValueRestrictionDescr) restrictionList.get( 6 );
+ assertEquals( "!=",
+ retDescr.getEvaluator() );
+ assertEquals( "ppp",
+ retDescr.getText() );
+
+ PredicateDescr predicateDescr = (PredicateDescr) colList.get( 1 );
+ assertEquals( "ooo",
+ predicateDescr.getText() );
+
// Parse the second column
- col = ( ColumnDescr ) lhsList.get( 1 );
- assertEquals("?c", col.getIdentifier() );
- assertEquals("hobby", col.getObjectType() );
+ col = (ColumnDescr) lhsList.get( 1 );
+ assertEquals( "?c",
+ col.getIdentifier() );
+ assertEquals( "hobby",
+ col.getObjectType() );
colList = col.getDescrs();
- assertEquals(2, colList.size());
- fieldConstraintDescr = ( FieldConstraintDescr ) colList.get( 0 );
+ assertEquals( 2,
+ colList.size() );
+ fieldConstraintDescr = (FieldConstraintDescr) colList.get( 0 );
restrictionList = fieldConstraintDescr.getRestrictions();
-
- assertEquals("type", fieldConstraintDescr.getFieldName() );
-
- varDescr = ( VariableRestrictionDescr ) restrictionList.get( 0 );
- assertEquals("==", varDescr.getEvaluator() );
- assertEquals("?bf2", varDescr.getIdentifier() );
-
- connDescr = ( RestrictionConnectiveDescr ) restrictionList.get( 1 );
- assertEquals(RestrictionConnectiveDescr.AND, connDescr.getConnective() );
-
- litDescr = ( LiteralRestrictionDescr ) restrictionList.get( 2 );
- assertEquals("!=", litDescr.getEvaluator() );
- assertEquals("iii", litDescr.getText() );
-
- fieldConstraintDescr = ( FieldConstraintDescr ) colList.get( 1 );
- restrictionList = fieldConstraintDescr.getRestrictions();
-
- assertEquals("rating", fieldConstraintDescr.getFieldName() );
-
- litDescr = ( LiteralRestrictionDescr ) restrictionList.get( 0 );
- assertEquals("==", litDescr.getEvaluator() );
- assertEquals("fivestar", litDescr.getText() );
+
+ assertEquals( "type",
+ fieldConstraintDescr.getFieldName() );
+
+ varDescr = (VariableRestrictionDescr) restrictionList.get( 0 );
+ assertEquals( "==",
+ varDescr.getEvaluator() );
+ assertEquals( "?bf2",
+ varDescr.getIdentifier() );
+
+ connDescr = (RestrictionConnectiveDescr) restrictionList.get( 1 );
+ assertEquals( RestrictionConnectiveDescr.AND,
+ connDescr.getConnective() );
+
+ litDescr = (LiteralRestrictionDescr) restrictionList.get( 2 );
+ assertEquals( "!=",
+ litDescr.getEvaluator() );
+ assertEquals( "iii",
+ litDescr.getText() );
+
+ fieldConstraintDescr = (FieldConstraintDescr) colList.get( 1 );
+ restrictionList = fieldConstraintDescr.getRestrictions();
+
+ assertEquals( "rating",
+ fieldConstraintDescr.getFieldName() );
+
+ litDescr = (LiteralRestrictionDescr) restrictionList.get( 0 );
+ assertEquals( "==",
+ litDescr.getEvaluator() );
+ assertEquals( "fivestar",
+ litDescr.getText() );
}
-
+
public void testNestedCERule() throws Exception {
- RuleDescr rule = parse("(defrule xxx ?b <- (person (name yyy)) (or (and (hobby1 (type qqq1)) (hobby2 (type ~qqq2))) (food (veg ~shroom) ) ) )").rule();
-
- assertEquals( "xxx", rule.getName() );
-
+ RuleDescr rule = parse( "(defrule xxx ?b <- (person (name yyy)) (or (and (hobby1 (type qqq1)) (hobby2 (type ~qqq2))) (food (veg ~shroom) ) ) )" ).rule();
+
+ assertEquals( "xxx",
+ rule.getName() );
+
AndDescr lhs = rule.getLhs();
List lhsList = lhs.getDescrs();
- assertEquals(2, lhsList.size());
-
+ assertEquals( 2,
+ lhsList.size() );
+
// Parse the first column
- ColumnDescr col = ( ColumnDescr ) lhsList.get( 0 );
- assertEquals("?b", col.getIdentifier() );
- assertEquals("person", col.getObjectType() );
- FieldConstraintDescr fieldConstraintDescr = ( FieldConstraintDescr ) col.getDescrs().get( 0 );
- assertEquals("name", fieldConstraintDescr.getFieldName() ); //
- LiteralRestrictionDescr litDescr = ( LiteralRestrictionDescr ) fieldConstraintDescr.getRestrictions().get( 0 );
- assertEquals("==", litDescr.getEvaluator() );
- assertEquals("yyy", litDescr.getText() );
+ ColumnDescr col = (ColumnDescr) lhsList.get( 0 );
+ assertEquals( "?b",
+ col.getIdentifier() );
+ assertEquals( "person",
+ col.getObjectType() );
+ FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+ assertEquals( "name",
+ fieldConstraintDescr.getFieldName() ); //
+ LiteralRestrictionDescr litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "==",
+ litDescr.getEvaluator() );
+ assertEquals( "yyy",
+ litDescr.getText() );
+
+ OrDescr orDescr = (OrDescr) lhsList.get( 1 );
+ assertEquals( 2,
+ orDescr.getDescrs().size() );
+
+ AndDescr andDescr = (AndDescr) orDescr.getDescrs().get( 0 );
+ col = (ColumnDescr) andDescr.getDescrs().get( 0 );
+ assertEquals( "hobby1",
+ col.getObjectType() );
+ fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+ assertEquals( "type",
+ fieldConstraintDescr.getFieldName() ); //
+ litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "==",
+ litDescr.getEvaluator() );
+ assertEquals( "qqq1",
+ litDescr.getText() );
+
+ col = (ColumnDescr) andDescr.getDescrs().get( 1 );
+ assertEquals( "hobby2",
+ col.getObjectType() );
+ fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+ assertEquals( "type",
+ fieldConstraintDescr.getFieldName() ); //
+ litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "!=",
+ litDescr.getEvaluator() );
+ assertEquals( "qqq2",
+ litDescr.getText() );
+
+ col = (ColumnDescr) orDescr.getDescrs().get( 1 );
+ assertEquals( "food",
+ col.getObjectType() );
+ fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+ assertEquals( "veg",
+ fieldConstraintDescr.getFieldName() ); //
+ litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "!=",
+ litDescr.getEvaluator() );
+ assertEquals( "shroom",
+ litDescr.getText() );
+ }
+
+ public void testNotExistsRule() throws Exception {
+ RuleDescr rule = parse( "(defrule (or (hobby1 (type qqq1)) (not (and (exists (person (name ppp))) (person (name yyy))))))" ).rule();
+
+ assertEquals( "xxx",
+ rule.getName() );
+
+ AndDescr lhs = rule.getLhs();
+ List lhsList = lhs.getDescrs();
+ assertEquals( 1,
+ lhsList.size() );
+
+ OrDescr orDescr = (OrDescr) lhsList.get( 1 );
+ assertEquals( 2,
+ orDescr.getDescrs().size() );
+
+ ColumnDescr col = (ColumnDescr) orDescr.getDescrs().get( 0 );
+ assertEquals( "hobby1",
+ col.getObjectType() );
+ FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+ assertEquals( "type",
+ fieldConstraintDescr.getFieldName() ); //
+ LiteralRestrictionDescr litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "==",
+ litDescr.getEvaluator() );
+ assertEquals( "qqq1",
+ litDescr.getText() );
+
+ NotDescr notDescr = (NotDescr) orDescr.getDescrs().get( 1 );
+ assertEquals( 1,
+ notDescr.getDescrs().size() );
- OrDescr orDescr = ( OrDescr ) lhsList.get( 1 );
- assertEquals( 2, orDescr.getDescrs().size() );
+ AndDescr andDescr = (AndDescr) notDescr.getDescrs().get( 0 );
+ assertEquals( 2, andDescr.getDescrs().size() );
+ ExistsDescr existsDescr = (ExistsDescr) andDescr.getDescrs().get( 0 );
+ col = (ColumnDescr) existsDescr.getDescrs().get( 0 );
+ assertEquals( "person",
+ col.getObjectType() );
+ fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+ assertEquals( "name",
+ fieldConstraintDescr.getFieldName() ); //
+ litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "==",
+ litDescr.getEvaluator() );
+ assertEquals( "ppp",
+ litDescr.getText() );
- AndDescr andDescr = ( AndDescr ) orDescr.getDescrs().get( 0 );
- col = ( ColumnDescr ) andDescr.getDescrs().get( 0 );
- assertEquals("hobby1", col.getObjectType() );
- fieldConstraintDescr = ( FieldConstraintDescr ) col.getDescrs().get( 0 );
- assertEquals("type", fieldConstraintDescr.getFieldName() ); //
- litDescr = ( LiteralRestrictionDescr ) fieldConstraintDescr.getRestrictions().get( 0 );
- assertEquals("==", litDescr.getEvaluator() );
- assertEquals("qqq1", litDescr.getText() );
-
- col = ( ColumnDescr ) andDescr.getDescrs().get( 1 );
- assertEquals("hobby2", col.getObjectType() );
- fieldConstraintDescr = ( FieldConstraintDescr ) col.getDescrs().get( 0 );
- assertEquals("type", fieldConstraintDescr.getFieldName() ); //
- litDescr = ( LiteralRestrictionDescr ) fieldConstraintDescr.getRestrictions().get( 0 );
- assertEquals("!=", litDescr.getEvaluator() );
- assertEquals("qqq2", litDescr.getText() );
-
-
- col = ( ColumnDescr ) orDescr.getDescrs().get( 1 );
- assertEquals("food", col.getObjectType() );
- fieldConstraintDescr = ( FieldConstraintDescr ) col.getDescrs().get( 0 );
- assertEquals("veg", fieldConstraintDescr.getFieldName() ); //
- litDescr = ( LiteralRestrictionDescr ) fieldConstraintDescr.getRestrictions().get( 0 );
- assertEquals("!=", litDescr.getEvaluator() );
- assertEquals("shroom", litDescr.getText() );
+ col = (ColumnDescr) andDescr.getDescrs().get( 0 );
+ assertEquals( "person",
+ col.getObjectType() );
+ fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+ assertEquals( "name",
+ fieldConstraintDescr.getFieldName() ); //
+ litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+ assertEquals( "==",
+ litDescr.getEvaluator() );
+ assertEquals( "yyy",
+ litDescr.getText() );
}
-
+
private CLPParser parse(final String text) throws Exception {
this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
return this.parser;
More information about the jboss-svn-commits
mailing list