[jboss-svn-commits] JBL Code SVN: r33525 - in labs/jbossrules/branches/DRLv6: src/main/java/org/drools/lang and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jun 16 12:02:56 EDT 2010
Author: dsotty
Date: 2010-06-16 12:02:54 -0400 (Wed, 16 Jun 2010)
New Revision: 33525
Added:
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DLDescrFactory.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_AndDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_BaseDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_CompositeDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ExistsDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ForallDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ImpliesDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_LeafDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_NegDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_OrDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_PropertyDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_RootNode.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_TypeDescr.java
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/DRLTreeFormatter.java
labs/jbossrules/branches/DRLv6/src/main/resources/DLTreeBuilder.g
Modified:
labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt
labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java
labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g
labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g
labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/Rule_Test.java
labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java
Log:
Modified: labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt
===================================================================
--- labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt 2010-06-16 15:45:15 UTC (rev 33524)
+++ labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt 2010-06-16 16:02:54 UTC (rev 33525)
@@ -26,7 +26,7 @@
(VT_IMPORT_ID org klass
)
)
- (declare Klass
+ (VT_TYPE_DECLARE Klass
)
(rule "ruel"
(when VT_AND_IMPLICIT
@@ -63,7 +63,7 @@
package_statement
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
package simplePack
>> OUTPUT :
@@ -76,7 +76,7 @@
global
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
global int N
>> OUTPUT :
@@ -146,7 +146,7 @@
data_type
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
int[][][]
>> OUTPUT :
@@ -157,7 +157,7 @@
import_statement
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
import jav.lang.String
>> OUTPUT :
@@ -183,7 +183,7 @@
import_statement
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
import jav.pack.*
>> OUTPUT :
@@ -228,7 +228,7 @@
function
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
function process( int x, org.String zz ) { ... ... }
>> OUTPUT :
@@ -274,23 +274,20 @@
>>>> RESULT : SUCCESS
>> TIME to parse 1
>> SOURCE :
-declare Student
+declare Student extends Person
@role(entity)
@namespace(myNS="http:\\www.stix.com\domain\subd#")
- @subclass(Person)
age : int
name : String
end
>> OUTPUT :
- (declare Student
+ (VT_TYPE_DECLARE Student extends Person
(VT_ATTRIBUTES
(role entity
)
(namespace myNS "http:\\www.stix.com\domain\subd#"
- )
- (subclass Person
)
)
(VT_FIELD age
@@ -308,10 +305,9 @@
>>>> RESULT : SUCCESS
>> TIME to parse 1
>> SOURCE :
-declare HasFriend
+declare HasFriend extends Knows
@role(property)
@namespace(myNS="http:\\www.somens.com\arg\test#")
- at subproperty(Knows)
@disjoint(HasEnemy)
@symmetric
subject : Person
@@ -320,14 +316,12 @@
>> OUTPUT :
- (declare HasFriend
+ (VT_TYPE_DECLARE HasFriend extends Knows
(VT_ATTRIBUTES
(role property
)
(namespace myNS "http:\\www.somens.com\arg\test#"
)
- (subproperty Knows
- )
(disjoint HasEnemy
) symmetric
)
@@ -344,7 +338,7 @@
type_declaration
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 2
+>> TIME to parse 1
>> SOURCE :
declare HasSpouse
@role(property)
@@ -358,7 +352,7 @@
>> OUTPUT :
- (declare HasSpouse
+ (VT_TYPE_DECLARE HasSpouse
(VT_ATTRIBUTES
(role property
)
@@ -443,30 +437,8 @@
type_declare_attribute
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
->> SOURCE :
- at subclass(Type)
->> OUTPUT :
-
- (subclass Type
- )
-**************************************
-type_declare_attribute
-**************************************
->>>> RESULT : SUCCESS
>> TIME to parse 0
>> SOURCE :
- at subproperty(SomeProperty)
->> OUTPUT :
-
- (subproperty SomeProperty
- )
-**************************************
-type_declare_attribute
-**************************************
->>>> RESULT : SUCCESS
->> TIME to parse 0
->> SOURCE :
@disjoint(AnotherType)
>> OUTPUT :
@@ -524,7 +496,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
rule "ruleName" extends "anotherRule"
salience 100
@@ -684,7 +656,7 @@
rule_attribute
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
dialect "java"
>> OUTPUT :
@@ -717,7 +689,7 @@
rule_attribute
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
deductive
>> OUTPUT :
@@ -770,7 +742,7 @@
operator_attributes
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 3
+>> TIME to parse 1
>> SOURCE :
@[
kind="lukasiewicz",
@@ -803,7 +775,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 3
+>> TIME to parse 1
>> SOURCE :
rule test when Bus() Car() Taxi()then end
>> OUTPUT :
@@ -900,7 +872,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
rule test when $p : Person() xor Dog()then end
>> OUTPUT :
@@ -927,7 +899,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
rule test when (Person() xor Dog()) equiv Cat()then end
>> OUTPUT :
@@ -1073,7 +1045,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
rule "r" when $lab : Person()then end
>> OUTPUT :
@@ -1121,7 +1093,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
rule "r" when exists @[crisp] ( $p : Person() and $d : Dog() ) then end
>> OUTPUT :
@@ -1156,7 +1128,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
rule "r" when $p : exists Person() then end
>> OUTPUT :
@@ -1285,7 +1257,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
rule "r" when forall ( $p : Person() (Person() Dog()) ) then end
>> OUTPUT :
@@ -1380,7 +1352,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 0
+>> TIME to parse 1
>> SOURCE :
rule "r" when Person() @[crisp]then end
>> OUTPUT :
@@ -1401,7 +1373,7 @@
rule
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 2
+>> TIME to parse 3
>> SOURCE :
rule "r" when Person( "john" , 18, height > 150) then end
>> OUTPUT :
@@ -1473,7 +1445,7 @@
literal_object
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
new Thing(13, $var, true)
>> OUTPUT :
@@ -1488,7 +1460,7 @@
literal_object
**************************************
>>>> RESULT : SUCCESS
->> TIME to parse 1
+>> TIME to parse 0
>> SOURCE :
new Obj(12 - 13*($var*2 + sqrt(4)))
>> OUTPUT :
@@ -1511,3 +1483,47 @@
)
)
)
+**************************************
+type_declaration
+**************************************
+>>>> RESULT : SUCCESS
+>> TIME to parse 1
+>> SOURCE :
+declare Student
+ defined Male() and Human() and (Slave() or worksAt some (School() or Prison()))
+ age : int
+ name : String
+ end
+
+>> OUTPUT :
+
+ (VT_TYPE_DECLARE Student
+ (VT_DL_DEFINITION
+ (VT_AND
+ (VT_DL_TYPE Male
+ )
+ (VT_DL_TYPE Human
+ )
+ (VT_OR
+ (VT_DL_TYPE Slave
+ )
+ (some worksAt
+ (VT_OR
+ (VT_DL_TYPE School
+ )
+ (VT_DL_TYPE Prison
+ )
+ )
+ )
+ )
+ )
+ )
+ (VT_FIELD age
+ (VT_DATA_TYPE 0 int
+ )
+ )
+ (VT_FIELD name
+ (VT_DATA_TYPE 0 String
+ )
+ )
+ )
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DLDescrFactory.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DLDescrFactory.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DLDescrFactory.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,115 @@
+package org.drools.lang.dl.descr;
+
+import java.util.List;
+
+public class DLDescrFactory {
+
+ private static int N = 0;
+
+ public static DL_BaseDescr createImplies(List<DL_BaseDescr> children) {
+ DL_CompositeDescr impl = new DL_ImpliesDescr();
+ impl.addChildren(children);
+ impl.setId(nextId());
+ return impl;
+ }
+
+ public static DL_BaseDescr createAnd(List<DL_BaseDescr> children) {
+ DL_CompositeDescr et = new DL_AndDescr();
+ et.addChildren(children);
+ et.setId(nextId());
+ return et;
+ }
+
+ public static DL_BaseDescr createOr(List<DL_BaseDescr> children) {
+ DL_CompositeDescr vel = new DL_OrDescr();
+ vel.addChildren(children);
+ vel.setId(nextId());
+ return vel;
+ }
+
+ public static DL_BaseDescr createNeg(DL_BaseDescr child) {
+// DL_CompositeDescr neg = new DL_NegDescr();
+// if (child instanceof DL_NegDescr) {
+// return ((DL_NegDescr) child).getChildren().get(0);
+// } else if (child instanceof DL_ExistsDescr) {
+// DL_ExistsDescr ext = (DL_ExistsDescr) child;
+// ext.setNegated(! ext.isNegated());
+// return ext;
+// } else if (child instanceof DL_ForallDescr) {
+// DL_ForallDescr fal = (DL_ForallDescr) child;
+// fal.setNegated(! fal.isNegated());
+// return fal;
+// } else {
+// neg.addChild(child);
+// neg.setId(nextId());
+// return neg;
+// }
+
+ if (child instanceof DL_NegDescr) {
+ return ((DL_NegDescr) child).getChildren().get(0);
+ } else {
+ child.setNegated(! child.isNegated());
+ return child;
+ }
+ }
+
+
+ public static DL_BaseDescr createType(String klass) {
+ DL_TypeDescr type = new DL_TypeDescr();
+ type.setType(klass);
+ type.setId(nextId());
+ return type;
+ }
+
+
+ public static DL_BaseDescr createProperty(String klass) {
+ DL_PropertyDescr prop = new DL_PropertyDescr();
+ prop.setType(klass);
+ prop.setId(nextId());
+ return prop;
+ }
+
+
+ public static DL_BaseDescr createExists(DL_BaseDescr prop, DL_BaseDescr klass) {
+ DL_CompositeDescr exist = new DL_ExistsDescr();
+ exist.addChild(prop);
+ exist.addChild(klass);
+ exist.setId(nextId());
+ return exist;
+ }
+
+
+ public static DL_BaseDescr createForall(DL_BaseDescr prop, DL_BaseDescr klass) {
+ DL_CompositeDescr foral = new DL_ForallDescr();
+ foral.addChild(prop);
+ foral.addChild(klass);
+ foral.setId(nextId());
+ return foral;
+ }
+
+
+ public static DL_BaseDescr buildRootType(String klass, DL_BaseDescr def) {
+ DL_RootNode root = new DL_RootNode();
+ root.setType(klass);
+ root.addChild(def);
+ root.setId(nextId());
+ return root;
+ }
+
+
+ public static DL_TypeDescr buildRandomTypeDescr() {
+ int id = nextId();
+ String type = "klass_"+id;
+ DL_TypeDescr td = new DL_TypeDescr();
+ td.setType(type);
+ td.setId(id);
+ return td;
+ }
+
+ public static int nextId() {
+ return N++;
+ }
+
+
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_AndDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_AndDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_AndDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,13 @@
+package org.drools.lang.dl.descr;
+
+
+public class DL_AndDescr extends DL_CompositeDescr {
+
+ @Override
+ public String getType() {
+ return (isNegated() ? "not" : "") + "DL_AND";
+ }
+
+
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_BaseDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_BaseDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_BaseDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,112 @@
+package org.drools.lang.dl.descr;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed 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.
+ */
+
+
+public abstract class DL_BaseDescr {
+
+ private static final long serialVersionUID = 400L;
+ private int id;
+ private DL_CompositeDescr father;
+ private boolean negated = false;
+// private int level = 0;
+
+
+
+
+
+ public String toUpwardString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(this.toString());
+ sb.append(" | son-of " +
+ ((father == null) ? "null" : father.toUpwardString())
+ );
+ return sb.toString();
+ }
+
+ public String toDownwardString() {
+ return toString();
+ }
+
+ public String toFullDownwardString(int n) {
+ return toString();
+ }
+
+ public String toString() {
+ //return "DL["+id+"]: " + this.getClass().getSimpleName() +"\n";
+ return "DL["+id+"]: " + this.getType() +"\n";
+ }
+
+
+
+ public void setFather(DL_CompositeDescr father) {
+ this.father = father;
+ }
+
+ public DL_CompositeDescr getFather() {
+ return father;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + id;
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DL_BaseDescr other = (DL_BaseDescr) obj;
+ if (id != other.id)
+ return false;
+ return true;
+ }
+
+ public abstract String getType();
+
+// public void setLevel(int level) {
+// this.level = level;
+// }
+
+ public int getLevel() {
+ return (father == null) ? 0 : (1+father.getLevel());
+ }
+
+ public void setNegated(boolean negated) {
+ this.negated = negated;
+ }
+
+ public boolean isNegated() {
+ return negated;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_CompositeDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_CompositeDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_CompositeDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,76 @@
+package org.drools.lang.dl.descr;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+public abstract class DL_CompositeDescr extends DL_BaseDescr {
+
+ private List<DL_BaseDescr> children = new LinkedList<DL_BaseDescr>();
+
+
+ public void addChild(DL_BaseDescr child) {
+ children.add(child);
+ child.setFather(this);
+ //child.setLevel(getLevel()+1);
+ //this.setLevel(child.getLevel()+1);
+ }
+
+ public void addChildren(Collection<DL_BaseDescr> childs) {
+ for (DL_BaseDescr child : childs)
+ this.addChild(child);
+ }
+
+ public List<String> getChildTypes() {
+ List<String> ans = new LinkedList<String>();
+ for (DL_BaseDescr child : children) {
+ ans.add(child.getType());
+ }
+ return ans;
+ }
+
+ public List<DL_BaseDescr> getChildren() {
+ return children;
+ }
+
+ public List<DL_BaseDescr> getChildrenReversed() {
+ List<DL_BaseDescr> rev = new LinkedList<DL_BaseDescr>();
+ for (int j = children.size()-1; j >= 0; j--) {
+ rev.add(children.get(j));
+ }
+ return rev;
+ }
+
+ public void removeChild(DL_BaseDescr child) {
+ children.remove(child);
+ }
+
+ public void replaceChild(DL_BaseDescr oldChild, DL_BaseDescr newChild) {
+ int idx = children.indexOf(oldChild);
+ children.set(idx, newChild);
+ newChild.setFather(this);
+ oldChild.setFather(null);
+ }
+
+
+
+ public String toDownwardString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(super.toString());
+ for (DL_BaseDescr child : children)
+ sb.append("\t"+child.toString());
+ return sb.toString();
+ }
+
+ public String toFullDownwardString(int n) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(this.toString());
+ for (DL_BaseDescr child : children) {
+ for (int j = 0; j < n; j++)
+ sb.append("\t");
+ sb.append(child.toFullDownwardString(n+1));
+ }
+ return sb.toString();
+ }
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ExistsDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ExistsDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ExistsDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,16 @@
+package org.drools.lang.dl.descr;
+
+
+
+public class DL_ExistsDescr extends DL_CompositeDescr {
+
+
+
+ @Override
+ public String getType() {
+ return (isNegated() ? "not" : "") + "DL_EXISTS";
+ }
+
+
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ForallDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ForallDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ForallDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,18 @@
+package org.drools.lang.dl.descr;
+
+
+
+public class DL_ForallDescr extends DL_CompositeDescr {
+
+ private boolean negated = false;
+
+
+ @Override
+ public String getType() {
+ return (isNegated() ? "not" : "") + "DL_FORALL";
+ }
+
+
+
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ImpliesDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ImpliesDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_ImpliesDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,24 @@
+package org.drools.lang.dl.descr;
+
+import java.util.Collection;
+
+
+
+public class DL_ImpliesDescr extends DL_CompositeDescr {
+
+ public void addChild(DL_BaseDescr child) {
+ if (getChildren().size() < 2)
+ super.addChild(child);
+ }
+
+ public void addChildren(Collection<DL_BaseDescr> childs) {
+ if (getChildren().size()+childs.size() <= 2)
+ super.addChildren(childs);
+ }
+
+ @Override
+ public String getType() {
+ return (isNegated() ? "not" : "") + "DL_IMPLIES";
+ }
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_LeafDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_LeafDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_LeafDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,5 @@
+package org.drools.lang.dl.descr;
+
+public abstract class DL_LeafDescr extends DL_BaseDescr {
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_NegDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_NegDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_NegDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,23 @@
+package org.drools.lang.dl.descr;
+
+import java.util.Collection;
+
+
+public class DL_NegDescr extends DL_CompositeDescr {
+
+ public void addChild(DL_BaseDescr child) {
+ if (getChildren().size() == 0)
+ super.addChild(child);
+ }
+
+ public void addChildren(Collection<DL_BaseDescr> childs) {
+ if (getChildren().size() == 0 && childs.size() == 1)
+ super.addChildren(childs);
+ }
+
+ @Override
+ public String getType() {
+ return "DL_NOT";
+ }
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_OrDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_OrDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_OrDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,12 @@
+package org.drools.lang.dl.descr;
+
+
+
+public class DL_OrDescr extends DL_CompositeDescr {
+
+
+ @Override
+ public String getType() {
+ return (isNegated() ? "not" : "") + "DL_OR";
+ }
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_PropertyDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_PropertyDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_PropertyDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,23 @@
+package org.drools.lang.dl.descr;
+
+
+
+public class DL_PropertyDescr extends DL_LeafDescr {
+
+ private String type;
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String toString() {
+ return "Property >>> " + (isNegated() ? "not" : "") + type;
+ }
+
+
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_RootNode.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_RootNode.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_RootNode.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,36 @@
+package org.drools.lang.dl.descr;
+
+import java.util.Collection;
+
+public class DL_RootNode extends DL_CompositeDescr {
+
+ private String type;
+
+ public void addChild(DL_BaseDescr child) {
+ if (getChildren().size() == 0)
+ super.addChild(child);
+ }
+
+ public void addChildren(Collection<DL_BaseDescr> childs) {
+ if (getChildren().size() == 0 && childs.size() == 1)
+ super.addChildren(childs);
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(super.toString());
+ sb.append(" >>> ("+type+")\n");
+ return sb.toString();
+ }
+
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_TypeDescr.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_TypeDescr.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/dl/descr/DL_TypeDescr.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,25 @@
+package org.drools.lang.dl.descr;
+
+
+
+public class DL_TypeDescr extends DL_LeafDescr {
+
+ private String type;
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("DL["+getId()+"]: Type >> " + (isNegated() ? "not " : "") + getType() +"\n");
+ return sb.toString();
+ }
+
+
+}
Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/DRLTreeFormatter.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/DRLTreeFormatter.java (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/DRLTreeFormatter.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,37 @@
+package org.drools.util;
+
+import org.antlr.runtime.tree.CommonTree;
+
+public class DRLTreeFormatter {
+
+ public static String toIndentedStringTree(CommonTree tree) {
+ String ts = new String(tree.toStringTree());
+
+ //ts = ts.substring(0, ts.indexOf("then"));
+ StringBuilder sb = new StringBuilder();
+ int dep = 0;
+ for (int j = 0; j < ts.length(); j++) {
+ if (ts.charAt(j) == '(') {
+ dep++;
+
+ sb.append("\n");
+ for (int k = 0; k < dep; k++)
+ sb.append("\t");
+ sb.append(ts.charAt(j));
+
+ } else
+ if (ts.charAt(j) == ')') {
+ sb.append("\n");
+ for (int k = 0; k < dep; k++)
+ sb.append("\t");
+ sb.append(ts.charAt(j));
+ dep--;
+ } else {
+ sb.append(ts.charAt(j));
+ }
+ }
+
+ return sb.toString();
+ }
+
+}
Modified: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java 2010-06-16 15:45:15 UTC (rev 33524)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -1,5 +1,5 @@
package org.drools.util;
-
+
/*
* Copyright 2005 JBoss Inc
*
Added: labs/jbossrules/branches/DRLv6/src/main/resources/DLTreeBuilder.g
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/resources/DLTreeBuilder.g (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/resources/DLTreeBuilder.g 2010-06-16 16:02:54 UTC (rev 33525)
@@ -0,0 +1,82 @@
+tree grammar DLTreeBuilder;
+
+options {
+ language = Java;
+ tokenVocab = DRLv6Parser;
+ ASTLabelType = CommonTree;
+}
+
+
+ at header {
+
+ package org.drools.lang.dl;
+
+ import org.drools.lang.dl.descr.DLDescrFactory;
+ import org.drools.lang.dl.descr.DL_BaseDescr;
+ import java.util.List;
+ import java.util.LinkedList;
+
+}
+
+
+ at members {
+ DLDescrFactory factory = new DLDescrFactory();
+}
+
+
+drl_source returns [List<DL_BaseDescr> types]
+ at init{
+ List<DL_BaseDescr> typeList = new LinkedList<DL_BaseDescr>();
+}
+ : ^(VT_COMPILATION_UNIT package_header?
+ ( klass=declaration { typeList.add($klass.typeDescr); } )*
+ )
+ {types = typeList;}
+ ;
+
+package_header
+ : ^(VT_PACKAGE ^(VT_PACKAGE_ID ID+) )
+ ;
+
+declaration returns [DL_BaseDescr typeDescr]
+ : ^(VT_TYPE_DECLARE klass=VT_TYPE_DECLARE_ID type=dl_root)
+ { typeDescr=factory.buildRootType($klass.getText(),$type.dlDescr); }
+ ;
+
+
+
+dl_root returns [DL_BaseDescr dlDescr]
+ : ^(VT_DL_DEFINITION ans=dl_tree)
+ { $dlDescr = $ans.dlDescr; }
+ ;
+
+dl_tree returns [DL_BaseDescr dlDescr]
+ at init{
+ List<DL_BaseDescr> descrList = new LinkedList<DL_BaseDescr>();
+}
+ : ^(VT_IMPLIES left=dl_tree right=dl_tree)
+ { descrList.add($left.dlDescr);
+ descrList.add($right.dlDescr);
+ $dlDescr = factory.createImplies(descrList);
+ }
+ | ^(VT_OR
+ (child=dl_tree { descrList.add($child.dlDescr); })+
+ )
+ { $dlDescr = factory.createOr(descrList); }
+ | ^(VT_AND
+ (child=dl_tree { descrList.add($child.dlDescr); })+
+ )
+ { $dlDescr = factory.createAnd(descrList); }
+ | ^(VT_NEG child=dl_tree)
+ { $dlDescr = factory.createNeg($child.dlDescr); }
+ | ^(VT_DL_TYPE klass=ID)
+ { $dlDescr = factory.createType($klass.getText()); }
+ | ^(SOME rel=ID tgt=dl_tree)
+ { $dlDescr = factory.createExists(
+ factory.createProperty($rel.getText()),
+ $tgt.dlDescr); }
+ | ^(ALL rel=ID tgt=dl_tree)
+ { $dlDescr = factory.createForall(
+ factory.createProperty($rel.getText()),
+ $tgt.dlDescr); }
+ ;
Modified: labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g 2010-06-16 15:45:15 UTC (rev 33524)
+++ labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g 2010-06-16 16:02:54 UTC (rev 33525)
@@ -211,6 +211,10 @@
: 'and'
;
+AS
+ : 'as'
+ ;
+
ATTRIBUTES
: 'attributes'
;
@@ -239,6 +243,7 @@
: 'defeats'
;
+
DISJOINT
: 'disjoint'
;
@@ -425,14 +430,8 @@
: 'some'
;
-SUBCLASS
- : 'subclass'
- ;
+
-SUBPROPERTY
- : 'subproperty'
- ;
-
SYMMETRIC
: 'symmetric'
;
Modified: labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g 2010-06-16 15:45:15 UTC (rev 33524)
+++ labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g 2010-06-16 16:02:54 UTC (rev 33525)
@@ -1,5 +1,5 @@
parser grammar DRLv6Parser;
-
+
options {
language = Java;
output = AST;
@@ -11,6 +11,7 @@
tokens {
VT_COMPILATION_UNIT;
VT_PACKAGE_ID;
+ VT_PACKAGE;
VT_GLOBAL_ID;
VT_DATA_TYPE;
@@ -27,7 +28,10 @@
VT_SLOT;
VT_SLOT_ID;
+ VT_TYPE_DECLARE;
VT_TYPE_DECLARE_ID;
+ VT_DL_DEFINITION;
+ VT_DL_TYPE;
VT_RULE_ID;
VT_ATTRIBUTES;
@@ -108,7 +112,7 @@
package_statement
: PACKAGE
package_id SEMICOLON?
- -> ^(PACKAGE package_id)
+ -> ^(VT_PACKAGE package_id)
;
package_id
@@ -237,13 +241,14 @@
type_declaration
- : DECLARE type_declare_id
- type_declare_attributes?
+ : DECLARE type_declare_id extend?
+ type_declare_attributes?
+ dl_class_descr?
decl_field*
END SEMICOLON?
- -> ^(DECLARE type_declare_id type_declare_attributes? decl_field*)
+ -> ^(VT_TYPE_DECLARE type_declare_id extend? type_declare_attributes? dl_class_descr? decl_field*)
;
-
+
type_declare_id
: id=ID
-> VT_TYPE_DECLARE_ID[$id]
@@ -263,8 +268,6 @@
type_declare_att_semantic
: tda_namespace
- | tda_subclass
- | tda_subproperty
| tda_disjoint
| tda_symmetric
| tda_transitive
@@ -278,14 +281,6 @@
tda_namespace
: AT! NAMESPACE^ LEFT_PAREN! ID EQUALS! STRING RIGHT_PAREN!
;
-
-tda_subclass
- : AT! SUBCLASS^ LEFT_PAREN! ID RIGHT_PAREN!
- ;
-
-tda_subproperty
- : AT! SUBPROPERTY^ LEFT_PAREN! ID RIGHT_PAREN!
- ;
tda_disjoint
: AT! DISJOINT^ LEFT_PAREN! ID RIGHT_PAREN!
@@ -304,13 +299,9 @@
;
-
-
-/*
-decl_metadata
- : AT^ ID paren_chunk?
+extend
+ : EXTEND ID
;
-*/
decl_field
: ID
@@ -341,6 +332,52 @@
;
+
+dl_class_descr
+ : AS dl_implies
+ -> ^(VT_DL_DEFINITION dl_implies)
+ ;
+
+dl_implies
+ : dl_or (impl=IMPLIES dl_or)?
+ -> {impl==null}? dl_or
+ -> ^(VT_IMPLIES dl_or dl_or)
+ ;
+
+dl_or
+ : dl_and (or=OR dl_and)*
+ -> {or==null}? dl_and
+ -> ^(VT_OR dl_and+)
+ ;
+
+dl_and
+ : dl_atom (and=AND dl_atom)*
+ -> {and==null}? dl_atom
+ -> ^(VT_AND dl_atom+)
+ ;
+
+dl_atom
+ : NEG dl_atom
+ -> ^(VT_NEG dl_atom)
+ | dl_type
+ | dl_prop
+ ;
+
+
+dl_type
+ : LEFT_PAREN! dl_implies RIGHT_PAREN!
+ | dl_class
+ ;
+
+dl_class
+ : ID LEFT_PAREN RIGHT_PAREN
+ -> ^(VT_DL_TYPE ID)
+ ;
+
+dl_prop
+ : ID (ALL | SOME)^ dl_type
+ ;
+
/**************************** RULES *******************************************/
Modified: labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/Rule_Test.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/Rule_Test.java 2010-06-16 15:45:15 UTC (rev 33524)
+++ labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/Rule_Test.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -161,18 +161,16 @@
public void test_type_declaration() {
String rule = "type_declaration";
String[] testDRL = {
- "declare Student" + "\n" +
+ "declare Student extends Person" + "\n" +
" @role(entity) " + "\n" +
- " @namespace(myNS=\"http:\\\\www.stix.com\\domain\\subd#\") " + "\n" +
- " @subclass(Person)" + "\n" +
+ " @namespace(myNS=\"http:\\\\www.stix.com\\domain\\subd#\") " + "\n" +
" age : int " + "\n" +
" name : String " + "\n" +
" end \n",
- "declare HasFriend " + "\n" +
+ "declare HasFriend extends Knows" + "\n" +
"@role(property) " + "\n" +
- "@namespace(myNS=\"http:\\\\www.somens.com\\arg\\test#\") " + "\n" +
- "@subproperty(Knows) " + "\n" +
+ "@namespace(myNS=\"http:\\\\www.somens.com\\arg\\test#\") " + "\n" +
"@disjoint(HasEnemy) " + "\n" +
"@symmetric " + "\n" +
"subject : Person " + "\n" +
@@ -202,9 +200,7 @@
"@role(type)",
"@role(entity)",
"@role(property)",
- "@namespace( alias = \"http:\\\\www.org.dom\\arg# \")",
- "@subclass(Type)",
- "@subproperty(SomeProperty)",
+ "@namespace( alias = \"http:\\\\www.org.dom\\arg# \")",
"@disjoint(AnotherType)",
"@symmetric",
"@transitive",
@@ -546,6 +542,26 @@
check(rule,testDRL);
}
+
+
+
+
+ @Test
+ public void test_decl_dl() {
+ String rule = "type_declaration";
+ String[] testDRL = {
+ "declare Student " + "\n" +
+ " defined Male() and Human() and (Slave() or worksAt some (School() or Prison()))" + "\n" +
+ " age : int " + "\n" +
+ " name : String " + "\n" +
+ " end \n"
+ };
+
+ check(rule,testDRL);
+ }
+
+
+
//TODO : test filter & tree struct
/*
Modified: labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java 2010-06-16 15:45:15 UTC (rev 33524)
+++ labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java 2010-06-16 16:02:54 UTC (rev 33525)
@@ -33,7 +33,7 @@
if (source != null)
buf.append(">> SOURCE : \n").append(source).append("\n");
if (tree != null)
- buf.append(">> OUTPUT : \n").append(toIndentedStringTree());
+ buf.append(">> OUTPUT : \n").append(DRLTreeFormatter.toIndentedStringTree(tree));
}
return buf.toString();
@@ -47,35 +47,7 @@
- public String toIndentedStringTree() {
- String ts = new String(tree.toStringTree());
-
- //ts = ts.substring(0, ts.indexOf("then"));
- StringBuilder sb = new StringBuilder();
- int dep = 0;
- for (int j = 0; j < ts.length(); j++) {
- if (ts.charAt(j) == '(') {
- dep++;
-
- sb.append("\n");
- for (int k = 0; k < dep; k++)
- sb.append("\t");
- sb.append(ts.charAt(j));
-
- } else
- if (ts.charAt(j) == ')') {
- sb.append("\n");
- for (int k = 0; k < dep; k++)
- sb.append("\t");
- sb.append(ts.charAt(j));
- dep--;
- } else {
- sb.append(ts.charAt(j));
- }
- }
- return sb.toString();
- }
More information about the jboss-svn-commits
mailing list