[jboss-svn-commits] JBL Code SVN: r32805 - in labs/jbossrules/branches/DRLv6: lib and 15 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 10 18:38:42 EDT 2010


Author: dsotty
Date: 2010-05-10 18:38:41 -0400 (Mon, 10 May 2010)
New Revision: 32805

Added:
   labs/jbossrules/branches/DRLv6/bin/
   labs/jbossrules/branches/DRLv6/lib/
   labs/jbossrules/branches/DRLv6/lib/antlrworks-1.3.1.jar
   labs/jbossrules/branches/DRLv6/out/
   labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt
   labs/jbossrules/branches/DRLv6/src/
   labs/jbossrules/branches/DRLv6/src/main/
   labs/jbossrules/branches/DRLv6/src/main/java/
   labs/jbossrules/branches/DRLv6/src/main/java/org/
   labs/jbossrules/branches/DRLv6/src/main/java/org/drools/
   labs/jbossrules/branches/DRLv6/src/main/java/org/drools/Visitor.java
   labs/jbossrules/branches/DRLv6/src/main/java/org/drools/lang/
   labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/
   labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java
   labs/jbossrules/branches/DRLv6/src/main/resources/
   labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g
   labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g
   labs/jbossrules/branches/DRLv6/src/test/
   labs/jbossrules/branches/DRLv6/src/test/java/
   labs/jbossrules/branches/DRLv6/src/test/java/org/
   labs/jbossrules/branches/DRLv6/src/test/java/org/drools/
   labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/
   labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/Rule_Test.java
   labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/
   labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java
   labs/jbossrules/branches/DRLv6/src/test/resources/
   labs/jbossrules/branches/DRLv6/src/test/resources/langTestAll.drl
   labs/jbossrules/branches/DRLv6/src/test/resources/newRuleTest.drl
Modified:
   labs/jbossrules/branches/DRLv6/
Log:
Initial


Property changes on: labs/jbossrules/branches/DRLv6
___________________________________________________________________
Name: svn:ignore
   + .settings
.classpath
.project


Added: labs/jbossrules/branches/DRLv6/lib/antlrworks-1.3.1.jar
===================================================================
(Binary files differ)


Property changes on: labs/jbossrules/branches/DRLv6/lib/antlrworks-1.3.1.jar
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt
===================================================================
--- labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/out/DRLv6Log.txt	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,1504 @@
+**************************************
+compilation_unit
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 8
+>> SOURCE : 
+package org.pack.subpack;
+import org.klass;
+
+declare Klass
+end
+
+rule "ruel"
+when
+then
+end
+
+>> OUTPUT : 
+
+	(VT_COMPILATION_UNIT 
+		(package 
+			(VT_PACKAGE_ID org pack subpack
+			)
+		) 
+		(import 
+			(VT_IMPORT_ID org klass
+			)
+		) 
+		(declare Klass
+		) 
+		(rule "ruel" 
+			(when VT_AND_IMPLICIT
+			) 
+		)
+	)
+**************************************
+package_statement
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+package this.isa.pack ;
+>> OUTPUT : 
+
+	(package 
+		(VT_PACKAGE_ID this isa pack
+		)
+	)
+**************************************
+package_statement
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+package semi.colon.is.optional 
+>> OUTPUT : 
+
+	(package 
+		(VT_PACKAGE_ID semi colon is optional
+		)
+	)
+**************************************
+package_statement
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+package simplePack
+>> OUTPUT : 
+
+	(package 
+		(VT_PACKAGE_ID simplePack
+		)
+	)
+**************************************
+global
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+global int N 
+>> OUTPUT : 
+
+	(global 
+		(VT_DATA_TYPE 0 int
+		) N
+	)
+**************************************
+global
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+global org.it.pack.String strix ;
+>> OUTPUT : 
+
+	(global 
+		(VT_DATA_TYPE 0 org it pack String
+		) strix
+	)
+**************************************
+data_type
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+String
+>> OUTPUT : 
+
+	(VT_DATA_TYPE 0 String
+	)
+**************************************
+data_type
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+int
+>> OUTPUT : 
+
+	(VT_DATA_TYPE 0 int
+	)
+**************************************
+data_type
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+float[]
+>> OUTPUT : 
+
+	(VT_DATA_TYPE 1 float
+	)
+**************************************
+data_type
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+org.pack.data.Claxx[]
+>> OUTPUT : 
+
+	(VT_DATA_TYPE 1 org pack data Claxx
+	)
+**************************************
+data_type
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+int[][][]
+>> OUTPUT : 
+
+	(VT_DATA_TYPE 3 int
+	)
+**************************************
+import_statement
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+import jav.lang.String
+>> OUTPUT : 
+
+	(import 
+		(VT_IMPORT_ID jav lang String
+		)
+	)
+**************************************
+import_statement
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+import Test ; 
+>> OUTPUT : 
+
+	(import 
+		(VT_IMPORT_ID Test
+		)
+	)
+**************************************
+import_statement
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+import jav.pack.*
+>> OUTPUT : 
+
+	(import 
+		(VT_IMPORT_ID jav pack .*
+		)
+	)
+**************************************
+function_import_statement
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+import function org.pack.square
+>> OUTPUT : 
+
+	(import function 
+		(VT_IMPORT_ID org pack square
+		)
+	)
+**************************************
+function
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 2
+>> SOURCE : 
+function float square( float x ) { ... x*x ... }
+>> OUTPUT : 
+
+	(function 
+		(VT_DATA_TYPE 0 float
+		) square 
+		(VT_PARAM_LIST 
+			(VT_PARAM 
+				(VT_DATA_TYPE 0 float
+				) x
+			)
+		) { ... x*x ... }
+	)
+**************************************
+function
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+function process( int x, org.String zz ) { ... ... }
+>> OUTPUT : 
+
+	(function process 
+		(VT_PARAM_LIST 
+			(VT_PARAM 
+				(VT_DATA_TYPE 0 int
+				) x
+			) 
+			(VT_PARAM 
+				(VT_DATA_TYPE 0 org String
+				) zz
+			)
+		) { ... ... }
+	)
+**************************************
+parameters
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+( int a, org.klass.AnType obj, String[][] argz )
+>> OUTPUT : 
+
+	(VT_PARAM_LIST 
+		(VT_PARAM 
+			(VT_DATA_TYPE 0 int
+			) a
+		) 
+		(VT_PARAM 
+			(VT_DATA_TYPE 0 org klass AnType
+			) obj
+		) 
+		(VT_PARAM 
+			(VT_DATA_TYPE 2 String
+			) argz
+		)
+	)
+**************************************
+type_declaration
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 2
+>> SOURCE : 
+declare Student
+ @role(entity) 
+ @namespace(myNS="http:\\www.stix.com\domain\subd#") 
+ @subclass(Person)
+ age  : int 
+ name : String 
+ end 
+
+>> OUTPUT : 
+
+	(declare Student 
+		(VT_ATTRIBUTES 
+			(role entity
+			) 
+			(namespace myNS "http:\\www.stix.com\domain\subd#"
+			) 
+			(subclass Person
+			)
+		) 
+		(VT_FIELD age 
+			(VT_DATA_TYPE 0 int
+			)
+		) 
+		(VT_FIELD name 
+			(VT_DATA_TYPE 0 String
+			)
+		)
+	)
+**************************************
+type_declaration
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+declare HasFriend 
+ at role(property) 
+ at namespace(myNS="http:\\www.somens.com\arg\test#") 
+ at subproperty(Knows) 
+ at disjoint(HasEnemy) 
+ at symmetric 
+subject	: Person 
+object  : Person 
+end 
+
+>> OUTPUT : 
+
+	(declare HasFriend 
+		(VT_ATTRIBUTES 
+			(role property
+			) 
+			(namespace myNS "http:\\www.somens.com\arg\test#"
+			) 
+			(subproperty Knows
+			) 
+			(disjoint HasEnemy
+			) symmetric
+		) 
+		(VT_FIELD subject 
+			(VT_DATA_TYPE 0 Person
+			)
+		) 
+		(VT_FIELD object 
+			(VT_DATA_TYPE 0 Person
+			)
+		)
+	)
+**************************************
+type_declaration
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+declare HasSpouse 
+ at role(property) 
+ at namespace(myNS="http:\\www.somens.com\arg\test#") 
+ at symmetric 
+ at transitive 
+ at inverse(HasSpouse) 
+subject	= ("john") : Person 	@[key] 
+object  : Person	@[key] 
+end 
+
+>> OUTPUT : 
+
+	(declare HasSpouse 
+		(VT_ATTRIBUTES 
+			(role property
+			) 
+			(namespace myNS "http:\\www.somens.com\arg\test#"
+			) symmetric transitive 
+			(inverse HasSpouse
+			)
+		) 
+		(VT_FIELD 
+			(VT_ATTRIBUTES key
+			) subject 
+			(VT_DATA_TYPE 0 Person
+			) 
+			(= 
+				("john"
+				)
+			)
+		) 
+		(VT_FIELD 
+			(VT_ATTRIBUTES key
+			) object 
+			(VT_DATA_TYPE 0 Person
+			)
+		)
+	)
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+ at role(event)
+>> OUTPUT : 
+
+	(role event
+	)
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+ at role(type)
+>> OUTPUT : 
+
+	(role type
+	)
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+ at role(entity)
+>> OUTPUT : 
+
+	(role entity
+	)
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+ at role(property)
+>> OUTPUT : 
+
+	(role property
+	)
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+ at namespace( alias = "http:\\www.org.dom\arg# ")
+>> OUTPUT : 
+
+	(namespace alias "http:\\www.org.dom\arg# "
+	)
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> 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 : 
+ at disjoint(AnotherType)
+>> OUTPUT : 
+
+	(disjoint AnotherType
+	)
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+ at symmetric
+>> OUTPUT : 
+symmetric
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+ at transitive
+>> OUTPUT : 
+transitive
+**************************************
+type_declare_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+ at inverse(ReverseProperty)
+>> OUTPUT : 
+
+	(inverse ReverseProperty
+	)
+**************************************
+decl_field
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+field = (...) : datatype[][] @[key]
+>> OUTPUT : 
+
+	(VT_FIELD 
+		(VT_ATTRIBUTES key
+		) field 
+		(VT_DATA_TYPE 2 datatype
+		) 
+		(= 
+			(...
+			)
+		)
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "ruleName" extends "anotherRule" 
+ salience 100 
+ no-loop 
+ calendar "s1" , "s2" 
+when
+then
+end
+
+>> OUTPUT : 
+
+	(rule "ruleName" 
+		(extends "anotherRule"
+		) 
+		(VT_ATTRIBUTES 
+			(salience 100
+			) no-loop 
+			(calendar [ "s1", "s2" ]
+			)
+		) 
+		(when VT_AND_IMPLICIT
+		) 
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+salience 100
+>> OUTPUT : 
+
+	(salience 100
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+no-loop true
+>> OUTPUT : 
+
+	(no-loop true
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+agenda-group "test-group"
+>> OUTPUT : 
+
+	(agenda-group "test-group"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+activation-group "act-group"
+>> OUTPUT : 
+
+	(activation-group "act-group"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+auto-focus false
+>> OUTPUT : 
+
+	(auto-focus false
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+effective "2010-04-12"
+>> OUTPUT : 
+
+	(effective "2010-04-12"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+expires "2010-04-12"
+>> OUTPUT : 
+
+	(expires "2010-04-12"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+enabled true
+>> OUTPUT : 
+
+	(enabled true
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+ruleflow-group "act-group"
+>> OUTPUT : 
+
+	(ruleflow-group "act-group"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+agenda-group "act-group"
+>> OUTPUT : 
+
+	(agenda-group "act-group"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+duration 100
+>> OUTPUT : 
+
+	(duration 100
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+timer 100
+>> OUTPUT : 
+
+	(timer 100
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+dialect "java" 
+>> OUTPUT : 
+
+	(dialect "java"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+lock-on-active true
+>> OUTPUT : 
+
+	(lock-on-active true
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+defeats "anotherRule" 
+>> OUTPUT : 
+
+	(defeats "anotherRule"
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+deductive
+>> OUTPUT : 
+deductive
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+abductive
+>> OUTPUT : 
+abductive
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+equivalence
+>> OUTPUT : 
+equivalence
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+deduction @[crisp]
+>> OUTPUT : 
+
+	(deduction 
+		(VT_ATTRIBUTES crisp
+		)
+	)
+**************************************
+rule_attribute
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+implication @[crisp]
+>> OUTPUT : 
+
+	(implication 
+		(VT_ATTRIBUTES crisp
+		)
+	)
+**************************************
+operator_attributes
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 3
+>> SOURCE : 
+@[
+kind="lukasiewicz", 
+id="myID", 
+params="addit,args,2,more", 
+degree="[0.3,0.2]", 
+crisp,
+default,
+defeat,
+merge="mStrat", 
+filter="fStrat", 
+missing="sStrat" 
+]
+>> OUTPUT : 
+
+	(VT_ATTRIBUTES 
+		(kind = "lukasiewicz"
+		) 
+		(id = "myID"
+		) 
+		(params = "addit,args,2,more"
+		) 
+		(degree = "[0.3,0.2]"
+		) crisp default defeat 
+		(merge = "mStrat"
+		) 
+		(filter = "fStrat"
+		) 
+		(missing = "sStrat"
+		)
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 2
+>> SOURCE : 
+rule test when Bus() Car() Taxi()then end
+>> OUTPUT : 
+
+	(rule test 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_AND VT_ENABLED 
+					(VT_PATTERN Bus
+					)
+				) 
+				(VT_AND VT_ENABLED 
+					(VT_PATTERN Car
+					)
+				) 
+				(VT_AND VT_ENABLED 
+					(VT_PATTERN Taxi
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule test when $p : Person() implies @[kind="anImpl"] Dog()then end
+>> OUTPUT : 
+
+	(rule test 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_IMPLIES 
+					(VT_ATTRIBUTES 
+						(kind = "anImpl"
+						)
+					) 
+					(VT_BINDING $p : 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						)
+					) 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Dog
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule test when Car() or @[kind="anOr"] Taxi() or @[kind="anotherOr"] Bus()then end
+>> OUTPUT : 
+
+	(rule test 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_OR 
+					(VT_ATTRIBUTES 
+						(kind = "anotherOr"
+						)
+					) 
+					(VT_OR 
+						(VT_ATTRIBUTES 
+							(kind = "anOr"
+							)
+						) 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Car
+							)
+						) 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Taxi
+							)
+						)
+					) 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Bus
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule test when $p : Person() xor Dog()then end
+>> OUTPUT : 
+
+	(rule test 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_XOR 
+					(VT_BINDING $p : 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						)
+					) 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Dog
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule test when (Person() xor Dog()) equiv Cat()then end
+>> OUTPUT : 
+
+	(rule test 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_EQUIV 
+					(VT_AND_IMPLICIT 
+						(VT_XOR 
+							(VT_AND VT_ENABLED 
+								(VT_PATTERN Person
+								)
+							) 
+							(VT_AND VT_ENABLED 
+								(VT_PATTERN Dog
+								)
+							)
+						)
+					) 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Cat
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule test when Car() and Taxi() and Bus()then end
+>> OUTPUT : 
+
+	(rule test 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_AND 
+					(VT_AND 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Car
+							)
+						) 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Taxi
+							)
+						)
+					) 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Bus
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule test when (P() implies Q()) implies ( (K() equiv K()) or Z() and X() )then end
+>> OUTPUT : 
+
+	(rule test 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_IMPLIES 
+					(VT_AND_IMPLICIT 
+						(VT_IMPLIES 
+							(VT_AND VT_ENABLED 
+								(VT_PATTERN P
+								)
+							) 
+							(VT_AND VT_ENABLED 
+								(VT_PATTERN Q
+								)
+							)
+						)
+					) 
+					(VT_AND_IMPLICIT 
+						(VT_OR 
+							(VT_AND_IMPLICIT 
+								(VT_EQUIV 
+									(VT_AND VT_ENABLED 
+										(VT_PATTERN K
+										)
+									) 
+									(VT_AND VT_ENABLED 
+										(VT_PATTERN K
+										)
+									)
+								)
+							) 
+							(VT_AND 
+								(VT_AND VT_ENABLED 
+									(VT_PATTERN Z
+									)
+								) 
+								(VT_AND VT_ENABLED 
+									(VT_PATTERN X
+									)
+								)
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule "r" when neg @[crisp] very @[crisp] Person() then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_NEG 
+					(VT_ATTRIBUTES crisp
+					) 
+					(VT_HEDGE_VERY 
+						(VT_ATTRIBUTES crisp
+						) 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "r" when $lab : Person()then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_BINDING $lab : 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Person
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule "r" when (Person() implies Dog())then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_AND_IMPLICIT 
+					(VT_IMPLIES 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						) 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Dog
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "r" when exists @[crisp] ( $p : Person() and $d : Dog() ) then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_EXISTS 
+					(VT_ATTRIBUTES crisp
+					) 
+					(VT_AND_IMPLICIT 
+						(VT_AND 
+							(VT_BINDING $p : 
+								(VT_AND VT_ENABLED 
+									(VT_PATTERN Person
+									)
+								)
+							) 
+							(VT_BINDING $d : 
+								(VT_AND VT_ENABLED 
+									(VT_PATTERN Dog
+									)
+								)
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule "r" when  $p : exists Person() then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_BINDING $p : 
+					(VT_EXISTS 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "r" when not @[crisp] ( $p : Person() and $d : Dog() ) then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_NEXISTS 
+					(VT_ATTRIBUTES crisp
+					) 
+					(VT_AND_IMPLICIT 
+						(VT_AND 
+							(VT_BINDING $p : 
+								(VT_AND VT_ENABLED 
+									(VT_PATTERN Person
+									)
+								)
+							) 
+							(VT_BINDING $d : 
+								(VT_AND VT_ENABLED 
+									(VT_PATTERN Dog
+									)
+								)
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule "r" when  not Person() then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_NEXISTS 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Person
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "r" when forall @[crisp] Person() then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_FORALL 
+					(VT_ATTRIBUTES crisp
+					) 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Person
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule "r" when forall  ( $p : Person()                Person() ) then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_FORALL 
+					(VT_BINDING $p : 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						)
+					) 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Person
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "r" when forall  ( $p : Person()                (Person() Dog()) ) then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_FORALL 
+					(VT_BINDING $p : 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						)
+					) 
+					(VT_AND_IMPLICIT 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						) 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Dog
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "r" when forall  ( ($p : Person() $d : Dog() )          (     Person()      Dog() )         ) then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_FORALL 
+					(VT_AND_IMPLICIT 
+						(VT_BINDING $p : 
+							(VT_AND VT_ENABLED 
+								(VT_PATTERN Person
+								)
+							)
+						) 
+						(VT_BINDING $d : 
+							(VT_AND VT_ENABLED 
+								(VT_PATTERN Dog
+								)
+							)
+						)
+					) 
+					(VT_AND_IMPLICIT 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Person
+							)
+						) 
+						(VT_AND VT_ENABLED 
+							(VT_PATTERN Dog
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule "r" when $p : Person() then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_BINDING $p : 
+					(VT_AND VT_ENABLED 
+						(VT_PATTERN Person
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 0
+>> SOURCE : 
+rule "r" when Person() @[crisp]then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_AND 
+					(VT_ATTRIBUTES crisp
+					) VT_ENABLED 
+					(VT_PATTERN Person
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 3
+>> SOURCE : 
+rule "r" when Person( "john" , 18, height > 150) then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_AND VT_ENABLED 
+					(VT_PATTERN Person
+					) 
+					(VT_AND 
+						(VT_POSITIONAL_CONST 0 "john"
+						) 
+						(VT_POSITIONAL_CONST 1 18
+						) 
+						(> 150 
+							(VT_EXPR height
+							)
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+rule
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+rule "r" when Person( "john" , 18, 2.0, true, null, new Dog(), {12, $x, "test" }, $var) then end
+>> OUTPUT : 
+
+	(rule "r" 
+		(when 
+			(VT_AND_IMPLICIT 
+				(VT_AND VT_ENABLED 
+					(VT_PATTERN Person
+					) 
+					(VT_AND 
+						(VT_POSITIONAL_CONST 0 "john"
+						) 
+						(VT_POSITIONAL_CONST 1 18
+						) 
+						(VT_POSITIONAL_CONST 2 2.0
+						) 
+						(VT_POSITIONAL_CONST 3 true
+						) 
+						(VT_POSITIONAL_CONST 4 null
+						) 
+						(VT_POSITIONAL_CONST 5 
+							(VT_NEW_OBJ 
+								(VT_TYPE Dog
+								)
+							)
+						) 
+						(VT_POSITIONAL_CONST 6 
+							(VT_LIST 12 $x "test"
+							)
+						) 
+						(VT_POSITIONAL_VAR 7 $var
+						)
+					)
+				)
+			)
+		) 
+	)
+**************************************
+literal_object
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+new Thing(13, $var, true)
+>> OUTPUT : 
+
+	(VT_NEW_OBJ 
+		(VT_TYPE Thing
+		) 
+		(VT_ARGS 13 $var true
+		)
+	)
+**************************************
+literal_object
+**************************************
+>>>> RESULT :  SUCCESS 
+>> TIME to parse 1
+>> SOURCE : 
+new Obj(12 - 13*($var*2 + sqrt(4)))
+>> OUTPUT : 
+
+	(VT_NEW_OBJ 
+		(VT_TYPE Obj
+		) 
+		(VT_ARGS 12 - 13 * $var * 2 + sqrt 4
+		)
+	)

Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/Visitor.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/Visitor.java	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/Visitor.java	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,21 @@
+package org.drools;
+
+/*
+ * 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 interface Visitor {
+    void visit(Object o);
+}
\ No newline at end of file

Added: labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/java/org/drools/util/ReflectiveVisitor.java	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,104 @@
+package org.drools.util;
+
+/*
+ * 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.
+ */
+
+import java.lang.reflect.Method;
+
+import org.drools.Visitor;
+
+/**
+ * Java Tip 98: Reflect on the Visitor design pattern. Implement visitors in
+ * Java, using reflection.
+ * http://www.javaworld.com/javaworld/javatips/jw-javatip98.html
+ *
+ * Michael Neale says: I really hate this code. Not really a helpful use
+ * of reflection, always annoys me.
+ *
+ * @author Jeremy Blosser
+ */
+public abstract class ReflectiveVisitor
+    implements
+    Visitor {
+    static final String newline = System.getProperty( "line.separator" );
+
+    public void visit(final Object object) {
+        Method method = null;
+        try {
+            if ( object != null ) {
+                method = getMethod( object.getClass() );
+                method.invoke( this,
+                               new Object[]{object} );
+            } else {
+                method = getClass().getMethod( "visitNull",
+                                               (Class[]) null );
+                method.invoke( this,
+                               (Object[]) null );
+            }
+        } catch ( final Exception e ) {
+            throw new RuntimeException( e.toString() + " : " + object,
+                                              e.getCause() );
+        }
+    }
+
+    private Method getMethod(final Class clazz) {
+        Class newClazz = clazz;
+        Method method = null;
+
+        // Try the superclasses
+        while ( method == null && newClazz != Object.class ) {
+            String methodName = newClazz.getName();
+            methodName = "visit" + methodName.substring( methodName.lastIndexOf( '.' ) + 1 );
+            try {
+                method = getClass().getMethod( methodName,
+                                               new Class[]{newClazz} );
+            } catch ( final NoSuchMethodException e ) {
+                newClazz = newClazz.getSuperclass();
+            }
+        }
+
+        // Try the interfaces.
+        if ( newClazz == Object.class ) {
+            final Class[] interfaces = clazz.getInterfaces();
+            for ( int i = 0; i < interfaces.length; i++ ) {
+                String methodName = interfaces[i].getName();
+                methodName = "visit" + methodName.substring( methodName.lastIndexOf( '.' ) + 1 );
+                try {
+                    method = getClass().getMethod( methodName,
+                                                   new Class[]{interfaces[i]} );
+                } catch ( final NoSuchMethodException e ) {
+                    // swallow
+                }
+            }
+        }
+        if ( method == null ) {
+            try {
+                method = getClass().getMethod( "visitObject",
+                                               new Class[]{Object.class} );
+            } catch ( final Exception e ) {
+                // Shouldn't happen as long as all Visitors extend this class
+                // and this class continues to implement visitObject(Object).
+                throw new RuntimeException( e.toString() + " : " + clazz,
+                                                  e.getCause() );
+            }
+        }
+        return method;
+    }
+
+    public void visitObject(final Object object) {
+        System.err.println( "no visitor implementation for : " + object.getClass() + " : " + object );
+    }
+}

Added: labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Lexer.g	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,1344 @@
+lexer grammar DRLv6Lexer;
+  
+options {
+  language = Java; 
+}  
+
+ at lexer::header {
+  package org.drools.lang;
+
+}
+
+WS      :       ( ' '
+                | '\t'
+                | '\f'
+                | EOL
+                )+
+                { $channel=HIDDEN; }
+        ;
+
+fragment
+EOL   :      
+      (       ( '\r\n' )=> '\r\n'  // Evil DOS
+                |       '\r'    // Macintosh
+                |       '\n'    // Unix (the right way)
+                )
+        ;
+        
+FLOAT
+options { k=*; }
+  : ('-')?('0'..'9')+ '.' ('0'..'9')+
+  ;
+
+INT
+options { k=*; }  
+  : ('-')?('0'..'9')+
+    ;
+
+STRING
+      :   ('"' ( EscapeSequence | ~('\\'|'"') )+ '"')
+      |   ('\'' ( EscapeSequence | ~('\\'|'\'') )+ '\'')
+        ;
+
+fragment
+HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
+
+fragment
+EscapeSequence
+    :   '\\' ('b'|'B'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.'|'o'|
+              'x'|'a'|'e'|'c'|'d'|'D'|'s'|'S'|'w'|'W'|'p'|'A'|
+              'G'|'Z'|'z'|'Q'|'E'|'*'|'['|']'|'('|')'|'$'|'^'|
+              '{'|'}'|'?'|'+'|'-'|'&'|'|')
+    |   UnicodeEscape
+    |   OctalEscape
+    ;
+
+fragment
+OctalEscape
+    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7')
+    ;
+
+fragment
+UnicodeEscape
+    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
+    ;
+
+
+
+  
+  
+  
+  
+A_DATE_EFFECTIVE
+  : 'effective'
+  ;
+
+A_DATE_EXPIRES
+  : 'expires'
+  ;
+  
+A_ENABLED
+  : 'enabled'
+  ; 
+
+A_SALIENCE
+  : 'salience'
+  ;
+
+A_NOLOOP
+  : 'no-loop'
+  ;
+
+A_AUTOFOCUS
+  : 'auto-focus'
+  ; 
+  
+A_ACTGROUP
+  : 'activation-group'
+  ;
+
+A_RULEFLOWGROUP
+  : 'ruleflow-group'
+  ;
+
+A_AGENDAGROUP
+  : 'agenda-group'
+  ;
+
+A_DURATION
+  : 'duration'
+  ;
+  
+A_TIMER 
+  : 'timer'
+  ;
+  
+A_CALENDAR
+  : 'calendar'
+  ;
+
+
+A_DIALECT
+  : 'dialect'
+  ;     
+  
+A_LOCKONACTIVE
+  : 'lock-on-active'
+  ;
+  
+A_DEDUCTION 
+  :   'deduction'
+  ;
+  
+A_IMPLICATION
+  : 'implication'
+  ;
+  
+A_DIRECTION
+  : 'deductive' 
+  | 'abductive'
+  | 'equivalence'
+  ; 
+  
+OA_KIND
+  :   'kind'
+  ;
+  
+OA_ID
+  : 'id'
+  ;
+
+OA_PARAMS
+  : 'params'
+  ;
+
+OA_DEGREE
+  : 'degree'
+  ;
+  
+OA_CRISP
+  : 'crisp'
+  ;   
+
+OA_MERGE
+  : 'merge'
+  ;   
+    
+OA_FILTER
+  : 'filter'
+  ;
+
+OA_MISSING
+  : 'missing'
+  ;
+        
+OA_DEFEAT
+  : 'defeat'  
+  ;
+
+OA_DEFAULT
+  : 'default'
+  ;
+
+
+
+
+ACCUMULATE
+  : 'acc'
+  ;
+  
+ACCUMULATE_LEFT
+  : 'accL'
+  ; 
+
+ACCUMULATE_RIGHT
+  : 'accR'
+  ;   
+
+ACTION
+  : 'action'
+  ;
+
+ALL
+  : 'all'
+  ;
+  
+AND
+  : 'and'
+  ;
+
+ATTRIBUTES
+  : 'attributes'
+  ;
+
+BOOL
+  : ('true'|'false') 
+  ;
+  
+COLLECT
+  : 'collect'
+  ;
+
+CONTAINS
+  : 'contains'
+  ;
+
+COUNT
+  : 'count'
+  ;
+
+DECLARE
+  : 'declare'
+  ;
+
+DEFEATS
+  : 'defeats'
+  ;
+
+DISJOINT
+  :  'disjoint'
+  ;
+
+DO
+  : 'do'
+  ;
+
+END
+  : 'end'
+  ;
+
+  
+ENTITY
+  : 'entity'
+  ; 
+  
+ENTRYPOINT
+  : 'entry-point'
+  ; 
+
+EQUIV
+  : 'equiv'
+  ; 
+
+EVENT
+  : 'event'
+  ;
+
+EXISTS
+  : 'exists'
+  ;
+
+EXTEND  
+  : 'extends'
+  ;
+ 
+FORALL
+  : 'forall'
+  ;
+  
+FROM
+  : 'from'
+  ; 
+  
+FUNCTION
+  :   'function'  
+  ;
+  
+GLOBAL
+  : 'global'
+  ; 
+
+IMPLIES
+  : 'implies'
+  ;
+
+IMPORT  
+  : 'import'
+  ;
+
+IN
+  : 'in'
+  ;
+
+INIT
+  : 'init'
+  ;
+
+INSERT
+  : 'insert'
+  ;
+
+INSERT_LOG
+  : 'insertLogical'
+  ;
+   
+INVERSE
+  : 'inverse'
+  ;   
+    
+JAVA
+  :  'java'
+  ;    
+    
+KEY
+  :  'key'
+  ;    
+    
+LENGTH
+  : 'length'
+  ;
+
+MAX 
+  : 'max'
+  ;
+
+MIN 
+  : 'min'
+  ; 
+
+MODIFY
+  : 'modify'
+  ; 
+  
+MVEL
+  : 'mvel'
+  ;  
+
+NEG
+  : 'neg'
+  ;
+
+NEW
+  : 'new'
+  ;
+
+NOT
+  : 'not'
+  ;
+
+MOL 
+  : 'mol'
+  ; 
+
+
+NAMESPACE
+  : 'namespace'
+  ;
+
+NULL  
+  : 'null'
+  ;
+
+OR
+  : 'or'
+  ;
+ 
+OVER
+  : 'over'
+  ;
+
+PACKAGE 
+  :   'package'
+  ;
+
+PROPERTY
+  : 'property'
+  ;  
+
+QUERY
+  : 'query'
+  ;
+  
+RESULT
+  : 'result'
+  ;
+  
+RETRACT
+  : 'retract'
+  ;
+  
+RETRACT_LOG
+  : 'retractLogical'    
+  ;
+
+REVERSE
+  : 'reverse'
+  ;
+  
+ROLE
+  : 'role'
+  ;  
+
+RULE  
+  : 'rule'
+  ;
+
+SOME
+  : 'some'
+  ; 
+  
+SUBCLASS
+  : 'subclass'
+  ;  
+  
+SUBPROPERTY
+  : 'subproperty'
+  ;
+  
+SYMMETRIC
+  : 'symmetric'
+  ;  
+  
+TEMPLATE
+  : 'template'
+  ;
+
+THEN
+  : 'then'
+  ;
+  
+TIME
+  : 'time'
+  ;   
+  
+TRANSITIVE
+  :  'transitive'
+  ;  
+  
+TYPE
+  : 'type'
+  ;  
+
+UPDATE
+  : 'update'
+  ;
+
+VALUE 
+  : 'value'
+  ;
+
+
+VERY  
+  : 'very'
+  ;
+  
+WHEN
+  : 'when'
+  ;
+
+WINDOW
+  : 'window'
+  ;
+
+XOR
+  : 'xor'
+  ;
+
+
+
+
+AT  : '@'
+  ;
+
+
+ARROW
+  : '->'
+  ;
+
+COLON
+  : ':'
+  ;
+
+COMMA : ','
+  ;
+
+DOLLAR
+  : '$'
+  ;
+      
+DOT : '.'
+  ; 
+
+DOT_STAR
+  : '.*'
+  ;
+
+DOUBLE_AMPER
+  : '&&'
+  ;
+
+DOUBLE_ANG
+  : '<>'  
+  ;
+
+DOUBLE_CAP
+  : '^^'
+  ; 
+
+DOUBLE_GREATER
+  : '>>'
+  ;
+  
+DOUBLE_LESS
+  : '<<'
+  ; 
+  
+DOUBLE_PIPE
+  : '||'
+  ;
+    
+
+EQUAL
+  : '=='
+  ;
+
+EQUALS
+  : '='
+  ;
+  
+GATE
+  : '#'
+  ; 
+
+GREATER
+  : '>'
+  ;
+
+GREATER_EQUAL
+  : '>='
+  ; 
+
+LESS
+  : '<'
+  ;
+
+LESS_EQUAL
+  : '<='
+  ;
+
+MINUS
+  : '-'
+  ;
+
+NOT_EQUAL
+  : '!='
+  ;
+
+PLUS
+  : '+'
+  ;
+
+QUESTION_MARK
+  : '?'
+  ;
+
+SEMICOLON
+  : ';'
+  ;
+
+SLASH
+  : '/'
+  ; 
+  
+TILDE 
+  : '~'
+  ;
+  
+TIMES
+  : '*'
+  ;
+
+
+
+
+LEFT_PAREN
+        : '('
+        ;
+
+RIGHT_PAREN
+        : ')'
+        ;
+        
+LEFT_SQUARE
+        : '['
+        ;
+
+RIGHT_SQUARE
+        : ']'
+        ;        
+
+LEFT_CURLY
+        : '{'
+        ;
+
+RIGHT_CURLY
+        : '}'
+        ;
+        
+
+  
+
+
+/*  removed due to the use of '#'
+SH_STYLE_SINGLE_LINE_COMMENT  
+  : '#' (~('\r'|'\n'))* EOL?
+                { $channel=HIDDEN; setText("//"+getText().substring(1));}
+  ;
+*/       
+        
+C_STYLE_SINGLE_LINE_COMMENT 
+  : '//' (~('\r'|'\n'))* EOL?
+                { $channel=HIDDEN; }
+    ;
+
+MULTI_LINE_COMMENT
+  : '/*' (options{greedy=false;} : .)* '*/'
+                { $channel=HIDDEN; }
+  ;
+
+ID  
+  : IdentifierStart IdentifierPart*
+  | '`' IdentifierStart IdentifierPart* '`'
+  { state.text = $text.substring(1, $text.length() - 1);  }
+  ;
+  
+  
+MISC  :
+    //'!' | '%' | '^' | '*' | '-' | '+'  | '?' | '/' | '\'' | '\\' | '|' | '&' 
+    '!' | '%' | '^' | '\'' | '\\' | '|' | '&' 
+  ;
+ 
+
+VAR 
+  : '$' IdentifierPart+ 
+  ;
+
+fragment
+IdentifierStart
+    :   //'\u0024'
+        '\u0041'..'\u005a'
+    |   '\u005f'
+    |   '\u0061'..'\u007a'
+    |   '\u00a2'..'\u00a5'
+    |   '\u00aa'
+    |   '\u00b5'
+    |   '\u00ba'
+    |   '\u00c0'..'\u00d6'
+    |   '\u00d8'..'\u00f6'
+    |   '\u00f8'..'\u0236'
+    |   '\u0250'..'\u02c1'
+    |   '\u02c6'..'\u02d1'
+    |   '\u02e0'..'\u02e4'
+    |   '\u02ee'
+    |   '\u037a'
+    |   '\u0386'
+    |   '\u0388'..'\u038a'
+    |   '\u038c'
+    |   '\u038e'..'\u03a1'
+    |   '\u03a3'..'\u03ce'
+    |   '\u03d0'..'\u03f5'
+    |   '\u03f7'..'\u03fb'
+    |   '\u0400'..'\u0481'
+    |   '\u048a'..'\u04ce'
+    |   '\u04d0'..'\u04f5'
+    |   '\u04f8'..'\u04f9'
+    |   '\u0500'..'\u050f'
+    |   '\u0531'..'\u0556'
+    |   '\u0559'
+    |   '\u0561'..'\u0587'
+    |   '\u05d0'..'\u05ea'
+    |   '\u05f0'..'\u05f2'
+    |   '\u0621'..'\u063a'
+    |   '\u0640'..'\u064a'
+    |   '\u066e'..'\u066f'
+    |   '\u0671'..'\u06d3'
+    |   '\u06d5'
+    |   '\u06e5'..'\u06e6'
+    |   '\u06ee'..'\u06ef'
+    |   '\u06fa'..'\u06fc'
+    |   '\u06ff'
+    |   '\u0710'
+    |   '\u0712'..'\u072f'
+    |   '\u074d'..'\u074f'
+    |   '\u0780'..'\u07a5'
+    |   '\u07b1'
+    |   '\u0904'..'\u0939'
+    |   '\u093d'
+    |   '\u0950'
+    |   '\u0958'..'\u0961'
+    |   '\u0985'..'\u098c'
+    |   '\u098f'..'\u0990'
+    |   '\u0993'..'\u09a8'
+    |   '\u09aa'..'\u09b0'
+    |   '\u09b2'
+    |   '\u09b6'..'\u09b9'
+    |   '\u09bd'
+    |   '\u09dc'..'\u09dd'
+    |   '\u09df'..'\u09e1'
+    |   '\u09f0'..'\u09f3'
+    |   '\u0a05'..'\u0a0a'
+    |   '\u0a0f'..'\u0a10'
+    |   '\u0a13'..'\u0a28'
+    |   '\u0a2a'..'\u0a30'
+    |   '\u0a32'..'\u0a33'
+    |   '\u0a35'..'\u0a36'
+    |   '\u0a38'..'\u0a39'
+    |   '\u0a59'..'\u0a5c'
+    |   '\u0a5e'
+    |   '\u0a72'..'\u0a74'
+    |   '\u0a85'..'\u0a8d'
+    |   '\u0a8f'..'\u0a91'
+    |   '\u0a93'..'\u0aa8'
+    |   '\u0aaa'..'\u0ab0'
+    |   '\u0ab2'..'\u0ab3'
+    |   '\u0ab5'..'\u0ab9'
+    |   '\u0abd'
+    |   '\u0ad0'
+    |   '\u0ae0'..'\u0ae1'
+    |   '\u0af1'
+    |   '\u0b05'..'\u0b0c'
+    |   '\u0b0f'..'\u0b10'
+    |   '\u0b13'..'\u0b28'
+    |   '\u0b2a'..'\u0b30'
+    |   '\u0b32'..'\u0b33'
+    |   '\u0b35'..'\u0b39'
+    |   '\u0b3d'
+    |   '\u0b5c'..'\u0b5d'
+    |   '\u0b5f'..'\u0b61'
+    |   '\u0b71'
+    |   '\u0b83'
+    |   '\u0b85'..'\u0b8a'
+    |   '\u0b8e'..'\u0b90'
+    |   '\u0b92'..'\u0b95'
+    |   '\u0b99'..'\u0b9a'
+    |   '\u0b9c'
+    |   '\u0b9e'..'\u0b9f'
+    |   '\u0ba3'..'\u0ba4'
+    |   '\u0ba8'..'\u0baa'
+    |   '\u0bae'..'\u0bb5'
+    |   '\u0bb7'..'\u0bb9'
+    |   '\u0bf9'
+    |   '\u0c05'..'\u0c0c'
+    |   '\u0c0e'..'\u0c10'
+    |   '\u0c12'..'\u0c28'
+    |   '\u0c2a'..'\u0c33'
+    |   '\u0c35'..'\u0c39'
+    |   '\u0c60'..'\u0c61'
+    |   '\u0c85'..'\u0c8c'
+    |   '\u0c8e'..'\u0c90'
+    |   '\u0c92'..'\u0ca8'
+    |   '\u0caa'..'\u0cb3'
+    |   '\u0cb5'..'\u0cb9'
+    |   '\u0cbd'
+    |   '\u0cde'
+    |   '\u0ce0'..'\u0ce1'
+    |   '\u0d05'..'\u0d0c'
+    |   '\u0d0e'..'\u0d10'
+    |   '\u0d12'..'\u0d28'
+    |   '\u0d2a'..'\u0d39'
+    |   '\u0d60'..'\u0d61'
+    |   '\u0d85'..'\u0d96'
+    |   '\u0d9a'..'\u0db1'
+    |   '\u0db3'..'\u0dbb'
+    |   '\u0dbd'
+    |   '\u0dc0'..'\u0dc6'
+    |   '\u0e01'..'\u0e30'
+    |   '\u0e32'..'\u0e33'
+    |   '\u0e3f'..'\u0e46'
+    |   '\u0e81'..'\u0e82'
+    |   '\u0e84'
+    |   '\u0e87'..'\u0e88'
+    |   '\u0e8a'
+    |   '\u0e8d'
+    |   '\u0e94'..'\u0e97'
+    |   '\u0e99'..'\u0e9f'
+    |   '\u0ea1'..'\u0ea3'
+    |   '\u0ea5'
+    |   '\u0ea7'
+    |   '\u0eaa'..'\u0eab'
+    |   '\u0ead'..'\u0eb0'
+    |   '\u0eb2'..'\u0eb3'
+    |   '\u0ebd'
+    |   '\u0ec0'..'\u0ec4'
+    |   '\u0ec6'
+    |   '\u0edc'..'\u0edd'
+    |   '\u0f00'
+    |   '\u0f40'..'\u0f47'
+    |   '\u0f49'..'\u0f6a'
+    |   '\u0f88'..'\u0f8b'
+    |   '\u1000'..'\u1021'
+    |   '\u1023'..'\u1027'
+    |   '\u1029'..'\u102a'
+    |   '\u1050'..'\u1055'
+    |   '\u10a0'..'\u10c5'
+    |   '\u10d0'..'\u10f8'
+    |   '\u1100'..'\u1159'
+    |   '\u115f'..'\u11a2'
+    |   '\u11a8'..'\u11f9'
+    |   '\u1200'..'\u1206'
+    |   '\u1208'..'\u1246'
+    |   '\u1248'
+    |   '\u124a'..'\u124d'
+    |   '\u1250'..'\u1256'
+    |   '\u1258'
+    |   '\u125a'..'\u125d'
+    |   '\u1260'..'\u1286'
+    |   '\u1288'
+    |   '\u128a'..'\u128d'
+    |   '\u1290'..'\u12ae'
+    |   '\u12b0'
+    |   '\u12b2'..'\u12b5'
+    |   '\u12b8'..'\u12be'
+    |   '\u12c0'
+    |   '\u12c2'..'\u12c5'
+    |   '\u12c8'..'\u12ce'
+    |   '\u12d0'..'\u12d6'
+    |   '\u12d8'..'\u12ee'
+    |   '\u12f0'..'\u130e'
+    |   '\u1310'
+    |   '\u1312'..'\u1315'
+    |   '\u1318'..'\u131e'
+    |   '\u1320'..'\u1346'
+    |   '\u1348'..'\u135a'
+    |   '\u13a0'..'\u13f4'
+    |   '\u1401'..'\u166c'
+    |   '\u166f'..'\u1676'
+    |   '\u1681'..'\u169a'
+    |   '\u16a0'..'\u16ea'
+    |   '\u16ee'..'\u16f0'
+    |   '\u1700'..'\u170c'
+    |   '\u170e'..'\u1711'
+    |   '\u1720'..'\u1731'
+    |   '\u1740'..'\u1751'
+    |   '\u1760'..'\u176c'
+    |   '\u176e'..'\u1770'
+    |   '\u1780'..'\u17b3'
+    |   '\u17d7' 
+    |   '\u17db'..'\u17dc'
+    |   '\u1820'..'\u1877'
+    |   '\u1880'..'\u18a8'
+    |   '\u1900'..'\u191c'
+    |   '\u1950'..'\u196d'
+    |   '\u1970'..'\u1974'
+    |   '\u1d00'..'\u1d6b'
+    |   '\u1e00'..'\u1e9b'
+    |   '\u1ea0'..'\u1ef9'
+    |   '\u1f00'..'\u1f15'
+    |   '\u1f18'..'\u1f1d'
+    |   '\u1f20'..'\u1f45'
+    |   '\u1f48'..'\u1f4d'
+    |   '\u1f50'..'\u1f57'
+    |   '\u1f59'
+    |   '\u1f5b'
+    |   '\u1f5d'
+    |   '\u1f5f'..'\u1f7d'
+    |   '\u1f80'..'\u1fb4'
+    |   '\u1fb6'..'\u1fbc'
+    |   '\u1fbe'
+    |   '\u1fc2'..'\u1fc4'
+    |   '\u1fc6'..'\u1fcc'
+    |   '\u1fd0'..'\u1fd3'
+    |   '\u1fd6'..'\u1fdb'
+    |   '\u1fe0'..'\u1fec'
+    |   '\u1ff2'..'\u1ff4'
+    |   '\u1ff6'..'\u1ffc'
+    |   '\u203f'..'\u2040'
+    |   '\u2054'
+    |   '\u2071'
+    |   '\u207f'
+    |   '\u20a0'..'\u20b1'
+    |   '\u2102'
+    |   '\u2107'
+    |   '\u210a'..'\u2113'
+    |   '\u2115'
+    |   '\u2119'..'\u211d'
+    |   '\u2124'
+    |   '\u2126'
+    |   '\u2128'
+    |   '\u212a'..'\u212d'
+    |   '\u212f'..'\u2131'
+    |   '\u2133'..'\u2139'
+    |   '\u213d'..'\u213f'
+    |   '\u2145'..'\u2149'
+    |   '\u2160'..'\u2183'
+    |   '\u3005'..'\u3007'
+    |   '\u3021'..'\u3029'
+    |   '\u3031'..'\u3035'
+    |   '\u3038'..'\u303c'
+    |   '\u3041'..'\u3096'
+    |   '\u309d'..'\u309f'
+    |   '\u30a1'..'\u30ff'
+    |   '\u3105'..'\u312c'
+    |   '\u3131'..'\u318e'
+    |   '\u31a0'..'\u31b7'
+    |   '\u31f0'..'\u31ff'
+    |   '\u3400'..'\u4db5'
+    |   '\u4e00'..'\u9fa5'
+    |   '\ua000'..'\ua48c'
+    |   '\uac00'..'\ud7a3'
+    |   '\uf900'..'\ufa2d'
+    |   '\ufa30'..'\ufa6a'
+    |   '\ufb00'..'\ufb06'
+    |   '\ufb13'..'\ufb17'
+    |   '\ufb1d'
+    |   '\ufb1f'..'\ufb28'
+    |   '\ufb2a'..'\ufb36'
+    |   '\ufb38'..'\ufb3c'
+    |   '\ufb3e'
+    |   '\ufb40'..'\ufb41'
+    |   '\ufb43'..'\ufb44'
+    |   '\ufb46'..'\ufbb1'
+    |   '\ufbd3'..'\ufd3d'
+    |   '\ufd50'..'\ufd8f'
+    |   '\ufd92'..'\ufdc7'
+    |   '\ufdf0'..'\ufdfc'
+    |   '\ufe33'..'\ufe34'
+    |   '\ufe4d'..'\ufe4f'
+    |   '\ufe69'
+    |   '\ufe70'..'\ufe74'
+    |   '\ufe76'..'\ufefc'
+    |   '\uff04'
+    |   '\uff21'..'\uff3a'
+    |   '\uff3f'
+    |   '\uff41'..'\uff5a'
+    |   '\uff65'..'\uffbe'
+    |   '\uffc2'..'\uffc7'
+    |   '\uffca'..'\uffcf'
+    |   '\uffd2'..'\uffd7'
+    |   '\uffda'..'\uffdc'
+    |   '\uffe0'..'\uffe1'
+    |   '\uffe5'..'\uffe6'
+// UTF-16:    |   ('\ud800'..'\udbff') ('\udc00'..'\udfff') 
+    ;                
+                       
+fragment 
+IdentifierPart
+    :   '\u0000'..'\u0008'
+    |   '\u000e'..'\u001b'
+    |   '\u0024'
+    |   '\u0030'..'\u0039'
+    |   '\u0041'..'\u005a'
+    |   '\u005f'
+    |   '\u0061'..'\u007a'
+    |   '\u007f'..'\u009f'
+    |   '\u00a2'..'\u00a5'
+    |   '\u00aa'
+    |   '\u00ad'
+    |   '\u00b5'
+    |   '\u00ba'
+    |   '\u00c0'..'\u00d6'
+    |   '\u00d8'..'\u00f6'
+    |   '\u00f8'..'\u0236'
+    |   '\u0250'..'\u02c1'
+    |   '\u02c6'..'\u02d1'
+    |   '\u02e0'..'\u02e4'
+    |   '\u02ee'
+    |   '\u0300'..'\u0357'
+    |   '\u035d'..'\u036f'
+    |   '\u037a'
+    |   '\u0386'
+    |   '\u0388'..'\u038a'
+    |   '\u038c'
+    |   '\u038e'..'\u03a1'
+    |   '\u03a3'..'\u03ce'
+    |   '\u03d0'..'\u03f5'
+    |   '\u03f7'..'\u03fb'
+    |   '\u0400'..'\u0481'
+    |   '\u0483'..'\u0486'
+    |   '\u048a'..'\u04ce'
+    |   '\u04d0'..'\u04f5'
+    |   '\u04f8'..'\u04f9'
+    |   '\u0500'..'\u050f'
+    |   '\u0531'..'\u0556'
+    |   '\u0559'
+    |   '\u0561'..'\u0587'
+    |   '\u0591'..'\u05a1'
+    |   '\u05a3'..'\u05b9'
+    |   '\u05bb'..'\u05bd'
+    |   '\u05bf'
+    |   '\u05c1'..'\u05c2'
+    |   '\u05c4'
+    |   '\u05d0'..'\u05ea'
+    |   '\u05f0'..'\u05f2'
+    |   '\u0600'..'\u0603'
+    |   '\u0610'..'\u0615'
+    |   '\u0621'..'\u063a'
+    |   '\u0640'..'\u0658'
+    |   '\u0660'..'\u0669'
+    |   '\u066e'..'\u06d3'
+    |   '\u06d5'..'\u06dd'
+    |   '\u06df'..'\u06e8'
+    |   '\u06ea'..'\u06fc'
+    |   '\u06ff'
+    |   '\u070f'..'\u074a'
+    |   '\u074d'..'\u074f'
+    |   '\u0780'..'\u07b1'
+    |   '\u0901'..'\u0939'
+    |   '\u093c'..'\u094d'
+    |   '\u0950'..'\u0954'
+    |   '\u0958'..'\u0963'
+    |   '\u0966'..'\u096f'
+    |   '\u0981'..'\u0983'
+    |   '\u0985'..'\u098c'
+    |   '\u098f'..'\u0990'
+    |   '\u0993'..'\u09a8'
+    |   '\u09aa'..'\u09b0'
+    |   '\u09b2'
+    |   '\u09b6'..'\u09b9'
+    |   '\u09bc'..'\u09c4'
+    |   '\u09c7'..'\u09c8'
+    |   '\u09cb'..'\u09cd'
+    |   '\u09d7'
+    |   '\u09dc'..'\u09dd'
+    |   '\u09df'..'\u09e3'
+    |   '\u09e6'..'\u09f3'
+    |   '\u0a01'..'\u0a03'
+    |   '\u0a05'..'\u0a0a'
+    |   '\u0a0f'..'\u0a10'
+    |   '\u0a13'..'\u0a28'
+    |   '\u0a2a'..'\u0a30'
+    |   '\u0a32'..'\u0a33'
+    |   '\u0a35'..'\u0a36'
+    |   '\u0a38'..'\u0a39'
+    |   '\u0a3c'
+    |   '\u0a3e'..'\u0a42'
+    |   '\u0a47'..'\u0a48'
+    |   '\u0a4b'..'\u0a4d'
+    |   '\u0a59'..'\u0a5c'
+    |   '\u0a5e'
+    |   '\u0a66'..'\u0a74'
+    |   '\u0a81'..'\u0a83'
+    |   '\u0a85'..'\u0a8d'
+    |   '\u0a8f'..'\u0a91'
+    |   '\u0a93'..'\u0aa8'
+    |   '\u0aaa'..'\u0ab0'
+    |   '\u0ab2'..'\u0ab3'
+    |   '\u0ab5'..'\u0ab9'
+    |   '\u0abc'..'\u0ac5'
+    |   '\u0ac7'..'\u0ac9'
+    |   '\u0acb'..'\u0acd'
+    |   '\u0ad0'
+    |   '\u0ae0'..'\u0ae3'
+    |   '\u0ae6'..'\u0aef'
+    |   '\u0af1'
+    |   '\u0b01'..'\u0b03'
+    |   '\u0b05'..'\u0b0c'        
+    |   '\u0b0f'..'\u0b10'
+    |   '\u0b13'..'\u0b28'
+    |   '\u0b2a'..'\u0b30'
+    |   '\u0b32'..'\u0b33'
+    |   '\u0b35'..'\u0b39'
+    |   '\u0b3c'..'\u0b43'
+    |   '\u0b47'..'\u0b48'
+    |   '\u0b4b'..'\u0b4d'
+    |   '\u0b56'..'\u0b57'
+    |   '\u0b5c'..'\u0b5d'
+    |   '\u0b5f'..'\u0b61'
+    |   '\u0b66'..'\u0b6f'
+    |   '\u0b71'
+    |   '\u0b82'..'\u0b83'
+    |   '\u0b85'..'\u0b8a'
+    |   '\u0b8e'..'\u0b90'
+    |   '\u0b92'..'\u0b95'
+    |   '\u0b99'..'\u0b9a'
+    |   '\u0b9c'
+    |   '\u0b9e'..'\u0b9f'
+    |   '\u0ba3'..'\u0ba4'
+    |   '\u0ba8'..'\u0baa'
+    |   '\u0bae'..'\u0bb5'
+    |   '\u0bb7'..'\u0bb9'
+    |   '\u0bbe'..'\u0bc2'
+    |   '\u0bc6'..'\u0bc8'
+    |   '\u0bca'..'\u0bcd'
+    |   '\u0bd7'
+    |   '\u0be7'..'\u0bef'
+    |   '\u0bf9'
+    |   '\u0c01'..'\u0c03'
+    |   '\u0c05'..'\u0c0c'
+    |   '\u0c0e'..'\u0c10'
+    |   '\u0c12'..'\u0c28'
+    |   '\u0c2a'..'\u0c33'
+    |   '\u0c35'..'\u0c39'
+    |   '\u0c3e'..'\u0c44'
+    |   '\u0c46'..'\u0c48'
+    |   '\u0c4a'..'\u0c4d'
+    |   '\u0c55'..'\u0c56'
+    |   '\u0c60'..'\u0c61'
+    |   '\u0c66'..'\u0c6f'        
+    |   '\u0c82'..'\u0c83'
+    |   '\u0c85'..'\u0c8c'
+    |   '\u0c8e'..'\u0c90'
+    |   '\u0c92'..'\u0ca8'
+    |   '\u0caa'..'\u0cb3'
+    |   '\u0cb5'..'\u0cb9'
+    |   '\u0cbc'..'\u0cc4'
+    |   '\u0cc6'..'\u0cc8'
+    |   '\u0cca'..'\u0ccd'
+    |   '\u0cd5'..'\u0cd6'
+    |   '\u0cde'
+    |   '\u0ce0'..'\u0ce1'
+    |   '\u0ce6'..'\u0cef'
+    |   '\u0d02'..'\u0d03'
+    |   '\u0d05'..'\u0d0c'
+    |   '\u0d0e'..'\u0d10'
+    |   '\u0d12'..'\u0d28'
+    |   '\u0d2a'..'\u0d39'
+    |   '\u0d3e'..'\u0d43'
+    |   '\u0d46'..'\u0d48'
+    |   '\u0d4a'..'\u0d4d'
+    |   '\u0d57'
+    |   '\u0d60'..'\u0d61'
+    |   '\u0d66'..'\u0d6f'
+    |   '\u0d82'..'\u0d83'
+    |   '\u0d85'..'\u0d96'
+    |   '\u0d9a'..'\u0db1'
+    |   '\u0db3'..'\u0dbb'
+    |   '\u0dbd'
+    |   '\u0dc0'..'\u0dc6'
+    |   '\u0dca'
+    |   '\u0dcf'..'\u0dd4'
+    |   '\u0dd6'
+    |   '\u0dd8'..'\u0ddf'
+    |   '\u0df2'..'\u0df3'
+    |   '\u0e01'..'\u0e3a'
+    |   '\u0e3f'..'\u0e4e'
+    |   '\u0e50'..'\u0e59'
+    |   '\u0e81'..'\u0e82'
+    |   '\u0e84'
+    |   '\u0e87'..'\u0e88'        
+    |   '\u0e8a'
+    |   '\u0e8d'
+    |   '\u0e94'..'\u0e97'
+    |   '\u0e99'..'\u0e9f'
+    |   '\u0ea1'..'\u0ea3'
+    |   '\u0ea5'
+    |   '\u0ea7'
+    |   '\u0eaa'..'\u0eab'
+    |   '\u0ead'..'\u0eb9'
+    |   '\u0ebb'..'\u0ebd'
+    |   '\u0ec0'..'\u0ec4'
+    |   '\u0ec6'
+    |   '\u0ec8'..'\u0ecd'
+    |   '\u0ed0'..'\u0ed9'
+    |   '\u0edc'..'\u0edd'
+    |   '\u0f00'
+    |   '\u0f18'..'\u0f19'
+    |   '\u0f20'..'\u0f29'
+    |   '\u0f35'
+    |   '\u0f37'
+    |   '\u0f39'
+    |   '\u0f3e'..'\u0f47'
+    |   '\u0f49'..'\u0f6a'
+    |   '\u0f71'..'\u0f84'
+    |   '\u0f86'..'\u0f8b'
+    |   '\u0f90'..'\u0f97'
+    |   '\u0f99'..'\u0fbc'
+    |   '\u0fc6'
+    |   '\u1000'..'\u1021'
+    |   '\u1023'..'\u1027'
+    |   '\u1029'..'\u102a'
+    |   '\u102c'..'\u1032'
+    |   '\u1036'..'\u1039'
+    |   '\u1040'..'\u1049'
+    |   '\u1050'..'\u1059'
+    |   '\u10a0'..'\u10c5'
+    |   '\u10d0'..'\u10f8'
+    |   '\u1100'..'\u1159'
+    |   '\u115f'..'\u11a2'
+    |   '\u11a8'..'\u11f9'
+    |   '\u1200'..'\u1206'        
+    |   '\u1208'..'\u1246'
+    |   '\u1248'
+    |   '\u124a'..'\u124d'
+    |   '\u1250'..'\u1256'
+    |   '\u1258'
+    |   '\u125a'..'\u125d'
+    |   '\u1260'..'\u1286'
+    |   '\u1288'        
+    |   '\u128a'..'\u128d'
+    |   '\u1290'..'\u12ae'
+    |   '\u12b0'
+    |   '\u12b2'..'\u12b5'
+    |   '\u12b8'..'\u12be'
+    |   '\u12c0'
+    |   '\u12c2'..'\u12c5'
+    |   '\u12c8'..'\u12ce'
+    |   '\u12d0'..'\u12d6'
+    |   '\u12d8'..'\u12ee'
+    |   '\u12f0'..'\u130e'
+    |   '\u1310'
+    |   '\u1312'..'\u1315'
+    |   '\u1318'..'\u131e'
+    |   '\u1320'..'\u1346'
+    |   '\u1348'..'\u135a'
+    |   '\u1369'..'\u1371'
+    |   '\u13a0'..'\u13f4'
+    |   '\u1401'..'\u166c'
+    |   '\u166f'..'\u1676'
+    |   '\u1681'..'\u169a'
+    |   '\u16a0'..'\u16ea'
+    |   '\u16ee'..'\u16f0'
+    |   '\u1700'..'\u170c'
+    |   '\u170e'..'\u1714'
+    |   '\u1720'..'\u1734'
+    |   '\u1740'..'\u1753'
+    |   '\u1760'..'\u176c'
+    |   '\u176e'..'\u1770'
+    |   '\u1772'..'\u1773'
+    |   '\u1780'..'\u17d3'
+    |   '\u17d7'
+    |   '\u17db'..'\u17dd'
+    |   '\u17e0'..'\u17e9'
+    |   '\u180b'..'\u180d'
+    |   '\u1810'..'\u1819'
+    |   '\u1820'..'\u1877'
+    |   '\u1880'..'\u18a9'
+    |   '\u1900'..'\u191c'
+    |   '\u1920'..'\u192b'
+    |   '\u1930'..'\u193b'
+    |   '\u1946'..'\u196d'
+    |   '\u1970'..'\u1974'
+    |   '\u1d00'..'\u1d6b'
+    |   '\u1e00'..'\u1e9b'
+    |   '\u1ea0'..'\u1ef9'
+    |   '\u1f00'..'\u1f15'
+    |   '\u1f18'..'\u1f1d'
+    |   '\u1f20'..'\u1f45'
+    |   '\u1f48'..'\u1f4d'
+    |   '\u1f50'..'\u1f57'
+    |   '\u1f59'
+    |   '\u1f5b'
+    |   '\u1f5d'
+    |   '\u1f5f'..'\u1f7d'
+    |   '\u1f80'..'\u1fb4'
+    |   '\u1fb6'..'\u1fbc'        
+    |   '\u1fbe'
+    |   '\u1fc2'..'\u1fc4'
+    |   '\u1fc6'..'\u1fcc'
+    |   '\u1fd0'..'\u1fd3'
+    |   '\u1fd6'..'\u1fdb'
+    |   '\u1fe0'..'\u1fec'
+    |   '\u1ff2'..'\u1ff4'
+    |   '\u1ff6'..'\u1ffc'
+    |   '\u200c'..'\u200f'
+    |   '\u202a'..'\u202e'
+    |   '\u203f'..'\u2040'
+    |   '\u2054'
+    |   '\u2060'..'\u2063'
+    |   '\u206a'..'\u206f'
+    |   '\u2071'
+    |   '\u207f'
+    |   '\u20a0'..'\u20b1'
+    |   '\u20d0'..'\u20dc'
+    |   '\u20e1'
+    |   '\u20e5'..'\u20ea'
+    |   '\u2102'
+    |   '\u2107'
+    |   '\u210a'..'\u2113'
+    |   '\u2115'
+    |   '\u2119'..'\u211d'
+    |   '\u2124'
+    |   '\u2126'
+    |   '\u2128'
+    |   '\u212a'..'\u212d'
+    |   '\u212f'..'\u2131'
+    |   '\u2133'..'\u2139'
+    |   '\u213d'..'\u213f'
+    |   '\u2145'..'\u2149'
+    |   '\u2160'..'\u2183'
+    |   '\u3005'..'\u3007'
+    |   '\u3021'..'\u302f'        
+    |   '\u3031'..'\u3035'
+    |   '\u3038'..'\u303c'
+    |   '\u3041'..'\u3096'
+    |   '\u3099'..'\u309a'
+    |   '\u309d'..'\u309f'
+    |   '\u30a1'..'\u30ff'
+    |   '\u3105'..'\u312c'
+    |   '\u3131'..'\u318e'
+    |   '\u31a0'..'\u31b7'
+    |   '\u31f0'..'\u31ff'
+    |   '\u3400'..'\u4db5'
+    |   '\u4e00'..'\u9fa5'
+    |   '\ua000'..'\ua48c'
+    |   '\uac00'..'\ud7a3'
+    |   '\uf900'..'\ufa2d'
+    |   '\ufa30'..'\ufa6a'
+    |   '\ufb00'..'\ufb06'
+    |   '\ufb13'..'\ufb17'
+    |   '\ufb1d'..'\ufb28'
+    |   '\ufb2a'..'\ufb36'
+    |   '\ufb38'..'\ufb3c'
+    |   '\ufb3e'
+    |   '\ufb40'..'\ufb41'
+    |   '\ufb43'..'\ufb44'
+    |   '\ufb46'..'\ufbb1'
+    |   '\ufbd3'..'\ufd3d'
+    |   '\ufd50'..'\ufd8f'
+    |   '\ufd92'..'\ufdc7'
+    |   '\ufdf0'..'\ufdfc'
+    |   '\ufe00'..'\ufe0f'
+    |   '\ufe20'..'\ufe23'
+    |   '\ufe33'..'\ufe34'
+    |   '\ufe4d'..'\ufe4f'
+    |   '\ufe69'
+    |   '\ufe70'..'\ufe74'
+    |   '\ufe76'..'\ufefc'
+    |   '\ufeff'
+    |   '\uff04'
+    |   '\uff10'..'\uff19'
+    |   '\uff21'..'\uff3a'
+    |   '\uff3f'
+    |   '\uff41'..'\uff5a'
+    |   '\uff65'..'\uffbe'
+    |   '\uffc2'..'\uffc7'
+    |   '\uffca'..'\uffcf'
+    |   '\uffd2'..'\uffd7'
+    |   '\uffda'..'\uffdc'
+    |   '\uffe0'..'\uffe1'
+    |   '\uffe5'..'\uffe6'
+    |   '\ufff9'..'\ufffb' 
+// UTF-16    |   ('\ud800'..'\udbff') ('\udc00'..'\udfff')
+    ; 

Added: labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g
===================================================================
--- labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/main/resources/DRLv6Parser.g	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,1501 @@
+parser grammar DRLv6Parser;
+
+options {
+  language = Java;
+  output = AST;
+  tokenVocab = DRLv6Lexer;
+  k=5; 
+}
+      
+     
+tokens {
+  VT_COMPILATION_UNIT;
+  VT_PACKAGE_ID;
+  
+  VT_GLOBAL_ID;
+  VT_DATA_TYPE;
+  VT_DIM_SIZE;
+  
+  VT_FUNCTION_IMPORT;
+  VT_IMPORT_ID;
+  VT_FUNCTION_ID;
+  VT_PARAM;
+  VT_PARAM_LIST;
+
+  VT_TEMPLATE;
+  VT_TEMPLATE_ID;
+  VT_SLOT;
+  VT_SLOT_ID;
+  
+  VT_TYPE_DECLARE_ID;
+  
+  VT_RULE_ID; 
+  VT_ATTRIBUTES;
+  VT_DIALECT;
+
+  VT_RHS_CHUNK;
+  VT_CURLY_CHUNK;
+  VT_SQUARE_CHUNK;
+  VT_PAREN_CHUNK;
+  
+  VT_NEW_OBJ;
+  VT_TYPE;
+  VT_ARGS;
+  
+  VT_AND_IMPLICIT;
+  VT_IMPLIES; 
+  VT_OR;
+  VT_NEG;
+  VT_XOR;
+  VT_EQUIV;
+  VT_AND;
+  
+  VT_HEDGE_VERY;
+  VT_HEDGE_MOL;
+  
+  VT_EXISTS;
+  VT_FORALL;
+  VT_NEXISTS;
+    
+  VT_PATTERN;
+  VT_ENABLED;
+  VT_QUERY_PATTERN;
+  
+  VT_POSITIONAL_VAR;
+  VT_POSITIONAL_CONST;
+  VT_POSITIONAL_INDEX;
+  
+  VT_BINDING;
+  VT_FIELD;
+  VT_EXPR;
+  
+  VT_LIST;
+  
+  VT_BEHAVIOR;
+  VT_ENTRYPOINT;
+  VT_ENTRYPOINT_ID;
+  VT_FROM_SOURCE;
+  VT_EXPRESSION_CHAIN;
+  
+  VT_ACCUMULATE_INIT_CLAUSE;
+  VT_ACCUMULATE_ID_CLAUSE;
+}
+  
+ at parser::header {
+  package org.drools.lang;
+  
+  import java.util.List;
+  import java.util.LinkedList;
+}
+
+ 
+
+/**************************** SCOPE *******************************************/
+
+compilation_unit
+  : package_statement?
+    statement*
+    EOF
+    -> ^(VT_COMPILATION_UNIT package_statement? statement*) 
+  ;
+  
+  
+/**************************** PACKAGE *******************************************/  
+   
+
+package_statement
+  : PACKAGE
+    package_id SEMICOLON?
+    -> ^(PACKAGE package_id)
+  ;
+  
+package_id
+  : id+=ID ( id+=DOT id+=ID )*  
+    -> ^(VT_PACKAGE_ID ID+)
+  ;
+
+
+
+
+/**************************** STATEMENTS *******************************************/
+
+statement
+  : function_import_statement   
+  | import_statement  
+  | global  
+  | function
+  // | template
+  | type_declaration
+  | rule
+  | query
+  //| rule_attribute    // why???
+  ;
+
+
+/**************************** GLOBAL + DATATYPE *******************************************/
+global
+  : GLOBAL data_type global_id SEMICOLON?
+    -> ^(GLOBAL data_type global_id)
+  ;
+
+global_id
+  : id=ID 
+    -> VT_GLOBAL_ID[$id]
+  ;
+  
+data_type
+ at init{
+ int dim=0;
+}
+  : id+=ID ( DOT id+=ID )* (dimension_definition {dim++;})*
+    -> ^(VT_DATA_TYPE VT_DIM_SIZE[$start,""+dim] $id+ )
+  ;
+dimension_definition
+  : LEFT_SQUARE RIGHT_SQUARE 
+  ;
+
+
+/**************************** IMPORT *******************************************/
+import_statement
+  : IMPORT import_name SEMICOLON?
+    -> ^(IMPORT import_name)
+  ;
+
+function_import_statement
+  : imp=IMPORT FUNCTION import_name SEMICOLON?
+    -> ^(VT_FUNCTION_IMPORT[$imp] FUNCTION import_name)
+  ;
+
+import_name 
+  : id+=ID ( id+=DOT id+=ID )* id+=DOT_STAR?
+    -> ^(VT_IMPORT_ID ID+ DOT_STAR?)
+  ;
+
+
+/**************************** FUNCTION *******************************************/
+function
+  : FUNCTION data_type? function_id parameters curly_chunk
+    -> ^(FUNCTION data_type? function_id parameters curly_chunk)
+  ;
+
+function_id
+  : id=ID
+    -> VT_FUNCTION_ID[$id]
+  ;
+
+parameters
+  : LEFT_PAREN 
+      ( param_definition (COMMA param_definition)* )?
+    RIGHT_PAREN 
+    -> ^(VT_PARAM_LIST param_definition*)
+  ;
+
+param_definition
+  : data_type argument
+    -> ^(VT_PARAM data_type argument)
+  ;
+
+argument
+  : ID //dimension_definition*
+  ;
+
+
+
+/**************************** TEMPLATE *******************************************/
+
+//TODO : What for?? proto-declare??
+/*
+template
+  : 
+    TEMPLATE template_id 
+    semi1=SEMICOLON?
+    template_slot+
+    end=END semi2=SEMICOLON?
+    -> ^(TEMPLATE template_id template_slot+ END)
+  ;
+
+template_id
+  :   id=ID
+     -> VT_TEMPLATE_ID[$id]
+  |   id=STRING
+     -> VT_TEMPLATE_ID[$id]
+  ;
+
+template_slot
+  : data_type slot_id SEMICOLON?
+    -> ^(VT_SLOT data_type slot_id)
+  ;
+
+slot_id
+  : id=ID
+    -> VT_SLOT_ID[$id]
+  ;
+*/
+
+
+
+type_declaration
+  : DECLARE  type_declare_id
+    type_declare_attributes?
+    decl_field*
+    END SEMICOLON?
+    -> ^(DECLARE type_declare_id type_declare_attributes? decl_field*)
+  ;
+
+type_declare_id
+  :   id=ID
+     -> VT_TYPE_DECLARE_ID[$id]
+  ;
+
+type_declare_attributes
+  :      
+          type_declare_attribute+
+          -> ^(VT_ATTRIBUTES type_declare_attribute+)                    
+  ;
+
+type_declare_attribute
+  : 
+            tda_role
+        |   type_declare_att_semantic        
+  ;
+  
+type_declare_att_semantic
+  :         tda_namespace
+        |   tda_subclass
+        |   tda_subproperty
+        |   tda_disjoint
+        |   tda_symmetric
+        |   tda_transitive
+        |   tda_inverse
+  ;  
+  
+tda_role
+  :     AT! ROLE^ LEFT_PAREN! ( EVENT | ENTITY | PROPERTY | TYPE ) RIGHT_PAREN!
+  ;
+  
+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!
+  ;
+
+tda_inverse
+  :    AT! INVERSE^ LEFT_PAREN! ID RIGHT_PAREN!
+  ;  
+  
+tda_symmetric
+  :   AT! SYMMETRIC^
+  ;
+  
+ tda_transitive
+  :   AT! TRANSITIVE^
+  ;  
+  
+  
+  
+
+/*
+decl_metadata
+  :   AT^ ID paren_chunk?
+  ;
+*/
+
+decl_field
+  : ID  
+    decl_field_initialization? 
+    COLON 
+    data_type
+    decl_field_attributes?
+    -> ^(VT_FIELD decl_field_attributes? ID data_type decl_field_initialization? )
+  ;
+
+decl_field_initialization
+  : EQUALS paren_chunk
+  -> ^(EQUALS paren_chunk)
+  ;
+
+ 
+decl_field_attributes
+  :
+      AT LEFT_SQUARE
+          decl_field_attribute (COMMA decl_field_attribute)*         
+      RIGHT_SQUARE
+      -> ^(VT_ATTRIBUTES decl_field_attribute+)      
+  ;
+
+decl_field_attribute
+  :
+    KEY 
+  ;
+
+
+/**************************** RULES *******************************************/
+
+
+
+
+
+rule
+  : RULE rule_id (EXTEND rule_id)?    
+    rule_metadata* 
+    rule_attributes? 
+    when_part? 
+    then_part
+    -> ^(RULE rule_id ^(EXTEND rule_id)? rule_metadata* rule_attributes? when_part? then_part)
+  ;
+  
+
+
+rule_id
+  :   id=ID 
+    -> VT_RULE_ID[$id]
+  |   id=STRING
+    -> VT_RULE_ID[$id]
+  ;
+
+rule_metadata
+  : AT! ID^ paren_chunk?
+  ;
+
+
+
+/**************************** RULE ATTRIBS *******************************************/
+
+
+rule_attributes
+  : rule_attribute ( COMMA? rule_attribute)*
+    -> ^(VT_ATTRIBUTES rule_attribute+)
+  ;
+
+rule_attribute
+  : ra_salience 
+  | ra_no_loop
+  | ra_agenda_group  
+  | ra_timer  
+  | ra_activation_group 
+  | ra_auto_focus 
+  | ra_date_effective 
+  | ra_date_expires 
+  | ra_enabled 
+  | ra_ruleflow_group 
+  | ra_lock_on_active
+  | ra_dialect 
+  | ra_calendars
+  | ra_defeats
+  | ra_direction  
+  | ra_deduction  
+  | ra_implication
+  ;
+
+ra_date_effective
+  : A_DATE_EFFECTIVE^ STRING
+  ;
+
+ra_date_expires
+  : A_DATE_EXPIRES^ STRING
+  ;
+  
+ra_enabled
+  : A_ENABLED^ 
+        ( BOOL 
+          | paren_chunk 
+          )
+  ; 
+
+ra_salience
+  : A_SALIENCE^
+    ( INT
+    | paren_chunk
+    )
+  ;
+
+ra_no_loop
+  : A_NOLOOP^ BOOL?
+  ;
+
+ra_auto_focus
+  : A_AUTOFOCUS^ BOOL?
+  ; 
+  
+ra_activation_group
+  : A_ACTGROUP^ STRING
+  ;
+
+ra_ruleflow_group
+  : A_RULEFLOWGROUP^ STRING
+  ;
+
+ra_agenda_group
+  : A_AGENDAGROUP^ STRING
+  ;
+
+ra_timer
+  : (A_DURATION^| A_TIMER^) 
+    (INT | paren_chunk )
+  ; 
+  
+ra_calendars
+  : A_CALENDAR^ string_list
+  ;
+
+string_list
+ at init {
+    StringBuilder buf = new StringBuilder();
+}
+  : first=STRING { buf.append( "[ "+ $first.text ); }
+     (COMMA next=STRING { buf.append( ", " + $next.text ); } )* 
+  -> STRING[$first,buf.toString()+" ]"]
+  ;
+
+
+ra_dialect
+  : A_DIALECT^ STRING
+  ;     
+  
+ra_lock_on_active
+  : A_LOCKONACTIVE^ BOOL?
+  ;
+
+ra_deduction  
+    :   A_DEDUCTION^ operator_attributes
+    ; 
+  
+  
+ra_implication
+    :   A_IMPLICATION^ operator_attributes
+    ;
+  
+ra_direction
+  : A_DIRECTION^
+  ;  
+
+ra_defeats
+  : DEFEATS^ STRING
+  ;
+
+
+
+
+operator_attributes
+    : AT LEFT_SQUARE single_operator_attribute (COMMA single_operator_attribute)* RIGHT_SQUARE
+      -> ^(VT_ATTRIBUTES single_operator_attribute+)
+    ;
+  
+
+single_operator_attribute
+  : oa_kind
+  | oa_id
+  | oa_params
+  | oa_degree
+  | oa_merge
+  | oa_filter
+  | oa_missing
+  | oa_defeat
+  | oa_default
+  | oa_crisp
+  ;
+
+oa_kind
+  :   OA_KIND^ EQUALS STRING
+  ;
+  
+oa_id
+  : OA_ID^ EQUALS STRING
+  ;
+
+oa_params
+  : OA_PARAMS^ EQUALS STRING
+  ;
+
+oa_degree
+  : OA_DEGREE^ EQUALS STRING
+  ;
+  
+oa_crisp
+  : OA_CRISP^
+  ;   
+
+oa_merge
+  : OA_MERGE^ EQUALS STRING
+  ;   
+    
+oa_filter
+  : OA_FILTER^ EQUALS STRING
+  ;
+
+oa_missing
+  : OA_MISSING^ EQUALS STRING
+  ;
+        
+oa_defeat
+  : OA_DEFEAT^ 
+  ; 
+
+oa_default
+  : OA_DEFAULT^
+  ;
+
+
+
+
+/**************************** LHS *******************************************/
+
+
+when_part
+  : WHEN^
+    lhs_root
+  ;
+
+lhs_root
+  : lhs_implies*
+  ->  ^(VT_AND_IMPLICIT lhs_implies*)
+  ;
+
+
+
+lhs_implies
+  : left=lhs_or (imp=imply_connective operator_attributes? right=lhs_or)? 
+    -> {imp != null}? ^($imp operator_attributes? $left $right)    
+    -> ^($left)
+  ;
+  
+lhs_or
+ at init{
+  Token orToken = null;
+  ParserRuleReturnScope seq = null;
+}
+  : ld=lhs_diff 
+            {seq=ld;}
+        ( lios=lhs_or_sequitur[seq.getTree()]
+      {seq=lios;}
+  )*
+          -> {lios==null}? ^($ld)
+          -> ^($lios)
+  ;
+  
+lhs_or_sequitur[Object leftChild]
+  : or=or_connective^ (atts=operator_attributes!)? rightChild=lhs_diff!
+             {
+               Tree t = ((Tree) or.getTree());               
+               if (atts != null)
+                 t.addChild((Tree) atts.getTree());
+              
+             t.addChild((Tree) leftChild);
+       t.addChild((Tree) rightChild.getTree());           
+           } 
+  ;
+  
+  
+
+
+lhs_diff
+  : lhs_and (( xor_connective^ | eq_connective^ ) operator_attributes? lhs_and)?
+  ;
+    
+  
+  
+  
+      
+lhs_and
+ at init{
+  Token orToken = null;
+  ParserRuleReturnScope seq = null;
+}
+  : ld=lhs_unary
+            {seq=ld;}
+        ( lias=lhs_and_sequitur[seq.getTree()]
+      {seq=lias;}
+  )*
+          -> {lias==null}? ^($ld)
+          -> ^($lias)
+  ;
+  
+lhs_and_sequitur[Object leftChild]
+  : and=and_connective^ (atts=operator_attributes!)? rightChild=lhs_unary!
+             {
+               Tree t = ((Tree) and.getTree());                
+               if (atts != null)
+                 t.addChild((Tree) atts.getTree());
+              
+             t.addChild((Tree) leftChild);
+       t.addChild((Tree) rightChild.getTree());           
+           } 
+  ;
+  
+lhs_unary
+  : lhs_modified_unary  
+  |   lhs_query
+  ;
+
+lhs_modified_unary
+  : 
+    unary_operator^  operator_attributes? lhs_modified_unary
+  | LEFT_PAREN! lhs_root RIGHT_PAREN!    
+  | lhs_quantifiexpr
+  | lhs_label_atom_pattern
+  ;
+
+
+lhs_quantifiexpr
+  : lhs_exists
+  | lhs_not
+  | lhs_forall
+  ;
+
+
+lhs_exists  
+  : lab=label? EXISTS operator_attributes?
+  (
+    LEFT_PAREN lhs_root RIGHT_PAREN
+  | lhs_atom_pattern  
+  )
+  -> {lab==null}? ^(VT_EXISTS operator_attributes? lhs_root? lhs_atom_pattern?)
+  -> ^(VT_BINDING label ^(VT_EXISTS operator_attributes? lhs_root? lhs_atom_pattern?)) 
+  ;
+
+lhs_forall  
+  : FORALL operator_attributes?
+  (
+        pat=lhs_atom_pattern
+    |   LEFT_PAREN lhs_unary lhs_unary RIGHT_PAREN   
+  )
+  -> {pat!=null}? ^(VT_FORALL operator_attributes? lhs_atom_pattern)
+  -> ^(VT_FORALL operator_attributes? lhs_unary lhs_unary)
+  ; 
+  
+lhs_not   
+  : NOT operator_attributes?
+  (
+    LEFT_PAREN lhs_root RIGHT_PAREN
+  | lhs_atom_pattern  
+  )
+  -> ^(VT_NEXISTS operator_attributes? lhs_root? lhs_atom_pattern?)
+  ; 
+
+/*
+lhs_atom_pattern
+  : lab=label? ID LEFT_PAREN constraints? RIGHT_PAREN operator_attributes? over_clause? from?
+    -> {lab==null}? ^(VT_AND operator_attributes? VT_ENABLED ^(VT_PATTERN ID) constraints? over_clause? from?)
+    -> ^(label ^(VT_AND operator_attributes? VT_ENABLED ^(VT_PATTERN ID) constraints? over_clause? from?))
+  ; 
+*/
+
+lhs_label_atom_pattern
+  : lab=label? lhs_atom_pattern
+    -> {lab==null}? lhs_atom_pattern 
+    -> ^(VT_BINDING label lhs_atom_pattern)
+  ;  
+
+lhs_atom_pattern
+  : ID LEFT_PAREN constraints? RIGHT_PAREN operator_attributes? over_clause? from?
+  -> ^(VT_AND operator_attributes? VT_ENABLED ^(VT_PATTERN ID) constraints? over_clause? from?)
+  ;
+
+
+/*********************************************** INSIDE PATTERN *****************************************/
+
+
+
+constraints
+  : positional_constraints
+    -> ^(VT_AND positional_constraints)
+  | slotted_constraints
+    -> ^(VT_AND slotted_constraints)
+  ;
+  
+positional_constraints
+ at init{
+  int j = 0;
+}
+  : positional_constraint[j++] (COMMA! positional_constraint[j++])* (COMMA! slotted_constraint)*
+  ;
+    
+slotted_constraints
+  : slotted_constraint (COMMA! slotted_constraint)*
+  ;   
+  
+  
+
+positional_constraint[int j]
+ at init{
+  String idx = ""+j;
+}
+  : literal  
+    -> ^(VT_POSITIONAL_CONST VT_POSITIONAL_INDEX[$start,idx] literal)   
+  | VAR 
+    -> ^(VT_POSITIONAL_VAR VT_POSITIONAL_INDEX[$start,idx] VAR) 
+  ;
+                
+slotted_constraint
+  :   constr_implies
+  ; 
+
+
+
+literal
+options{
+k=6;
+}
+    :   STRING 
+    |   INT  
+    |   FLOAT 
+    |   BOOL 
+    |   NULL 
+    | literal_object
+    | list 
+    ;
+    
+list
+  : LEFT_CURLY list_members? RIGHT_CURLY  
+    ->^(VT_LIST list_members?)  
+  ; 
+
+list_members
+  : (literal|VAR) (COMMA! (literal|VAR))*
+  ;
+    
+  
+    
+literal_object
+  : NEW ID LEFT_PAREN literal_object_args? RIGHT_PAREN
+    -> ^(VT_NEW_OBJ ^(VT_TYPE ID) ^(VT_ARGS literal_object_args)?)
+  ;   
+  
+literal_object_args
+  :  method_args
+  ;
+  
+method_args
+  : method_arg (COMMA! method_arg)* 
+  ; 
+
+
+method_arg
+  : method_expr_root
+  ;
+
+
+// method expr roots can't start with () and have a slightly simpler structure than outer expressions
+method_expr_root
+  : method_expr_atom  ( (PLUS | MINUS) method_factor )*
+  ;
+
+method_expr_recur
+  : method_factor  ( (PLUS | MINUS) method_factor )*
+  ;
+   
+method_factor
+  : method_term ( (TIMES | SLASH) method_term )*  
+  ; 
+      
+method_term
+  : MINUS? method_expr_unary  
+  ; 
+  
+method_expr_unary
+  : method_expr_atom  
+  | LEFT_PAREN! method_expr_recur RIGHT_PAREN!
+  ; 
+  
+method_expr_atom
+  : VAR
+  | literal   
+  | method
+  ; 
+  
+method
+  : ID LEFT_PAREN! method_args? RIGHT_PAREN!
+  ;
+
+
+/************************************* SLOTTED CONSTRAINTS LOGIC HIERARCHY **********************************/
+
+constr_implies
+  : left=constr_or (imp=imply_connective operator_attributes? right=constr_or)? 
+    -> {imp != null}? ^($imp operator_attributes? $left $right)    
+    -> ^($left)
+  ;
+  
+constr_or
+ at init{
+  Token orToken = null;
+  ParserRuleReturnScope seq = null;
+}
+  : ld=constr_diff 
+            {seq=ld;}
+        ( lios=constr_or_sequitur[seq.getTree()]
+      {seq=lios;}
+  )*
+          -> {lios==null}? ^($ld)
+          -> ^($lios)
+  ;
+  
+constr_or_sequitur[Object leftChild]
+  : or=or_connective^ (atts=operator_attributes!)? rightChild=constr_diff!
+             {
+               Tree t = ((Tree) or.getTree());               
+               if (atts != null)
+                 t.addChild((Tree) atts.getTree());
+              
+             t.addChild((Tree) leftChild);
+       t.addChild((Tree) rightChild.getTree());           
+           } 
+  ;
+  
+  
+
+
+constr_diff
+  : constr_and (( xor_connective^ | eq_connective^ ) operator_attributes? constr_and)?
+  ;
+    
+  
+  
+  
+      
+constr_and
+ at init{
+  Token orToken = null;
+  ParserRuleReturnScope seq = null;
+}
+  : ld=constr_unary
+            {seq=ld;}
+        ( lias=constr_and_sequitur[seq.getTree()]
+      {seq=lias;}
+  )*
+          -> {lias==null}? ^($ld)
+          -> ^($lias)
+  ;
+  
+constr_and_sequitur[Object leftChild]
+  : and=and_connective^ (atts=operator_attributes!)? rightChild=constr_unary!
+             {
+               Tree t = ((Tree) and.getTree());                
+               if (atts != null)
+                 t.addChild((Tree) atts.getTree());
+              
+             t.addChild((Tree) leftChild);
+       t.addChild((Tree) rightChild.getTree());           
+           } 
+  ;
+  
+  
+
+constr_unary
+  : unary_operator operator_attributes? constr_unary
+  | constr_atom
+  | LEFT_PAREN! constr_implies RIGHT_PAREN! 
+  ;
+  
+constr_atom
+  : left_expression restriction_root^? 
+  ;
+  
+
+  
+restriction_root
+  : restr_implies
+  ; 
+
+
+restr_implies
+  : left=restr_or (imp=imply_symbol operator_attributes? right=restr_or)? 
+    -> {imp != null}? ^($imp operator_attributes? $left $right)    
+    -> ^($left)
+  ;
+  
+restr_or
+ at init{
+  Token orToken = null;
+  ParserRuleReturnScope seq = null;
+}
+  : ld=restr_diff 
+            {seq=ld;}
+        ( lios=restr_or_sequitur[seq.getTree()]
+      {seq=lios;}
+  )*
+          -> {lios==null}? ^($ld)
+          -> ^($lios)
+  ;
+  
+restr_or_sequitur[Object leftChild]
+  : or=or_symbol^ (atts=operator_attributes!)? rightChild=restr_diff!
+             {
+               Tree t = ((Tree) or.getTree());               
+               if (atts != null)
+                 t.addChild((Tree) atts.getTree());
+              
+             t.addChild((Tree) leftChild);
+       t.addChild((Tree) rightChild.getTree());           
+           } 
+  ;
+  
+  
+
+
+restr_diff
+  : restr_and (( xor_symbol^ | eq_symbol^ ) operator_attributes? restr_and)?
+  ;
+    
+  
+  
+  
+      
+restr_and
+ at init{
+  Token orToken = null;
+  ParserRuleReturnScope seq = null;
+}
+  : ld=restr_unary
+            {seq=ld;}
+        ( lias=restr_and_sequitur[seq.getTree()]
+      {seq=lias;}
+  )*
+          -> {lias==null}? ^($ld)
+          -> ^($lias)
+  ; 
+  
+restr_and_sequitur[Object leftChild]
+  : and=and_symbol^ (atts=operator_attributes!)? rightChild=restr_unary!
+             {
+               Tree t = ((Tree) and.getTree());                
+               if (atts != null)
+                 t.addChild((Tree) atts.getTree());
+              
+             t.addChild((Tree) leftChild);
+       t.addChild((Tree) rightChild.getTree());           
+           } 
+  ;
+
+
+
+restr_unary
+  : unary_operator operator_attributes? restr_unary
+  | LEFT_PAREN! restr_implies RIGHT_PAREN!
+  | restr_atom
+  ;
+
+
+restr_atom
+  : qnt=inner_quantifier? eval=evaluator operator_attributes? right_expression
+    -> {qnt==null}? ^(evaluator operator_attributes? right_expression)
+    -> ^(inner_quantifier ^(evaluator operator_attributes? right_expression))
+  ;
+
+
+
+
+
+  
+left_expression
+  : label
+    ( 
+      left_expr_atom 
+      -> ^(VT_BINDING VAR ^(VT_FIELD left_expr_atom))
+      | LEFT_PAREN left_expr_root RIGHT_PAREN 
+      -> ^(VT_BINDING VAR ^(VT_EXPR left_expr_root))
+    )
+  | left_expr_root
+    -> ^(VT_EXPR left_expr_root)
+  ;
+
+left_expr_atom
+  : expr_atom
+  ;
+
+
+expr_atom
+  : accessor_path 
+  |   VAR
+  | literal
+  ; 
+   
+
+left_expr_root
+  : accessor_path  ( (PLUS | MINUS) factor )*
+  ;
+
+factor
+  : term ( (TIMES | SLASH) term )*  
+  ; 
+      
+term
+  : MINUS? expr_unary 
+  ; 
+  
+expr_unary
+  : expr_atom  
+  | LEFT_PAREN! expr_root RIGHT_PAREN!
+  ; 
+  
+expr_root
+  : factor  ( (PLUS | MINUS) factor )*
+  ; 
+
+
+
+
+accessor_path
+  :   accessor (DOT! accessor)*
+  | VAR (DOT! accessor)+
+  ;
+
+/* 
+accessor 
+  : ID (LEFT_PAREN! method_args? RIGHT_PAREN!)? indexer?
+  | nested_obj_pattern
+  ;
+*/
+
+
+accessor 
+options{
+  backtrack = true;
+}
+  : ID indexer?
+  | method
+  | nested_obj_pattern
+  ;
+
+
+nested_obj_pattern
+  : GATE!  (ID (DOT! ID)*)?  LEFT_PAREN! constraints RIGHT_PAREN!
+  ;
+
+
+indexer
+  : LEFT_SQUARE! 
+    (
+        INT
+      | STRING
+      | ID LEFT_PAREN! method_args RIGHT_PAREN!
+      | GATE! lhs_label_atom_pattern      
+    )?
+    RIGHT_SQUARE!
+  ;
+
+
+
+right_expression
+  : expr_root
+  ;
+
+
+/***************************************************   PATTERN SOURCES ******************************************/
+
+over_clause
+  : OVER^ over_elements (COMMA! over_elements)*
+  ;
+
+over_elements
+  : id1=WINDOW COLON 
+    (  id2=TIME paren_chunk
+      -> ^(VT_BEHAVIOR $id1 $id2 paren_chunk)
+    |  id2=LENGTH LEFT_PAREN INT RIGHT_PAREN
+      -> ^(VT_BEHAVIOR $id1 $id2 INT) 
+    ) 
+  ;
+
+from
+  : FROM^
+            (  accumulate_statement
+              | collect_statement 
+              | entrypoint_statement
+              | from_source
+            )
+  ;
+
+
+
+
+collect_statement
+  : COLLECT 
+    LEFT_PAREN 
+      lhs_label_atom_pattern 
+    RIGHT_PAREN 
+  -> ^(COLLECT lhs_label_atom_pattern)
+  ;
+
+entrypoint_statement
+  : ENTRYPOINT
+    entrypoint_id
+  -> ^(VT_ENTRYPOINT entrypoint_id)
+  ;
+
+entrypoint_id
+  :   value=ID 
+    -> VT_ENTRYPOINT_ID[$value]
+  |   value=STRING 
+    -> VT_ENTRYPOINT_ID[$value]
+  ;
+
+from_source
+  : ID 
+    //args=paren_chunk?
+    //expression_chain?
+    //-> ^(VT_FROM_SOURCE ID paren_chunk? expression_chain?)
+  ;
+
+//TODO
+/*  
+expression_chain
+  : DOT ID ( paren_chunk | square_chunk )? expression_chain?
+    -> ^(VT_EXPRESSION_CHAIN[$DOT] ID square_chunk? paren_chunk? expression_chain?)
+  ;
+*/
+
+
+
+accumulate_statement
+  : ACCUMULATE  
+    LEFT_PAREN 
+      lhs_implies 
+    COMMA? 
+    ( accumulate_init_clause
+    | accumulate_id_clause
+    )
+    RIGHT_PAREN 
+    -> ^( ACCUMULATE lhs_implies accumulate_init_clause? accumulate_id_clause? )
+  ;
+
+accumulate_init_clause
+  : INIT
+    pc1=accumulate_paren_chunk cm1=COMMA? 
+    ACTION pc2=accumulate_paren_chunk cm2=COMMA? 
+  ( REVERSE pc3=accumulate_paren_chunk cm3=COMMA? )?
+    res1=RESULT pc4=accumulate_paren_chunk
+    -> ^(VT_ACCUMULATE_INIT_CLAUSE ^(INIT $pc1) ^(ACTION $pc2) ^(REVERSE $pc3)? ^(RESULT $pc4))
+  ;
+
+
+accumulate_paren_chunk
+ at init{
+  String text = "";
+} : pc=accumulate_paren_chunk_data[false] {text = $pc.text;} 
+  -> VT_PAREN_CHUNK[$pc.start,text]
+  ;
+
+accumulate_paren_chunk_data[boolean isRecursive]
+  : lp1=LEFT_PAREN    
+    (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true] )* 
+    rp1=RIGHT_PAREN
+  ;
+
+accumulate_id_clause
+  : ID paren_chunk
+  -> ^(VT_ACCUMULATE_ID_CLAUSE ID paren_chunk)
+  ;
+
+
+
+
+
+/***************************************************   QUERIES ******************************************/
+
+
+query   //TODO
+  : QUERY ID 
+    //parameters? 
+    lhs_root
+    END
+    -> ^(QUERY ID /*parameters?*/ lhs_root)   
+  ;
+
+
+lhs_query
+  : QUESTION_MARK ID LEFT_PAREN positional_constraints? RIGHT_PAREN
+    -> ^(VT_QUERY_PATTERN ID positional_constraints?)
+  ;
+
+
+
+
+
+label
+  : VAR COLON
+  ;
+
+
+inner_quantifier
+  : ALL^
+  | SOME^
+  | VALUE^
+  | COUNT^ (AT! LEFT_SQUARE! 
+        (
+          INT
+          | (MAX^ EQUALS! INT)? (MIN^ EQUALS! INT)?
+        )
+       RIGHT_SQUARE!)?
+  ;
+  
+
+
+evaluator
+  : (TILDE!)?
+    (
+      simple_evaluator
+    | complex_evaluator
+    | custom_evaluator
+    // TODO : | temporal_evaluator
+    )
+  
+  ;
+
+simple_evaluator
+  : EQUAL^ 
+  | GREATER^ 
+  | GREATER_EQUAL^ 
+  | LESS^ 
+  | LESS_EQUAL^ 
+  | NOT_EQUAL^ 
+  ;   
+  
+complex_evaluator
+  : IN
+  | CONTAINS
+  ; 
+  
+custom_evaluator
+  : ID square_chunk?  //TODO: [] is for backward compat.
+  ;
+
+
+
+
+
+
+
+imply_connective
+  : IMPLIES
+    -> ^(VT_IMPLIES)
+  ;
+
+or_connective
+  : OR
+    -> ^(VT_OR)
+  ;
+      
+and_connective
+  : AND
+    -> ^(VT_AND)
+  ;     
+  
+xor_connective
+  : XOR
+    -> ^(VT_XOR)
+  ;
+  
+eq_connective
+  : EQUIV
+    -> ^(VT_EQUIV)
+  ;
+  
+  
+imply_symbol
+  : ARROW
+    -> ^(VT_IMPLIES)
+  ;
+
+or_symbol
+  : DOUBLE_PIPE
+    -> ^(VT_OR)
+  ;
+      
+and_symbol
+  : DOUBLE_AMPER
+    -> ^(VT_AND)
+  ;     
+  
+xor_symbol
+  : DOUBLE_CAP
+    -> ^(VT_XOR)
+  ;
+  
+eq_symbol
+  : DOUBLE_ANG
+    -> ^(VT_EQUIV)
+  ; 
+  
+
+unary_operator
+    : NEG
+      -> ^(VT_NEG)    
+    |   hedge^
+    ;
+  
+    
+hedge
+    :     VERY
+      -> ^(VT_HEDGE_VERY)
+      | MOL
+        -> ^(VT_HEDGE_VERY)
+  ;
+      
+
+
+
+ 
+then_part  
+  :     
+      rhs_structured
+    | rhs_chunk   
+  ; 
+
+
+rhs_structured
+  : DO LEFT_CURLY!
+    rhs_atom*
+    RIGHT_CURLY!
+  ;
+
+rhs_atom
+  :   rhs_insert
+    | rhs_insert_logical
+    | rhs_retract
+    | rhs_retract_logical
+    | rhs_update
+    | rhs_modify
+    | rhs_side_effect
+  ; 
+  
+rhs_insert
+  : INSERT^ literal_object
+    SEMICOLON!
+  ;
+
+rhs_insert_logical
+  : INSERT_LOG^ literal_object
+    SEMICOLON!
+  ;
+  
+rhs_retract
+  : RETRACT^ 
+    ( literal_object
+    | VAR
+    )
+    SEMICOLON!
+  ;
+
+rhs_retract_logical
+  : RETRACT_LOG^
+    ( literal_object
+    | VAR
+    )
+    SEMICOLON!
+  ;
+
+rhs_update
+  : UPDATE^
+      VAR
+    SEMICOLON!  
+  ;
+
+rhs_modify
+  : MODIFY^ LEFT_PAREN! VAR RIGHT_PAREN! 
+    LEFT_CURLY!
+      accessor_path
+      (COMMA! accessor_path)*
+    RIGHT_CURLY!
+    SEMICOLON?
+  ;
+  
+rhs_side_effect
+ at init{
+  String text = "";
+}
+  : (DOUBLE_LESS | LESS dialect=(JAVA | MVEL) LESS)
+    rc=side_effect_chunk {text = $rc.text;}
+    DOUBLE_GREATER
+    -> {dialect==null}? VT_RHS_CHUNK[$rc.start,text]
+    -> ^(VT_DIALECT[dialect] VT_RHS_CHUNK[$rc.start,text])
+  ;
+  
+side_effect_chunk
+  : ~ ( END | DOUBLE_GREATER )*   
+  ;
+
+
+
+
+
+
+rhs_chunk
+ at init{
+  String text = "";
+} : THEN
+    rc=rhs_chunk_data {text = $rc.text;}
+    END 
+    SEMICOLON?        
+  -> VT_RHS_CHUNK[$rc.start,text]
+  ;
+
+rhs_chunk_data
+  :     
+      ~END*     
+  ;
+  
+  
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+curly_chunk
+ at init{
+  String text = "";
+} : cc=curly_chunk_data[false] {text = $cc.text;}
+  -> VT_CURLY_CHUNK[$cc.start,text]
+  ;
+
+curly_chunk_data[boolean isRecursive]
+  : lc1=LEFT_CURLY
+      (any=~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data[true] )* 
+    rc1=RIGHT_CURLY   
+  ;
+
+square_chunk
+ at init{
+  String text = "";
+} : sc=square_chunk_data[false] {text = $sc.text;}
+  -> VT_SQUARE_CHUNK[$sc.start,text]
+  ;
+
+square_chunk_data[boolean isRecursive]
+  : ls1=LEFT_SQUARE
+      (any=~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data[true] )* 
+    rs1=RIGHT_SQUARE
+  ;
+ 
+ 
+paren_chunk
+ at init{
+  String text = "";
+} : cc=paren_chunk_data[false] {text = $cc.text;}
+  -> VT_PAREN_CHUNK[$cc.start,text]
+  ;
+
+paren_chunk_data[boolean isRecursive]
+  : lc1=LEFT_PAREN
+      (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data[true] )* 
+    rc1=RIGHT_PAREN
+  ;
+

Added: 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	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/Rule_Test.java	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,1307 @@
+package org.drools.lang;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.Date;
+
+import org.antlr.runtime.ANTLRInputStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.ParserRuleReturnScope;
+import org.antlr.runtime.tree.CommonTree;
+import org.drools.util.ParsingResult;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+
+public class Rule_Test {
+
+	
+	private static FileWriter writer;
+		
+	@BeforeClass
+	public static void setUpBeforeClass() throws Exception {
+		writer = new FileWriter("out/DRLv6Log.txt"); 
+	}
+
+	@AfterClass
+	public static void tearDownAfterClass() throws Exception {
+		writer.flush();
+		writer.close();
+	}
+
+	@Before
+	public void setUp() throws Exception {
+		
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		
+	}
+	
+	
+	@Test	
+	public void test_compilation_unit() {
+		String rule = "compilation_unit";
+		String testDRL = "" +
+				"package org.pack.subpack;\n" +
+				"import org.klass;\n" +
+				"\n" +
+				"declare Klass\n" +
+				"end\n" +
+				"\n" +
+				"rule \"ruel\"\n" +
+				"when\n" +
+				"then\n" +
+				"end\n";				
+		;
+		
+		check(rule,testDRL);										
+	}
+	
+	
+
+	@Test	
+	public void test_package_statement() {
+		String rule = "package_statement";
+		String testDRL[] = {
+				"package this.isa.pack ;",
+				"package semi.colon.is.optional ",
+				"package simplePack",
+		};
+					
+		check(rule,testDRL);										
+	}
+	
+	@Test	
+	public void test_global() {
+		String rule = "global";
+		String testDRL[] = {
+				"global int N ",
+				"global org.it.pack.String strix ;"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	
+	@Test	
+	public void test_data_type() {
+		String rule = "data_type"; 
+		String[] testDRL = new String[] {
+				"String",
+				"int",
+				"float[]",
+				"org.pack.data.Claxx[]",
+				"int[][][]"
+			};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	
+	
+	
+	@Test	
+	public void test_import_statement() {
+		String rule = "import_statement";
+		String testDRL[] = {
+				"import jav.lang.String",
+				"import Test ; ",
+				"import jav.pack.*"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	
+	@Test	
+	public void test_function_import_statement() {
+		String rule = "function_import_statement";
+		String testDRL = "import function org.pack.square";
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_function() {
+		String rule = "function";
+		String[] testDRL = {
+				"function float square( float x ) { ... x*x ... }",
+				"function process( int x, org.String zz ) { ... ... }"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_parameters() {
+		String rule = "parameters";
+		String[] testDRL = {
+				"( int a, org.klass.AnType obj, String[][] argz )"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_type_declaration() {
+		String rule = "type_declaration";
+		String[] testDRL = {
+				"declare Student" + "\n" +
+				" @role(entity) " + "\n" +
+				" @namespace(myNS=\"http:\\\\www.stix.com\\domain\\subd#\") " + "\n" +
+				" @subclass(Person)" + "\n" +
+				" age  : int " + "\n" +
+				" name : String " + "\n" +
+				" end \n",
+				
+				"declare HasFriend " + "\n" +
+				"@role(property) " + "\n" +
+				"@namespace(myNS=\"http:\\\\www.somens.com\\arg\\test#\") " + "\n" +	
+				"@subproperty(Knows) " + "\n" +
+				"@disjoint(HasEnemy) " + "\n" +
+				"@symmetric " + "\n" +
+				"subject	: Person " + "\n" +
+				"object  : Person " + "\n" +
+				"end " + "\n", 
+			
+				"declare HasSpouse " + "\n" +
+				"@role(property) " + "\n" +
+				"@namespace(myNS=\"http:\\\\www.somens.com\\arg\\test#\") " + "\n" +		
+				"@symmetric " + "\n" +
+				"@transitive " + "\n" +
+				"@inverse(HasSpouse) " + "\n" +
+				"subject	= (\"john\") : Person 	@[key] " + "\n" +
+				"object  : Person	@[key] " + "\n" +
+				"end \n"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_type_declare_attribute() {
+		String rule = "type_declare_attribute";
+		String[] testDRL = {
+				"@role(event)",
+				"@role(type)",
+				"@role(entity)",
+				"@role(property)",
+				"@namespace( alias = \"http:\\\\www.org.dom\\arg# \")",
+				"@subclass(Type)",
+				"@subproperty(SomeProperty)",
+				"@disjoint(AnotherType)",
+				"@symmetric",
+				"@transitive",
+				"@inverse(ReverseProperty)"
+				
+		};		
+			
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_decl_field() {
+		String rule = "decl_field";
+		String[] testDRL = {
+				"field = (...) : datatype[][] @[key]"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_rule() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"ruleName\" extends \"anotherRule\" " + "\n" +
+				" salience 100 " + "\n" +
+				" no-loop " + "\n" +
+				" calendar \"s1\" , \"s2\" " + "\n" +
+				"when" + "\n" +
+				"then" + "\n" +
+				"end" + "\n" 	
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	
+	@Test	
+	public void test_rule_attributes() {
+		String rule = "rule_attribute";
+		String[] testDRL = {
+				"salience 100",
+				"no-loop true",
+				"agenda-group \"test-group\"",
+				"activation-group \"act-group\"",
+				"auto-focus false",
+				"effective \"2010-04-12\"",
+				"expires \"2010-04-12\"",
+				"enabled true",
+				"ruleflow-group \"act-group\"",
+				"agenda-group \"act-group\"",
+				"duration 100",
+				"timer 100",
+//TODO: fails as stand-alone, but works in context..				
+//				"calendar \"s1\" , \"s2\" ",
+				"dialect \"java\" ",
+				"lock-on-active true",
+				"defeats \"anotherRule\" ",
+				"deductive",
+				"abductive",
+				"equivalence",
+				"deduction @[crisp]",
+				"implication @[crisp]"
+		};
+				
+		check(rule,testDRL);										
+	}
+	  
+	@Test	
+	public void test_operator_attributes() {
+		String rule = "operator_attributes";
+		String[] testDRL = {				
+				"@[" + "\n" +
+				"kind=\"lukasiewicz\", " + "\n" +
+				"id=\"myID\", " + "\n" +
+				"params=\"addit,args,2,more\", " + "\n" +
+				"degree=\"[0.3,0.2]\", " + "\n" +
+				"crisp," + "\n" +
+				"default," + "\n" +
+				"defeat," + "\n" +
+				"merge=\"mStrat\", " + "\n" +
+				"filter=\"fStrat\", " + "\n" +
+				"missing=\"sStrat\" " + "\n" +
+				"]",				
+		};
+				
+		check(rule,testDRL);
+				
+	}
+
+	
+	@Test
+	public void test_lhs_root() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule test when " +
+				"Bus() Car() Taxi()" +
+				"then end"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	@Test
+	public void test_lhs_implies() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule test when " +
+				"$p : Person() implies @[kind=\"anImpl\"] Dog()" +
+				"then end"
+		};
+				
+		check(rule,testDRL);										
+	}	
+	
+	
+	@Test
+	public void test_lhs_or() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule test when " +
+				"Car() or @[kind=\"anOr\"] Taxi() or @[kind=\"anotherOr\"] Bus()" +
+				"then end"
+		};
+				
+		check(rule,testDRL);										
+	}	
+	
+	
+	@Test
+	public void test_lhs_diff() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule test when " +
+				"$p : Person() xor Dog()" +
+				"then end",
+				
+				"rule test when " +
+				"(Person() xor Dog()) equiv Cat()" +
+				"then end"
+		};
+				
+		check(rule,testDRL);										
+	}	
+	
+		
+	
+	
+	@Test
+	public void test_lhs_and() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule test when " +
+				"Car() and Taxi() and Bus()" +
+				"then end"
+		};
+				
+		check(rule,testDRL);										
+	}	
+	
+	@Test
+	public void test_lhs_root_complex() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule test when " +
+				"(P() implies Q()) implies ( (K() equiv K()) or Z() and X() )" +
+				"then end"
+		};
+				
+		check(rule,testDRL);										
+	}	
+	
+	
+	@Test	
+	public void test_lhs_modified_unary() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"r\" when " +
+				"neg @[crisp] very @[crisp] Person() " +
+				"then end",
+				
+				"rule \"r\" when " +
+				"$lab : Person()" +
+				"then end",
+				
+				"rule \"r\" when " +
+				"(Person() implies Dog())" +
+				"then end"
+				
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_lhs_exists() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"r\" when " +
+				"exists @[crisp] ( $p : Person() and $d : Dog() ) " +
+				"then end",
+				
+				"rule \"r\" when " +
+				" $p : exists Person() " +
+				"then end",							
+				
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	@Test	
+	public void test_lhs_not() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"r\" when " +
+				"not @[crisp] ( $p : Person() and $d : Dog() ) " +
+				"then end",
+				
+				"rule \"r\" when " +
+				" not Person() " +
+				"then end",							
+				
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	@Test	
+	public void test_lhs_forall() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"r\" when " +
+				"forall @[crisp] Person() " +
+				"then end",
+				
+				"rule \"r\" when " +
+				"forall  ( $p : Person() " +
+				"               Person() ) " +
+				"then end",
+				
+				"rule \"r\" when " +
+				"forall  ( $p : Person() " +
+				"               (Person() Dog()) ) " +
+				"then end",
+				
+				"rule \"r\" when " +
+				"forall  ( ($p : Person() $d : Dog() )" +
+				"          (     Person()      Dog() ) " +
+				"        ) " +
+				"then end",							
+				
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	
+	@Test	
+	public void test_lhs_label_atom_pattern() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"r\" when " +
+				"$p : Person() " +
+				"then end",
+				
+				"rule \"r\" when " +
+				"Person() @[crisp]" +
+				"then end",
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_constraints() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"r\" when " +
+				"Person( \"john\" , 18, height > 150) " +
+				"then end",
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_positional_constraint() {
+		String rule = "rule";
+		String[] testDRL = {
+				"rule \"r\" when " +
+				"Person( \"john\" , 18, 2.0, true, null, new Dog(), {12, $x, \"test\" }, $var) " +
+				"then end",
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	
+	@Test	
+	public void test_literal_object() {
+		String rule = "literal_object";
+		String[] testDRL = {
+				"new Thing(13, $var, true)"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	
+	@Test	
+	public void test_method_args() {
+		String rule = "literal_object";
+		String[] testDRL = {
+				"new Obj(12 - 13*($var*2 + sqrt(4)))"
+		};
+				
+		check(rule,testDRL);										
+	}
+	
+	/*
+	method_expr_root
+	  : method_expr_atom  ( (PLUS | MINUS) method_factor )*
+	  ;
+	   
+	method_factor
+	  : method_term ( (TIMES | SLASH) method_term )*  
+	  ; 
+	      
+	method_term
+	  : MINUS? method_expr_unary  
+	  ; 
+	  
+	method_expr_unary
+	  : method_expr_atom  
+	  | LEFT_PAREN! method_expr_root RIGHT_PAREN!
+	  ; 
+	  
+	method_expr_atom
+	  : VAR
+	  | literal   
+	  | method
+	  ; 
+	  
+	method
+	  : ID LEFT_PAREN! method_args? RIGHT_PAREN!
+	  ;
+	*/
+	
+	/*
+	@Test	
+	public void test_ {
+		String rule = "";
+		String[] testDRL = {
+				""
+		};
+				
+		check(rule,testDRL);										
+	}
+	*/
+	
+
+/*	  		  
+	
+		  
+	    
+	
+
+
+	// method expr roots can't start with () and have a slightly simpler structure than outer expressions
+	
+
+
+	constr_implies
+	  : left=constr_or (imp=imply_connective operator_attributes? right=constr_or)? 
+	    -> {imp != null}? ^($imp operator_attributes? $left $right)    
+	    -> ^($left)
+	  ;
+	  
+	constr_or
+	@init{
+	  Token orToken = null;
+	  ParserRuleReturnScope seq = null;
+	}
+	  : ld=constr_diff 
+	            {seq=ld;}
+	        ( lios=constr_or_sequitur[seq.getTree()]
+	      {seq=lios;}
+	  )*
+	          -> {lios==null}? ^($ld)
+	          -> ^($lios)
+	  ;
+	  
+	constr_or_sequitur[Object leftChild]
+	  : or=or_connective^ (atts=operator_attributes!)? rightChild=constr_diff!
+	             {
+	               Tree t = ((Tree) or.getTree());               
+	               if (atts != null)
+	                 t.addChild((Tree) atts.getTree());
+	              
+	             t.addChild((Tree) leftChild);
+	       t.addChild((Tree) rightChild.getTree());           
+	           } 
+	  ;
+	  
+	  
+
+
+	constr_diff
+	  : constr_and (( xor_connective^ | eq_connective^ ) operator_attributes? constr_and)?
+	  ;
+	    
+	  
+	  
+	  
+	      
+	constr_and
+	@init{
+	  Token orToken = null;
+	  ParserRuleReturnScope seq = null;
+	}
+	  : ld=constr_unary
+	            {seq=ld;}
+	        ( lias=constr_and_sequitur[seq.getTree()]
+	      {seq=lias;}
+	  )*
+	          -> {lias==null}? ^($ld)
+	          -> ^($lias)
+	  ;
+	  
+	constr_and_sequitur[Object leftChild]
+	  : and=and_connective^ (atts=operator_attributes!)? rightChild=constr_unary!
+	             {
+	               Tree t = ((Tree) and.getTree());                
+	               if (atts != null)
+	                 t.addChild((Tree) atts.getTree());
+	              
+	             t.addChild((Tree) leftChild);
+	       t.addChild((Tree) rightChild.getTree());           
+	           } 
+	  ;
+	  
+	  
+
+	constr_unary
+	  : unary_operator operator_attributes? constr_unary
+	  | constr_atom
+	  | LEFT_PAREN! constr_implies RIGHT_PAREN! 
+	  ;
+	  
+	constr_atom
+	  : left_expression restriction_root^? 
+	  ;
+	  
+
+	  
+	restriction_root
+	  : restr_implies
+	  ; 
+
+
+	restr_implies
+	  : left=restr_or (imp=imply_symbol operator_attributes? right=restr_or)? 
+	    -> {imp != null}? ^($imp operator_attributes? $left $right)    
+	    -> ^($left)
+	  ;
+	  
+	restr_or
+	@init{
+	  Token orToken = null;
+	  ParserRuleReturnScope seq = null;
+	}
+	  : ld=restr_diff 
+	            {seq=ld;}
+	        ( lios=restr_or_sequitur[seq.getTree()]
+	      {seq=lios;}
+	  )*
+	          -> {lios==null}? ^($ld)
+	          -> ^($lios)
+	  ;
+	  
+	restr_or_sequitur[Object leftChild]
+	  : or=or_symbol^ (atts=operator_attributes!)? rightChild=restr_diff!
+	             {
+	               Tree t = ((Tree) or.getTree());               
+	               if (atts != null)
+	                 t.addChild((Tree) atts.getTree());
+	              
+	             t.addChild((Tree) leftChild);
+	       t.addChild((Tree) rightChild.getTree());           
+	           } 
+	  ;
+	  
+	  
+
+
+	restr_diff
+	  : restr_and (( xor_symbol^ | eq_symbol^ ) operator_attributes? restr_and)?
+	  ;
+	    
+	  
+	  
+	  
+	      
+	restr_and
+	@init{
+	  Token orToken = null;
+	  ParserRuleReturnScope seq = null;
+	}
+	  : ld=restr_unary
+	            {seq=ld;}
+	        ( lias=restr_and_sequitur[seq.getTree()]
+	      {seq=lias;}
+	  )*
+	          -> {lias==null}? ^($ld)
+	          -> ^($lias)
+	  ; 
+	  
+	restr_and_sequitur[Object leftChild]
+	  : and=and_symbol^ (atts=operator_attributes!)? rightChild=restr_unary!
+	             {
+	               Tree t = ((Tree) and.getTree());                
+	               if (atts != null)
+	                 t.addChild((Tree) atts.getTree());
+	              
+	             t.addChild((Tree) leftChild);
+	       t.addChild((Tree) rightChild.getTree());           
+	           } 
+	  ;
+
+
+
+	restr_unary
+	  : unary_operator operator_attributes? restr_unary
+	  | LEFT_PAREN! restr_implies RIGHT_PAREN!
+	  | restr_atom
+	  ;
+
+
+	restr_atom
+	  : qnt=inner_quantifier? eval=evaluator operator_attributes? right_expression
+	    -> {qnt==null}? ^(evaluator operator_attributes? right_expression)
+	    -> ^(inner_quantifier ^(evaluator operator_attributes? right_expression))
+	  ;
+
+
+
+
+
+	  
+	left_expression
+	  : label
+	    ( 
+	      left_expr_atom 
+	      -> ^(VT_BINDING VAR ^(VT_FIELD left_expr_atom))
+	      | LEFT_PAREN left_expr_root RIGHT_PAREN 
+	      -> ^(VT_BINDING VAR ^(VT_EXPR left_expr_root))
+	    )
+	  | left_expr_root
+	    -> ^(VT_EXPR left_expr_root)
+	  ;
+
+	left_expr_atom
+	  : expr_atom
+	  ;
+
+
+	expr_atom
+	  : accessor_path 
+	  |   VAR
+	  | literal
+	  ; 
+	   
+
+	left_expr_root
+	  : accessor_path  ( (PLUS | MINUS) factor )*
+	  ;
+
+	factor
+	  : term ( (TIMES | SLASH) term )*  
+	  ; 
+	      
+	term
+	  : MINUS? expr_unary 
+	  ; 
+	  
+	expr_unary
+	  : expr_atom  
+	  | LEFT_PAREN! expr_root RIGHT_PAREN!
+	  ; 
+	  
+	expr_root
+	  : factor  ( (PLUS | MINUS) factor )*
+	  ; 
+
+
+
+
+	accessor_path
+	  :   accessor (DOT! accessor)*
+	  | VAR (DOT! accessor)+
+	  ;
+
+
+	accessor 
+	options{
+	  backtrack = true;
+	}
+	  : ID indexer?
+	  | method
+	  | nested_obj_pattern
+	  ;
+
+
+	nested_obj_pattern
+	  : GATE!  (ID (DOT! ID)*)?  LEFT_PAREN! constraints RIGHT_PAREN!
+	  ;
+
+
+	indexer
+	  : LEFT_SQUARE! 
+	    (
+	        INT
+	      | STRING
+	      | ID LEFT_PAREN! method_args RIGHT_PAREN!
+	      | GATE! lhs_label_atom_pattern      
+	    )?
+	    RIGHT_SQUARE!
+	  ;
+
+
+
+	right_expression
+	  : expr_root
+	  ;
+
+
+	over_clause
+	  : OVER^ over_elements (COMMA! over_elements)*
+	  ;
+
+	over_elements
+	  : id1=WINDOW COLON 
+	    (  id2=TIME paren_chunk
+	      -> ^(VT_BEHAVIOR $id1 $id2 paren_chunk)
+	    |  id2=LENGTH LEFT_PAREN INT RIGHT_PAREN
+	      -> ^(VT_BEHAVIOR $id1 $id2 INT) 
+	    ) 
+	  ;
+
+	from
+	  : FROM^
+	            (  accumulate_statement
+	              | collect_statement 
+	              | entrypoint_statement
+	              | from_source
+	            )
+	  ;
+
+
+
+
+	collect_statement
+	  : COLLECT 
+	    LEFT_PAREN 
+	      lhs_label_atom_pattern 
+	    RIGHT_PAREN 
+	  -> ^(COLLECT lhs_label_atom_pattern)
+	  ;
+
+	entrypoint_statement
+	  : ENTRYPOINT
+	    entrypoint_id
+	  -> ^(VT_ENTRYPOINT entrypoint_id)
+	  ;
+
+	entrypoint_id
+	  :   value=ID 
+	    -> VT_ENTRYPOINT_ID[$value]
+	  |   value=STRING 
+	    -> VT_ENTRYPOINT_ID[$value]
+	  ;
+
+	from_source
+	  : ID 
+	    //args=paren_chunk?
+	    //expression_chain?
+	    //-> ^(VT_FROM_SOURCE ID paren_chunk? expression_chain?)
+	  ;
+
+	//TODO
+	  
+	//expression_chain
+	//  : DOT ID ( paren_chunk | square_chunk )? expression_chain?
+	//    -> ^(VT_EXPRESSION_CHAIN[$DOT] ID square_chunk? paren_chunk? expression_chain?)
+	//  ;
+	//
+
+
+
+	accumulate_statement
+	  : ACCUMULATE  
+	    LEFT_PAREN 
+	      lhs_implies 
+	    COMMA? 
+	    ( accumulate_init_clause
+	    | accumulate_id_clause
+	    )
+	    RIGHT_PAREN 
+	    -> ^( ACCUMULATE lhs_implies accumulate_init_clause? accumulate_id_clause? )
+	  ;
+
+	accumulate_init_clause
+	  : INIT
+	    pc1=accumulate_paren_chunk cm1=COMMA? 
+	    ACTION pc2=accumulate_paren_chunk cm2=COMMA? 
+	  ( REVERSE pc3=accumulate_paren_chunk cm3=COMMA? )?
+	    res1=RESULT pc4=accumulate_paren_chunk
+	    -> ^(VT_ACCUMULATE_INIT_CLAUSE ^(INIT $pc1) ^(ACTION $pc2) ^(REVERSE $pc3)? ^(RESULT $pc4))
+	  ;
+
+
+	accumulate_paren_chunk
+	@init{
+	  String text = "";
+	} : pc=accumulate_paren_chunk_data[false] {text = $pc.text;} 
+	  -> VT_PAREN_CHUNK[$pc.start,text]
+	  ;
+
+	accumulate_paren_chunk_data[boolean isRecursive]
+	  : lp1=LEFT_PAREN    
+	    (any=~ ( LEFT_PAREN | RIGHT_PAREN ) | accumulate_paren_chunk_data[true] )* 
+	    rp1=RIGHT_PAREN
+	  ;
+
+	accumulate_id_clause
+	  : ID paren_chunk
+	  -> ^(VT_ACCUMULATE_ID_CLAUSE ID paren_chunk)
+	  ;
+
+
+	query   //TODO
+	  : QUERY ID 
+	    parameters? 
+	    lhs_root
+	    END
+	    -> ^(QUERY ID parameters? lhs_root)   
+	  ;
+
+
+	lhs_query
+	  : QUESTION_MARK ID LEFT_PAREN positional_constraints? RIGHT_PAREN
+	    -> ^(VT_QUERY_PATTERN ID positional_constraints?)
+	  ;
+
+
+
+
+
+	label
+	  : VAR COLON
+	  ;
+
+
+	inner_quantifier
+	  : ALL^
+	  | SOME^
+	  | VALUE^
+	  | COUNT^ (AT! LEFT_SQUARE! 
+	        (
+	          INT
+	          | (MAX^ EQUALS! INT)? (MIN^ EQUALS! INT)?
+	        )
+	       RIGHT_SQUARE!)?
+	  ;
+	  
+
+
+	evaluator
+	  : (TILDE!)?
+	    (
+	      simple_evaluator
+	    | complex_evaluator
+	    | custom_evaluator
+	    // TODO : | temporal_evaluator
+	    )
+	  
+	  ;
+
+	simple_evaluator
+	  : EQUAL^ 
+	  | GREATER^ 
+	  | GREATER_EQUAL^ 
+	  | LESS^ 
+	  | LESS_EQUAL^ 
+	  | NOT_EQUAL^ 
+	  ;   
+	  
+	complex_evaluator
+	  : IN
+	  | CONTAINS
+	  ; 
+	  
+	custom_evaluator
+	  : ID square_chunk?  //TODO: [] is for backward compat.
+	  ;
+
+
+
+
+
+
+
+	imply_connective
+	  : IMPLIES
+	    -> ^(VT_IMPLIES)
+	  ;
+
+	or_connective
+	  : OR
+	    -> ^(VT_OR)
+	  ;
+	      
+	and_connective
+	  : AND
+	    -> ^(VT_AND)
+	  ;     
+	  
+	xor_connective
+	  : XOR
+	    -> ^(VT_XOR)
+	  ;
+	  
+	eq_connective
+	  : EQUIV
+	    -> ^(VT_EQUIV)
+	  ;
+	  
+	  
+	imply_symbol
+	  : ARROW
+	    -> ^(VT_IMPLIES)
+	  ;
+
+	or_symbol
+	  : DOUBLE_PIPE
+	    -> ^(VT_OR)
+	  ;
+	      
+	and_symbol
+	  : DOUBLE_AMPER
+	    -> ^(VT_AND)
+	  ;     
+	  
+	xor_symbol
+	  : DOUBLE_CAP
+	    -> ^(VT_XOR)
+	  ;
+	  
+	eq_symbol
+	  : DOUBLE_ANG
+	    -> ^(VT_EQUIV)
+	  ; 
+	  
+
+	unary_operator
+	    : NEG
+	      -> ^(VT_NEG)    
+	    |   hedge^
+	    ;
+	  
+	    
+	hedge
+	    :     VERY
+	      -> ^(VT_HEDGE_VERY)
+	      | MOL
+	        -> ^(VT_HEDGE_VERY)
+	  ;
+	      
+
+
+
+	 
+	then_part  
+	  :     
+	      rhs_structured
+	    | rhs_chunk   
+	  ; 
+
+
+	rhs_structured
+	  : DO LEFT_CURLY!
+	    rhs_atom*
+	    RIGHT_CURLY!
+	  ;
+
+	rhs_atom
+	  :   rhs_insert
+	    | rhs_insert_logical
+	    | rhs_retract
+	    | rhs_retract_logical
+	    | rhs_update
+	    | rhs_modify
+	    | rhs_side_effect
+	  ; 
+	  
+	rhs_insert
+	  : INSERT^ literal_object
+	    SEMICOLON!
+	  ;
+
+	rhs_insert_logical
+	  : INSERT_LOG^ literal_object
+	    SEMICOLON!
+	  ;
+	  
+	rhs_retract
+	  : RETRACT^ 
+	    ( literal_object
+	    | VAR
+	    )
+	    SEMICOLON!
+	  ;
+
+	rhs_retract_logical
+	  : RETRACT_LOG^
+	    ( literal_object
+	    | VAR
+	    )
+	    SEMICOLON!
+	  ;
+
+	rhs_update
+	  : UPDATE^
+	      VAR
+	    SEMICOLON!  
+	  ;
+
+	rhs_modify
+	  : MODIFY^ LEFT_PAREN! VAR RIGHT_PAREN! 
+	    LEFT_CURLY!
+	      accessor_path
+	      (COMMA! accessor_path)*
+	    RIGHT_CURLY!
+	    SEMICOLON?
+	  ;
+	  
+	rhs_side_effect
+	@init{
+	  String text = "";
+	}
+	  : (DOUBLE_LESS | LESS dialect=(JAVA | MVEL) LESS)
+	    rc=side_effect_chunk {text = $rc.text;}
+	    DOUBLE_GREATER
+	    -> {dialect==null}? VT_RHS_CHUNK[$rc.start,text]
+	    -> ^(VT_DIALECT[dialect] VT_RHS_CHUNK[$rc.start,text])
+	  ;
+	  
+	side_effect_chunk
+	  : ~ ( END | DOUBLE_GREATER )*   
+	  ;
+
+
+
+
+
+
+	rhs_chunk
+	@init{
+	  String text = "";
+	} : THEN
+	    rc=rhs_chunk_data {text = $rc.text;}
+	    END 
+	    SEMICOLON?        
+	  -> VT_RHS_CHUNK[$rc.start,text]
+	  ;
+
+	rhs_chunk_data
+	  :     
+	      ~END*     
+	  ;
+	  
+	  */
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	private void check(String rule, String testDRL) {
+		check(rule, new String[] {testDRL});		
+	}
+	
+	private void check(String rule, String[] testDRL) {
+		ParsingResult[] res = parseAndTest(rule, testDRL);
+			
+		for (int j = 0; j < res.length; j++) {
+			log(rule, res[j].toString(true));
+			assertTrue(res[j].isSuccess());
+			System.out.println("Check " + rule + " >> " + res[j].getParseTime());
+		}	
+	}
+	
+	
+	
+	public ParsingResult[] parseAndTest(String rule, String[] drl) {
+		ParsingResult[] ans = new ParsingResult[drl.length];
+		int j = 0;
+		
+		Method ruleM;
+		try {
+			ruleM = DRLv6Parser.class.getMethod(rule);
+		} catch (SecurityException e) {
+			return null;
+		} catch (NoSuchMethodException e) {
+			return null;
+		}
+				
+				
+				for (String drlString : drl) {
+					ParsingResult res = new ParsingResult();
+										
+					res.setSource(drlString);
+						
+					try {
+						DRLv6Lexer lexer = new DRLv6Lexer( new ANTLRInputStream( new ByteArrayInputStream(drlString.getBytes()) ));			
+						DRLv6Parser parser = new DRLv6Parser(new CommonTokenStream( lexer ));	
+						
+					
+						long start = new Date().getTime();
+							ParserRuleReturnScope root;			
+							root = (ParserRuleReturnScope) ruleM.invoke(parser);
+							long after = new Date().getTime();
+					
+							CommonTree resultTree = (CommonTree) root.getTree();
+									
+						int errors = parser.getNumberOfSyntaxErrors();
+					
+						res.setNumErrors(errors);
+						res.setTree(resultTree);
+						res.setParseTime(after-start);
+													
+					} catch (Exception e) {
+						e.printStackTrace();
+						res.setError(e);
+					} finally {
+						ans[j++] = res;
+					}
+				}
+        
+        return ans;
+	}
+	
+	
+	
+	private void log(String rule, String body) {
+		try {
+			writer.write("**************************************\n");
+			writer.write(rule+"\n");
+			writer.write("**************************************\n");
+			writer.write(body+"\n");
+		} catch (IOException e) {
+			
+		}
+		
+	}
+	
+	
+	
+	
+	
+	
+}
+
+
+
+
+
+
+
+


Property changes on: labs/jbossrules/branches/DRLv6/src/test/java/org/drools/lang/Rule_Test.java
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java
===================================================================
--- labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/test/java/org/drools/util/ParsingResult.java	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,169 @@
+package org.drools.util;
+
+import org.antlr.runtime.tree.CommonTree;
+
+
+public class ParsingResult {
+	
+	private CommonTree tree = null;
+	private long parseTime = -1;
+	private int numErrors = -1;
+	private Exception error = null;
+	private String source = null;
+
+	
+	public boolean isSuccess() {
+		return source != null && numErrors == 0 && error == null;
+	}
+
+	public String toString(boolean verbose) {
+		StringBuffer buf = new StringBuffer();
+		buf.append(">>>> RESULT : ");
+			if (error != null) {
+				buf.append(" EXCEPTION \n").append(error.toString()).append("\n");
+			} else
+			if (numErrors > 0) {
+				buf.append(" FAILURE ").append(" -- " + numErrors + " errors").append("\n");
+			} else {
+				buf.append(" SUCCESS \n");
+			}
+		buf.append(">> TIME to parse " + parseTime).append("\n");	
+		
+		if (verbose) {
+			if (source != null)
+			buf.append(">> SOURCE : \n").append(source).append("\n");
+			if (tree != null)
+			buf.append(">> OUTPUT : \n").append(toIndentedStringTree());
+		}
+		
+		return buf.toString();
+		
+	}
+	
+	
+	public String toString() {
+		return toString(false);
+	}
+	
+	
+	
+	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();
+	}
+
+
+
+
+
+
+	public CommonTree getTree() {
+		return tree;
+	}
+
+
+
+
+
+
+	public void setTree(CommonTree resultTree) {
+		this.tree = resultTree;
+	}
+
+
+
+
+
+
+	public long getParseTime() {
+		return parseTime;
+	}
+
+
+
+
+
+
+	public void setParseTime(long parseTime) {
+		this.parseTime = parseTime;
+	}
+
+
+
+
+
+
+	public int getNumErrors() {
+		return numErrors;
+	}
+
+
+
+
+
+
+	public void setNumErrors(int numErrors) {
+		this.numErrors = numErrors;
+	}
+
+
+
+
+
+
+	public Exception getError() {
+		return error;
+	}
+
+
+
+
+
+
+	public void setError(Exception error) {
+		this.error = error;
+	}
+
+
+
+
+	public void setSource(String source) {
+		this.source = source;
+	}
+
+
+
+
+	public String getSource() {
+		return source;
+	}
+
+
+	
+	
+}

Added: labs/jbossrules/branches/DRLv6/src/test/resources/langTestAll.drl
===================================================================
--- labs/jbossrules/branches/DRLv6/src/test/resources/langTestAll.drl	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/test/resources/langTestAll.drl	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,194 @@
+
+
+
+
+rule "inner terms"
+when
+  Person( name== "mark", age == 34, address{ city == "london", country ==  "uk"} ) 
+then end
+
+rule "positional"
+when
+  Person( "mark", 34 )
+  Person( "mark", 34, address{"london", "uk"} )
+then end
+
+
+rule "mixed positional"
+when
+  Person( "mark", age == 34, address{"london", country == "uk"} ) 
+then end
+
+rule "full positional with inner"
+when
+  Person( "mark", 34, addres{ "london", "uk" } )
+then end
+
+
+rule "match list"
+when
+  Person( list in {"zis", "iz", "lizt"} )
+then end
+
+
+rule "nested dot-acc"
+when
+  Person( name== "mark", age == 34, address.country == "uk" ) // nested  address object
+then end
+
+rule "equivalent forms"
+when
+  Person( name== "mark", age == 34, address.country == "uk" ) // nested  address object
+  Person( name== "mark", age == 34, address{country == "uk"} ) // nested  address object
+then end
+
+
+
+
+rule "methods"
+when
+ Person( someMethod(1,2) == $x, address.someMethod(3,4) == $y, $z :  someOtherMethod(5,6) )
+then end
+
+rule "nested pattern"
+when
+  $p : Person( name == "mark", age == 34, address == /Address( owner ==  "p, .......) )
+then end
+
+
+
+rule "innerquery"
+when
+  Person( name == "mark", age == 34, address == ?query(.....) )
+then end
+
+rule "querywithterms"
+when
+  ?queryName("a", "b", c{"d", "e", "f"}, "g", h)
+then end
+
+
+
+rule "collection"
+when
+Person( pets[0].age == 15 )
+Person( pets["rover"].age == 15 )
+then end
+
+
+
+
+// not possible, also unclear that iterates for each pet
+// MUST be bound (also resembles JAVA foreach
+/*
+rule "one of many"
+when
+  Person( pets[ {age == 15 } ] )
+then end
+*/
+
+rule "with bindings"
+when
+	$per : Person( $pet : pets[ {age == 15} ] )
+then end
+
+
+rule "method collection"
+when
+$p : Person( $a : someMethodCallToGetAddresses(...)[ {location ==  "london"} ] )
+then end
+
+
+
+rule "full iteration"
+when 
+$per : Person( $pet : pets[] )
+then end
+
+
+
+rule "slight difference :)"
+when
+Person( $p : pets[{15}] ) // would return all pets with an age of 15
+Person( $p : pets[15] ) // would return pet at element 15.
+then end
+
+rule "positional select"
+when
+Person( $p : pets[{"rover"}] ) // a list of pets, get all pets called  rover.
+then end
+
+
+
+rule "map access"
+when
+Person( $p : pets["rover"] ) // a map, return the pet called rover.
+then end
+
+
+rule "list accessors"
+when
+Person( pets[last()] )
+then end
+
+
+
+
+
+
+
+rule "bool method"
+when
+Person( someMethodReturnsBoolean(14,"xx")  == true )
+then end
+
+
+
+//Person( pets["rover"].age == $otherAge.someMethod( $x ) + 3 ) // notice  no (...) delimeter like on return-value
+//Person( pets["rover"].age == ($otherAge.someMethod( $x ) + 3 ) / 2 )  //  this has the (...) but it's to indicate ordering in the expr evaluation only
+                                                                                                             // so the / 2 is last
+
+//Person( pets["rover"].age * $v1 == $v2 - 3 ) // expr can be on both sides
+
+
+
+//If we have collection filters, $p will exist for each resulting  red pet  with appropriate age
+//Person( $p : pets[ { color == "red" ].age * $v1 == $v2 - 3 )
+
+//Although that can be re-wrriten, as mentioned previously
+//Person( $p : pets[ { color == "red", age * $v1 == $v2 - 3 ] )
+
+
+rule "federated"
+when
+?TableName( fieldName == "x", fieldName2 == $y, $v : fieldName3 )
+then end
+
+
+rule "federated_posit"
+when
+?TableName( "x", $y, $v )
+then end
+
+
+
+rule "federated_more"
+when
+	?Table1( fieldName1 == "x", $v1 : fieldName2 )
+	?Table2( fieldName2 == $v1, $v2 : fieldNam2 )
+then end
+
+
+rule "quantif query"
+when
+	?Table1( $v1 :fieldName1 )
+	exists( ?Table2( fieldNAme1 == $v ) )
+then end
+
+
+
+rule "Test"
+when
+    ? Person( $var, 18, $a : age > 18 , ? Address(number == $a) )
+then
+end

Added: labs/jbossrules/branches/DRLv6/src/test/resources/newRuleTest.drl
===================================================================
--- labs/jbossrules/branches/DRLv6/src/test/resources/newRuleTest.drl	                        (rev 0)
+++ labs/jbossrules/branches/DRLv6/src/test/resources/newRuleTest.drl	2010-05-10 22:38:41 UTC (rev 32805)
@@ -0,0 +1,44 @@
+package qualchek;
+
+import org.drools.lang.stix;
+
+
+declare Student
+	@role(entity)	
+	@namespace(myNS="http:\\www.somens.com\arg\test#")
+	@subclass(Person)
+	age  : int	
+	name : String
+end
+
+declare HasFriend
+	@role(property)
+	@namespace(myNS="http:\\www.somens.com\arg\test#")	
+	@subproperty(Knows)
+	@disjoint(HasEnemy)
+	@symmetric
+	subject	: Person
+	object  : Person
+end
+
+declare HasSpouse
+	@role(property)
+	@namespace(myNS="http:\\www.somens.com\arg\test#")		
+	@symmetric
+	@transitive
+	@inverse(HasSpouse)
+	subject	= ("john") : Person 	@[key]
+	object  : Person	@[key]
+end
+
+
+
+
+rule "test"
+calendar "s2", "s3"
+when
+ $b : Bus()
+ and
+ $c : Car()
+then
+end
\ No newline at end of file



More information about the jboss-svn-commits mailing list