[jboss-svn-commits] JBL Code SVN: r12897 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/commons/jci/readers and 25 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jun 27 16:04:31 EDT 2007


Author: tirelli
Date: 2007-06-27 16:04:30 -0400 (Wed, 27 Jun 2007)
New Revision: 12897

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDestinationDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternSourceDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectWithNestedFrom.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_nested_from.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/collect_with_nested_from.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PatternSource.java
Removed:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternProcessorCeDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRDRLPersistence.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRXMLPersistence.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/commons/jci/readers/MemoryResourceReader.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/EvalHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/NotHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/ActionFieldValueTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/CompositeFieldConstraintTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DSLSentenceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/FactPatternTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/RuleModelTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRXMLPersitenceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzerTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Collect.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Pattern.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
Log:
JBRULES-546: adding support to 'from' chaining

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRDRLPersistence.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRDRLPersistence.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRDRLPersistence.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,23 +1,23 @@
 package org.drools.brms.server.util;
 
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
 import org.drools.brms.client.modeldriven.brxml.ActionInsertFact;
 import org.drools.brms.client.modeldriven.brxml.ActionInsertLogicalFact;
-import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
-import org.drools.brms.client.modeldriven.brxml.ActionUpdateField;
 import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
 import org.drools.brms.client.modeldriven.brxml.ActionSetField;
+import org.drools.brms.client.modeldriven.brxml.ActionUpdateField;
 import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
 import org.drools.brms.client.modeldriven.brxml.CompositeFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.ConnectiveConstraint;
-import org.drools.brms.client.modeldriven.brxml.FieldConstraint;
-import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.DSLSentence;
 import org.drools.brms.client.modeldriven.brxml.FactPattern;
+import org.drools.brms.client.modeldriven.brxml.FieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.IAction;
+import org.drools.brms.client.modeldriven.brxml.IPattern;
 import org.drools.brms.client.modeldriven.brxml.ISingleFieldConstraint;
-import org.drools.brms.client.modeldriven.brxml.IPattern;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 import org.drools.util.ReflectiveVisitor;
 
 /**

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRXMLPersistence.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRXMLPersistence.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/util/BRXMLPersistence.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,19 +1,19 @@
 package org.drools.brms.server.util;
 
+import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
 import org.drools.brms.client.modeldriven.brxml.ActionInsertFact;
 import org.drools.brms.client.modeldriven.brxml.ActionInsertLogicalFact;
-import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
-import org.drools.brms.client.modeldriven.brxml.ActionUpdateField;
 import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
 import org.drools.brms.client.modeldriven.brxml.ActionSetField;
+import org.drools.brms.client.modeldriven.brxml.ActionUpdateField;
 import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
 import org.drools.brms.client.modeldriven.brxml.CompositeFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.ConnectiveConstraint;
-import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.DSLSentence;
 import org.drools.brms.client.modeldriven.brxml.FactPattern;
 import org.drools.brms.client.modeldriven.brxml.RuleAttribute;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.io.xml.DomDriver;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/commons/jci/readers/MemoryResourceReader.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/commons/jci/readers/MemoryResourceReader.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/commons/jci/readers/MemoryResourceReader.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -17,8 +17,8 @@
 
 package org.drools.commons.jci.readers;
 
+import java.util.HashMap;
 import java.util.Map;
-import java.util.HashMap;
 
 /**
  * A memory based reader to compile from memory

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,14 +1,18 @@
-// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-06-21 22:44:27
+// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-06-25 17:49:42
 
 	package org.drools.lang;
 
 
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
 import java.util.HashMap;
+
+import org.antlr.runtime.BaseRecognizer;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.DFA;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.Lexer;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.RecognitionException;
 public class DRLLexer extends Lexer {
     public static final int COMMA=12;
     public static final int EXISTS=39;
@@ -286,10 +290,10 @@
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1586:17: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1586:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:17: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:17: ( ' ' | '\\t' | '\\f' | EOL )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1586:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:17: ( ' ' | '\\t' | '\\f' | EOL )+
             int cnt1=0;
             loop1:
             do {
@@ -321,28 +325,28 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1586:19: ' '
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:19: '\\t'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1602:19: '\\t'
             	    {
             	    match('\t'); if (failed) return ;
 
             	    }
             	    break;
             	case 3 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:19: '\\f'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:19: '\\f'
             	    {
             	    match('\f'); if (failed) return ;
 
             	    }
             	    break;
             	case 4 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:19: EOL
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:19: EOL
             	    {
             	    mEOL(); if (failed) return ;
 
@@ -375,10 +379,10 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -397,13 +401,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1596:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1611:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -411,14 +415,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1597:25: '\\r'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1598:25: '\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1613:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -440,10 +444,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:4: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:4: ( '-' )? ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:4: ( ( '-' )? ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -452,7 +456,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -461,7 +465,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -475,7 +479,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -506,10 +510,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -518,7 +522,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -527,7 +531,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -541,7 +545,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -559,7 +563,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:26: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -573,7 +577,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:27: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -604,7 +608,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -617,19 +621,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1610:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1625:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -645,14 +649,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:15: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:32: ~ ( '\\\\' | '\"' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -682,13 +686,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -704,14 +708,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:16: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:33: ~ ( '\\\\' | '\\'' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -752,8 +756,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
             {
             if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) {
                 input.consume();
@@ -778,7 +782,7 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1620:9: ( '\\\\' ( '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 )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1635:9: ( '\\\\' ( '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 )
             int alt11=3;
             int LA11_0 = input.LA(1);
 
@@ -850,7 +854,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1618:1: 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 );", 11, 1, input);
+                        new NoViableAltException("1633:1: 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 );", 11, 1, input);
 
                     throw nvae;
                 }
@@ -859,13 +863,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1618:1: 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 );", 11, 0, input);
+                    new NoViableAltException("1633:1: 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 );", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1620:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1635:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
                     {
                     match('\\'); if (failed) return ;
                     if ( input.LA(1)=='\"'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<='+')||(input.LA(1)>='-' && input.LA(1)<='.')||input.LA(1)=='?'||(input.LA(1)>='A' && input.LA(1)<='B')||(input.LA(1)>='D' && input.LA(1)<='E')||input.LA(1)=='G'||input.LA(1)=='Q'||input.LA(1)=='S'||input.LA(1)=='W'||(input.LA(1)>='Z' && input.LA(1)<='^')||(input.LA(1)>='a' && input.LA(1)<='f')||(input.LA(1)>='n' && input.LA(1)<='p')||(input.LA(1)>='r' && input.LA(1)<='t')||(input.LA(1)>='w' && input.LA(1)<='x')||(input.LA(1)>='z' && input.LA(1)<='}') ) {
@@ -883,14 +887,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1624:9: UnicodeEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1639:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1625:9: OctalEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1640:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -907,7 +911,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:9: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:9: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -941,7 +945,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1628:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1643:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -949,31 +953,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1628:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1643:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
 
                 throw nvae;
             }
             switch (alt12) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:14: ( '0' .. '3' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:15: '0' .. '3'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:14: ( '0' .. '3' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:36: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:37: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:36: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -983,18 +987,18 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1004,11 +1008,11 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1632:9: '\\\\' ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1632:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1632:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1028,8 +1032,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -1050,10 +1054,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:4: ( ( 'true' | 'false' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:4: ( ( 'true' | 'false' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:4: ( 'true' | 'false' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1066,13 +1070,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1641:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1656:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:5: 'true'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -1080,7 +1084,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:12: 'false'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -1104,8 +1108,8 @@
     public final void mPACKAGE() throws RecognitionException {
         try {
             int _type = PACKAGE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1644:11: ( 'package' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1644:11: 'package'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1659:11: ( 'package' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1659:11: 'package'
             {
             match("package"); if (failed) return ;
 
@@ -1123,8 +1127,8 @@
     public final void mIMPORT() throws RecognitionException {
         try {
             int _type = IMPORT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:10: ( 'import' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:10: 'import'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:10: ( 'import' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:10: 'import'
             {
             match("import"); if (failed) return ;
 
@@ -1142,8 +1146,8 @@
     public final void mFUNCTION() throws RecognitionException {
         try {
             int _type = FUNCTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1648:12: ( 'function' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1648:12: 'function'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1663:12: ( 'function' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1663:12: 'function'
             {
             match("function"); if (failed) return ;
 
@@ -1161,8 +1165,8 @@
     public final void mGLOBAL() throws RecognitionException {
         try {
             int _type = GLOBAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1650:10: ( 'global' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1650:10: 'global'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1665:10: ( 'global' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1665:10: 'global'
             {
             match("global"); if (failed) return ;
 
@@ -1180,8 +1184,8 @@
     public final void mRULE() throws RecognitionException {
         try {
             int _type = RULE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:11: ( 'rule' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:11: 'rule'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:11: ( 'rule' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:11: 'rule'
             {
             match("rule"); if (failed) return ;
 
@@ -1199,8 +1203,8 @@
     public final void mQUERY() throws RecognitionException {
         try {
             int _type = QUERY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1654:9: ( 'query' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1654:9: 'query'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:9: ( 'query' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:9: 'query'
             {
             match("query"); if (failed) return ;
 
@@ -1218,8 +1222,8 @@
     public final void mTEMPLATE() throws RecognitionException {
         try {
             int _type = TEMPLATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:12: ( 'template' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:12: 'template'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1671:12: ( 'template' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1671:12: 'template'
             {
             match("template"); if (failed) return ;
 
@@ -1237,8 +1241,8 @@
     public final void mATTRIBUTES() throws RecognitionException {
         try {
             int _type = ATTRIBUTES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1658:14: ( 'attributes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1658:14: 'attributes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1673:14: ( 'attributes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1673:14: 'attributes'
             {
             match("attributes"); if (failed) return ;
 
@@ -1256,8 +1260,8 @@
     public final void mDATE_EFFECTIVE() throws RecognitionException {
         try {
             int _type = DATE_EFFECTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:4: ( 'date-effective' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:4: 'date-effective'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1676:4: ( 'date-effective' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1676:4: 'date-effective'
             {
             match("date-effective"); if (failed) return ;
 
@@ -1275,8 +1279,8 @@
     public final void mDATE_EXPIRES() throws RecognitionException {
         try {
             int _type = DATE_EXPIRES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1664:4: ( 'date-expires' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1664:4: 'date-expires'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1679:4: ( 'date-expires' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1679:4: 'date-expires'
             {
             match("date-expires"); if (failed) return ;
 
@@ -1294,8 +1298,8 @@
     public final void mENABLED() throws RecognitionException {
         try {
             int _type = ENABLED;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1666:11: ( 'enabled' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1666:11: 'enabled'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1681:11: ( 'enabled' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1681:11: 'enabled'
             {
             match("enabled"); if (failed) return ;
 
@@ -1313,8 +1317,8 @@
     public final void mSALIENCE() throws RecognitionException {
         try {
             int _type = SALIENCE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:4: ( 'salience' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:4: 'salience'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1684:4: ( 'salience' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1684:4: 'salience'
             {
             match("salience"); if (failed) return ;
 
@@ -1332,8 +1336,8 @@
     public final void mNO_LOOP() throws RecognitionException {
         try {
             int _type = NO_LOOP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1671:11: ( 'no-loop' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1671:11: 'no-loop'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1686:11: ( 'no-loop' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1686:11: 'no-loop'
             {
             match("no-loop"); if (failed) return ;
 
@@ -1351,8 +1355,8 @@
     public final void mAUTO_FOCUS() throws RecognitionException {
         try {
             int _type = AUTO_FOCUS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:4: ( 'auto-focus' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:4: 'auto-focus'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:4: ( 'auto-focus' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:4: 'auto-focus'
             {
             match("auto-focus"); if (failed) return ;
 
@@ -1370,8 +1374,8 @@
     public final void mACTIVATION_GROUP() throws RecognitionException {
         try {
             int _type = ACTIVATION_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1677:4: ( 'activation-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1677:4: 'activation-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1692:4: ( 'activation-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1692:4: 'activation-group'
             {
             match("activation-group"); if (failed) return ;
 
@@ -1389,8 +1393,8 @@
     public final void mAGENDA_GROUP() throws RecognitionException {
         try {
             int _type = AGENDA_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1680:4: ( 'agenda-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1680:4: 'agenda-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:4: ( 'agenda-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:4: 'agenda-group'
             {
             match("agenda-group"); if (failed) return ;
 
@@ -1408,8 +1412,8 @@
     public final void mDIALECT() throws RecognitionException {
         try {
             int _type = DIALECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:4: ( 'dialect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:4: 'dialect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1698:4: ( 'dialect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1698:4: 'dialect'
             {
             match("dialect"); if (failed) return ;
 
@@ -1427,8 +1431,8 @@
     public final void mRULEFLOW_GROUP() throws RecognitionException {
         try {
             int _type = RULEFLOW_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1686:4: ( 'ruleflow-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1686:4: 'ruleflow-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:4: ( 'ruleflow-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:4: 'ruleflow-group'
             {
             match("ruleflow-group"); if (failed) return ;
 
@@ -1446,8 +1450,8 @@
     public final void mDURATION() throws RecognitionException {
         try {
             int _type = DURATION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:4: ( 'duration' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:4: 'duration'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1704:4: ( 'duration' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1704:4: 'duration'
             {
             match("duration"); if (failed) return ;
 
@@ -1465,8 +1469,8 @@
     public final void mLOCK_ON_ACTIVE() throws RecognitionException {
         try {
             int _type = LOCK_ON_ACTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1692:4: ( 'lock-on-active' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1692:4: 'lock-on-active'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:4: ( 'lock-on-active' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:4: 'lock-on-active'
             {
             match("lock-on-active"); if (failed) return ;
 
@@ -1484,8 +1488,8 @@
     public final void mFROM() throws RecognitionException {
         try {
             int _type = FROM;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1694:8: ( 'from' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1694:8: 'from'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:8: ( 'from' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:8: 'from'
             {
             match("from"); if (failed) return ;
 
@@ -1503,8 +1507,8 @@
     public final void mACCUMULATE() throws RecognitionException {
         try {
             int _type = ACCUMULATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1697:4: ( 'accumulate' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1697:4: 'accumulate'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1712:4: ( 'accumulate' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1712:4: 'accumulate'
             {
             match("accumulate"); if (failed) return ;
 
@@ -1522,8 +1526,8 @@
     public final void mINIT() throws RecognitionException {
         try {
             int _type = INIT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1699:8: ( 'init' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1699:8: 'init'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:8: ( 'init' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:8: 'init'
             {
             match("init"); if (failed) return ;
 
@@ -1541,8 +1545,8 @@
     public final void mACTION() throws RecognitionException {
         try {
             int _type = ACTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:10: ( 'action' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:10: 'action'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1716:10: ( 'action' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1716:10: 'action'
             {
             match("action"); if (failed) return ;
 
@@ -1560,8 +1564,8 @@
     public final void mREVERSE() throws RecognitionException {
         try {
             int _type = REVERSE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:11: ( 'reverse' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:11: 'reverse'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1718:11: ( 'reverse' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1718:11: 'reverse'
             {
             match("reverse"); if (failed) return ;
 
@@ -1579,8 +1583,8 @@
     public final void mRESULT() throws RecognitionException {
         try {
             int _type = RESULT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:10: ( 'result' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:10: 'result'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:10: ( 'result' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:10: 'result'
             {
             match("result"); if (failed) return ;
 
@@ -1598,8 +1602,8 @@
     public final void mCOLLECT() throws RecognitionException {
         try {
             int _type = COLLECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:11: ( 'collect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:11: 'collect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1722:11: ( 'collect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1722:11: 'collect'
             {
             match("collect"); if (failed) return ;
 
@@ -1617,8 +1621,8 @@
     public final void mOR() throws RecognitionException {
         try {
             int _type = OR;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:6: ( 'or' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:6: 'or'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1724:6: ( 'or' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1724:6: 'or'
             {
             match("or"); if (failed) return ;
 
@@ -1636,8 +1640,8 @@
     public final void mAND() throws RecognitionException {
         try {
             int _type = AND;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:7: ( 'and' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:7: 'and'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:7: ( 'and' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:7: 'and'
             {
             match("and"); if (failed) return ;
 
@@ -1655,8 +1659,8 @@
     public final void mCONTAINS() throws RecognitionException {
         try {
             int _type = CONTAINS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:4: ( 'contains' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:4: 'contains'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1729:4: ( 'contains' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1729:4: 'contains'
             {
             match("contains"); if (failed) return ;
 
@@ -1674,8 +1678,8 @@
     public final void mEXCLUDES() throws RecognitionException {
         try {
             int _type = EXCLUDES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1717:4: ( 'excludes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1717:4: 'excludes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1732:4: ( 'excludes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1732:4: 'excludes'
             {
             match("excludes"); if (failed) return ;
 
@@ -1693,8 +1697,8 @@
     public final void mMEMBEROF() throws RecognitionException {
         try {
             int _type = MEMBEROF;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:4: ( 'memberOf' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:4: 'memberOf'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:4: ( 'memberOf' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:4: 'memberOf'
             {
             match("memberOf"); if (failed) return ;
 
@@ -1712,8 +1716,8 @@
     public final void mMATCHES() throws RecognitionException {
         try {
             int _type = MATCHES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1722:11: ( 'matches' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1722:11: 'matches'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1737:11: ( 'matches' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1737:11: 'matches'
             {
             match("matches"); if (failed) return ;
 
@@ -1731,8 +1735,8 @@
     public final void mIN() throws RecognitionException {
         try {
             int _type = IN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1724:6: ( 'in' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1724:6: 'in'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:6: ( 'in' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:6: 'in'
             {
             match("in"); if (failed) return ;
 
@@ -1750,8 +1754,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:8: ( 'null' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:8: 'null'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1741:8: ( 'null' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1741:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -1769,8 +1773,8 @@
     public final void mEXISTS() throws RecognitionException {
         try {
             int _type = EXISTS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1728:10: ( 'exists' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1728:10: 'exists'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1743:10: ( 'exists' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1743:10: 'exists'
             {
             match("exists"); if (failed) return ;
 
@@ -1788,8 +1792,8 @@
     public final void mNOT() throws RecognitionException {
         try {
             int _type = NOT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1730:7: ( 'not' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1730:7: 'not'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:7: ( 'not' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:7: 'not'
             {
             match("not"); if (failed) return ;
 
@@ -1807,8 +1811,8 @@
     public final void mEVAL() throws RecognitionException {
         try {
             int _type = EVAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1732:8: ( 'eval' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1732:8: 'eval'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1747:8: ( 'eval' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1747:8: 'eval'
             {
             match("eval"); if (failed) return ;
 
@@ -1826,8 +1830,8 @@
     public final void mFORALL() throws RecognitionException {
         try {
             int _type = FORALL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1734:10: ( 'forall' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1734:10: 'forall'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:10: ( 'forall' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:10: 'forall'
             {
             match("forall"); if (failed) return ;
 
@@ -1845,8 +1849,8 @@
     public final void mWHEN() throws RecognitionException {
         try {
             int _type = WHEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1736:11: ( 'when' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1736:11: 'when'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1751:11: ( 'when' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1751:11: 'when'
             {
             match("when"); if (failed) return ;
 
@@ -1864,8 +1868,8 @@
     public final void mTHEN() throws RecognitionException {
         try {
             int _type = THEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1738:12: ( 'then' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1738:12: 'then'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1753:12: ( 'then' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1753:12: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1883,8 +1887,8 @@
     public final void mEND() throws RecognitionException {
         try {
             int _type = END;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1740:11: ( 'end' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1740:11: 'end'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:11: ( 'end' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:11: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1902,8 +1906,8 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1743:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1743:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1758:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1758:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             {
             if ( input.LA(1)=='$'||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00FF') ) {
                 input.consume();
@@ -1916,7 +1920,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1743:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1758:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1965,8 +1969,8 @@
     public final void mLEFT_PAREN() throws RecognitionException {
         try {
             int _type = LEFT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1747:11: ( '(' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1747:11: '('
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1762:11: ( '(' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1762:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1983,8 +1987,8 @@
     public final void mRIGHT_PAREN() throws RecognitionException {
         try {
             int _type = RIGHT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1751:11: ( ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1751:11: ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1766:11: ( ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1766:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -2001,8 +2005,8 @@
     public final void mLEFT_SQUARE() throws RecognitionException {
         try {
             int _type = LEFT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:11: ( '[' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:11: '['
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1770:11: ( '[' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1770:11: '['
             {
             match('['); if (failed) return ;
 
@@ -2019,8 +2023,8 @@
     public final void mRIGHT_SQUARE() throws RecognitionException {
         try {
             int _type = RIGHT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1759:11: ( ']' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1759:11: ']'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1774:11: ( ']' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1774:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -2037,8 +2041,8 @@
     public final void mLEFT_CURLY() throws RecognitionException {
         try {
             int _type = LEFT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1763:11: ( '{' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1763:11: '{'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:11: ( '{' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -2055,8 +2059,8 @@
     public final void mRIGHT_CURLY() throws RecognitionException {
         try {
             int _type = RIGHT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1767:11: ( '}' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1767:11: '}'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:11: ( '}' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -2073,8 +2077,8 @@
     public final void mCOMMA() throws RecognitionException {
         try {
             int _type = COMMA;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1770:9: ( ',' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1770:9: ','
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1785:9: ( ',' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1785:9: ','
             {
             match(','); if (failed) return ;
 
@@ -2091,8 +2095,8 @@
     public final void mDOT() throws RecognitionException {
         try {
             int _type = DOT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:7: ( '.' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:7: '.'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1788:7: ( '.' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1788:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -2109,8 +2113,8 @@
     public final void mDOUBLE_AMPER() throws RecognitionException {
         try {
             int _type = DOUBLE_AMPER;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1777:4: ( '&&' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1777:4: '&&'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1792:4: ( '&&' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1792:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -2128,8 +2132,8 @@
     public final void mDOUBLE_PIPE() throws RecognitionException {
         try {
             int _type = DOUBLE_PIPE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:4: ( '||' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1781:4: '||'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:4: ( '||' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -2147,11 +2151,11 @@
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1785:4: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1785:4: '#' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1800:4: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1800:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1785:8: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1800:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2170,7 +2174,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1785:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1800:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2200,12 +2204,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:4: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:4: '//' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1806:4: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1806:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1806:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -2224,7 +2228,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1791:36: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1806:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2254,12 +2258,12 @@
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -2284,7 +2288,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1796:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1811:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2315,7 +2319,7 @@
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1801:3: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1816:3: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             if ( input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='\'')||(input.LA(1)>='*' && input.LA(1)<='+')||input.LA(1)=='-'||input.LA(1)=='/'||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='@')||input.LA(1)=='\\'||(input.LA(1)>='^' && input.LA(1)<='_')||input.LA(1)=='|' ) {
@@ -2855,8 +2859,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:14: ( '\\r\\n' )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:16: '\\r\\n'
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:14: ( '\\r\\n' )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,20 +1,66 @@
-// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-06-21 22:44:26
+// $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-06-25 17:49:42
 
 	package org.drools.lang;
-	import java.util.List;
 	import java.util.ArrayList;
-	import java.util.Iterator;
-	import java.util.HashMap;	
-	import java.util.StringTokenizer;
-	import org.drools.lang.descr.*;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
+import org.antlr.runtime.BaseRecognizer;
+import org.antlr.runtime.BitSet;
+import org.antlr.runtime.CommonToken;
+import org.antlr.runtime.DFA;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.FailedPredicateException;
+import org.antlr.runtime.IntStream;
+import org.antlr.runtime.MismatchedNotSetException;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.MismatchedTokenException;
+import org.antlr.runtime.MismatchedTreeNodeException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.Parser;
+import org.antlr.runtime.ParserRuleReturnScope;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.TokenStream;
+import org.drools.lang.descr.AccessorDescr;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.ConditionalElementDescr;
+import org.drools.lang.descr.DeclarativeInvokerDescr;
+import org.drools.lang.descr.DescrFactory;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.FactTemplateDescr;
+import org.drools.lang.descr.FieldAccessDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.FieldTemplateDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.FunctionCallDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.FunctionImportDescr;
+import org.drools.lang.descr.GlobalDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.MethodAccessDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.PatternSourceDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
+import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.RestrictionDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.lang.descr.VariableRestrictionDescr;
 public class DRLParser extends Parser {
     public static final String[] tokenNames = new String[] {
         "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ATTRIBUTES", "PACKAGE", "IMPORT", "FUNCTION", "ID", "DOT", "GLOBAL", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "QUERY", "END", "TEMPLATE", "RULE", "WHEN", "DATE_EFFECTIVE", "STRING", "DATE_EXPIRES", "ENABLED", "BOOL", "SALIENCE", "INT", "NO_LOOP", "AUTO_FOCUS", "ACTIVATION_GROUP", "RULEFLOW_GROUP", "AGENDA_GROUP", "DURATION", "DIALECT", "LOCK_ON_ACTIVE", "OR", "DOUBLE_PIPE", "AND", "DOUBLE_AMPER", "FROM", "EXISTS", "NOT", "EVAL", "FORALL", "ACCUMULATE", "INIT", "ACTION", "REVERSE", "RESULT", "COLLECT", "CONTAINS", "EXCLUDES", "MATCHES", "MEMBEROF", "IN", "FLOAT", "NULL", "LEFT_CURLY", "RIGHT_CURLY", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "MISC", "';'", "':'", "'.*'", "'->'", "'=='", "'>'", "'>='", "'<'", "'<='", "'!='"
@@ -90,7 +136,7 @@
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[74+1];
+            ruleMemo = new HashMap[80+1];
          }
         
 
@@ -2790,12 +2836,12 @@
             if ( (LA37_0==LEFT_PAREN) ) {
                 int LA37_1 = input.LA(2);
 
-                if ( (LA37_1==OR) ) {
+                if ( (LA37_1==ID||LA37_1==LEFT_PAREN||LA37_1==AND||(LA37_1>=EXISTS && LA37_1<=FORALL)) ) {
+                    alt37=2;
+                }
+                else if ( (LA37_1==OR) ) {
                     alt37=1;
                 }
-                else if ( (LA37_1==ID||LA37_1==LEFT_PAREN||LA37_1==AND||(LA37_1>=EXISTS && LA37_1<=FORALL)) ) {
-                    alt37=2;
-                }
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
@@ -3139,72 +3185,56 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778:1: lhs_unary returns [BaseDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? | u= lhs_forall | LEFT_PAREN u= lhs_or RIGHT_PAREN ) opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778:1: lhs_unary returns [BaseDescr d] : ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source ) opt_semicolon ;
     public final BaseDescr lhs_unary() throws RecognitionException {
         BaseDescr d = null;
 
         BaseDescr u = null;
 
-        AccumulateDescr ac = null;
+        BaseDescr ps = null;
 
-        CollectDescr cs = null;
 
-        FromDescr fm = null;
 
-
-
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? | u= lhs_forall | LEFT_PAREN u= lhs_or RIGHT_PAREN ) opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? | u= lhs_forall | LEFT_PAREN u= lhs_or RIGHT_PAREN ) opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: ( ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source ) opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source ) opt_semicolon
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? | u= lhs_forall | LEFT_PAREN u= lhs_or RIGHT_PAREN )
-            int alt43=6;
-            switch ( input.LA(1) ) {
-            case EXISTS:
-                {
-                alt43=1;
-                }
-                break;
-            case NOT:
-                {
-                alt43=2;
-                }
-                break;
-            case EVAL:
-                {
-                alt43=3;
-                }
-                break;
-            case ID:
-                {
-                alt43=4;
-                }
-                break;
-            case FORALL:
-                {
-                alt43=5;
-                }
-                break;
-            case LEFT_PAREN:
-                {
-                alt43=6;
-                }
-                break;
-            default:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source )
+            int alt41=6;
+            int LA41_0 = input.LA(1);
+
+            if ( (LA41_0==EXISTS) && (synpred1())) {
+                alt41=1;
+            }
+            else if ( (LA41_0==NOT) && (synpred2())) {
+                alt41=2;
+            }
+            else if ( (LA41_0==EVAL) && (synpred3())) {
+                alt41=3;
+            }
+            else if ( (LA41_0==FORALL) && (synpred4())) {
+                alt41=4;
+            }
+            else if ( (LA41_0==LEFT_PAREN) && (synpred5())) {
+                alt41=5;
+            }
+            else if ( (LA41_0==ID) ) {
+                alt41=6;
+            }
+            else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("782:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? | u= lhs_forall | LEFT_PAREN u= lhs_or RIGHT_PAREN )", 43, 0, input);
+                    new NoViableAltException("782:4: ( ( EXISTS )=>u= lhs_exist | ( NOT )=>u= lhs_not | ( EVAL )=>u= lhs_eval | ( FORALL )=>u= lhs_forall | ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN | ps= pattern_source )", 41, 0, input);
 
                 throw nvae;
             }
-
-            switch (alt43) {
+            switch (alt41) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:6: u= lhs_exist
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:6: ( EXISTS )=>u= lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1952);
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1960);
                     u=lhs_exist();
                     _fsp--;
                     if (failed) return d;
@@ -3215,9 +3245,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:5: u= lhs_not
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:5: ( NOT )=>u= lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1962);
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1978);
                     u=lhs_not();
                     _fsp--;
                     if (failed) return d;
@@ -3228,9 +3258,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:5: u= lhs_eval
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:5: ( EVAL )=>u= lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1972);
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1997);
                     u=lhs_eval();
                     _fsp--;
                     if (failed) return d;
@@ -3241,188 +3271,231 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:5: u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:5: ( FORALL )=>u= lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_unary1982);
-                    u=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2016);
+                    u=lhs_forall();
                     _fsp--;
                     if (failed) return d;
                     if ( backtracking==0 ) {
                        d = u; 
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:34: ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )?
-                    int alt42=2;
-                    int LA42_0 = input.LA(1);
 
-                    if ( (LA42_0==FROM) ) {
-                        alt42=1;
                     }
-                    switch (alt42) {
-                        case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:13: FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )
-                            {
-                            match(input,FROM,FOLLOW_FROM_in_lhs_unary2000); if (failed) return d;
-                            if ( backtracking==0 ) {
+                    break;
+                case 5 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:5: ( LEFT_PAREN )=> LEFT_PAREN u= lhs_or RIGHT_PAREN
+                    {
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2033); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2037);
+                    u=lhs_or();
+                    _fsp--;
+                    if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2039); if (failed) return d;
+                    if ( backtracking==0 ) {
+                       d = u; 
+                    }
 
-                              				location.setType(Location.LOCATION_LHS_FROM);
-                              				location.setProperty(Location.LOCATION_FROM_CONTENT, "");
-                              		          
-                            }
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:13: ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )
-                            int alt41=3;
-                            switch ( input.LA(1) ) {
-                            case ACCUMULATE:
-                                {
-                                alt41=1;
-                                }
-                                break;
-                            case COLLECT:
-                                {
-                                alt41=2;
-                                }
-                                break;
-                            case ATTRIBUTES:
-                            case PACKAGE:
-                            case IMPORT:
-                            case FUNCTION:
-                            case ID:
-                            case GLOBAL:
-                            case QUERY:
-                            case END:
-                            case TEMPLATE:
-                            case RULE:
-                            case WHEN:
-                            case ENABLED:
-                            case SALIENCE:
-                            case DURATION:
-                            case FROM:
-                            case INIT:
-                            case ACTION:
-                            case REVERSE:
-                            case RESULT:
-                            case CONTAINS:
-                            case EXCLUDES:
-                            case MATCHES:
-                            case MEMBEROF:
-                            case IN:
-                            case THEN:
-                                {
-                                alt41=3;
-                                }
-                                break;
-                            default:
-                                if (backtracking>0) {failed=true; return d;}
-                                NoViableAltException nvae =
-                                    new NoViableAltException("791:13: ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )", 41, 0, input);
+                    }
+                    break;
+                case 6 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:787:5: ps= pattern_source
+                    {
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary2050);
+                    ps=pattern_source();
+                    _fsp--;
+                    if (failed) return d;
+                    if ( backtracking==0 ) {
+                       d = (BaseDescr) ps; 
+                    }
 
-                                throw nvae;
-                            }
+                    }
+                    break;
 
-                            switch (alt41) {
-                                case 1 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:792:15: (ac= accumulate_statement )
-                                    {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:792:15: (ac= accumulate_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:792:17: ac= accumulate_statement
-                                    {
-                                    pushFollow(FOLLOW_accumulate_statement_in_lhs_unary2060);
-                                    ac=accumulate_statement();
-                                    _fsp--;
-                                    if (failed) return d;
-                                    if ( backtracking==0 ) {
-                                       ac.setResultPattern((PatternDescr) u); d =ac; 
-                                    }
+            }
 
-                                    }
+            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary2062);
+            opt_semicolon();
+            _fsp--;
+            if (failed) return d;
 
+            }
 
-                                    }
-                                    break;
-                                case 2 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:15: (cs= collect_statement )
-                                    {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:15: (cs= collect_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:17: cs= collect_statement
-                                    {
-                                    pushFollow(FOLLOW_collect_statement_in_lhs_unary2083);
-                                    cs=collect_statement();
-                                    _fsp--;
-                                    if (failed) return d;
-                                    if ( backtracking==0 ) {
-                                       cs.setResultPattern((PatternDescr) u); d =cs; 
-                                    }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return d;
+    }
+    // $ANTLR end lhs_unary
 
-                                    }
 
+    // $ANTLR start pattern_source
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:792:1: pattern_source returns [BaseDescr d] : u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? ;
+    public final BaseDescr pattern_source() throws RecognitionException {
+        BaseDescr d = null;
 
-                                    }
-                                    break;
-                                case 3 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:15: (fm= from_statement )
-                                    {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:15: (fm= from_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:17: fm= from_statement
-                                    {
-                                    pushFollow(FOLLOW_from_statement_in_lhs_unary2107);
-                                    fm=from_statement();
-                                    _fsp--;
-                                    if (failed) return d;
-                                    if ( backtracking==0 ) {
-                                      fm.setPattern((PatternDescr) u); d =fm; 
-                                    }
+        BaseDescr u = null;
 
-                                    }
+        AccumulateDescr ac = null;
 
+        CollectDescr cs = null;
 
-                                    }
-                                    break;
+        FromDescr fm = null;
 
+
+
+        		d = null;
+        	
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:797:3: (u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:797:3: u= lhs_pattern ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )?
+            {
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2089);
+            u=lhs_pattern();
+            _fsp--;
+            if (failed) return d;
+            if ( backtracking==0 ) {
+               d = u; 
+            }
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:3: ( FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) ) )?
+            int alt43=2;
+            int LA43_0 = input.LA(1);
+
+            if ( (LA43_0==FROM) ) {
+                alt43=1;
+            }
+            switch (alt43) {
+                case 1 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:4: FROM ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )
+                    {
+                    match(input,FROM,FOLLOW_FROM_in_pattern_source2101); if (failed) return d;
+                    if ( backtracking==0 ) {
+
+                      				location.setType(Location.LOCATION_LHS_FROM);
+                      				location.setProperty(Location.LOCATION_FROM_CONTENT, "");
+                      		        
+                    }
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:11: ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )
+                    int alt42=3;
+                    switch ( input.LA(1) ) {
+                    case ACCUMULATE:
+                        {
+                        alt42=1;
+                        }
+                        break;
+                    case COLLECT:
+                        {
+                        alt42=2;
+                        }
+                        break;
+                    case ATTRIBUTES:
+                    case PACKAGE:
+                    case IMPORT:
+                    case FUNCTION:
+                    case ID:
+                    case GLOBAL:
+                    case QUERY:
+                    case END:
+                    case TEMPLATE:
+                    case RULE:
+                    case WHEN:
+                    case ENABLED:
+                    case SALIENCE:
+                    case DURATION:
+                    case FROM:
+                    case INIT:
+                    case ACTION:
+                    case REVERSE:
+                    case RESULT:
+                    case CONTAINS:
+                    case EXCLUDES:
+                    case MATCHES:
+                    case MEMBEROF:
+                    case IN:
+                    case THEN:
+                        {
+                        alt42=3;
+                        }
+                        break;
+                    default:
+                        if (backtracking>0) {failed=true; return d;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("804:11: ( options {k=1; } : (ac= accumulate_statement ) | (cs= collect_statement ) | (fm= from_statement ) )", 42, 0, input);
+
+                        throw nvae;
+                    }
+
+                    switch (alt42) {
+                        case 1 :
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:15: (ac= accumulate_statement )
+                            {
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:15: (ac= accumulate_statement )
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:17: ac= accumulate_statement
+                            {
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2157);
+                            ac=accumulate_statement();
+                            _fsp--;
+                            if (failed) return d;
+                            if ( backtracking==0 ) {
+                               ((PatternDescr)d).setSource((PatternSourceDescr) ac); 
                             }
 
+                            }
 
+
                             }
                             break;
+                        case 2 :
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:15: (cs= collect_statement )
+                            {
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:15: (cs= collect_statement )
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:17: cs= collect_statement
+                            {
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source2180);
+                            cs=collect_statement();
+                            _fsp--;
+                            if (failed) return d;
+                            if ( backtracking==0 ) {
+                               ((PatternDescr)d).setSource((PatternSourceDescr) cs); 
+                            }
 
-                    }
+                            }
 
 
-                    }
-                    break;
-                case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:797:5: u= lhs_forall
-                    {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2146);
-                    u=lhs_forall();
-                    _fsp--;
-                    if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = u; 
-                    }
+                            }
+                            break;
+                        case 3 :
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:807:15: (fm= from_statement )
+                            {
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:807:15: (fm= from_statement )
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:807:17: fm= from_statement
+                            {
+                            pushFollow(FOLLOW_from_statement_in_pattern_source2204);
+                            fm=from_statement();
+                            _fsp--;
+                            if (failed) return d;
+                            if ( backtracking==0 ) {
+                               ((PatternDescr)d).setSource((PatternSourceDescr) fm); 
+                            }
 
+                            }
+
+
+                            }
+                            break;
+
                     }
-                    break;
-                case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:5: LEFT_PAREN u= lhs_or RIGHT_PAREN
-                    {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2155); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2159);
-                    u=lhs_or();
-                    _fsp--;
-                    if (failed) return d;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2161); if (failed) return d;
-                    if ( backtracking==0 ) {
-                       d = u; 
-                    }
 
+
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary2172);
-            opt_semicolon();
-            _fsp--;
-            if (failed) return d;
 
             }
 
@@ -3435,16 +3508,18 @@
         }
         return d;
     }
-    // $ANTLR end lhs_unary
+    // $ANTLR end pattern_source
 
 
     // $ANTLR start lhs_exist
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:803:1: lhs_exist returns [BaseDescr d] : EXISTS ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:1: lhs_exist returns [BaseDescr d] : EXISTS ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) ;
     public final BaseDescr lhs_exist() throws RecognitionException {
         BaseDescr d = null;
 
         Token EXISTS37=null;
         Token RIGHT_PAREN38=null;
+        BaseDescr or = null;
+
         BaseDescr pattern = null;
 
 
@@ -3452,11 +3527,11 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:807:4: ( EXISTS ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:807:4: EXISTS ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:4: ( EXISTS ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:4: EXISTS ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
             {
             EXISTS37=(Token)input.LT(1);
-            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist2194); if (failed) return d;
+            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist2247); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new ExistsDescr( ); 
@@ -3465,7 +3540,7 @@
               			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:814:10: ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:10: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
             int alt44=2;
             int LA44_0 = input.LA(1);
 
@@ -3478,27 +3553,27 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("814:10: ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )", 44, 0, input);
+                    new NoViableAltException("823:10: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )", 44, 0, input);
 
                 throw nvae;
             }
             switch (alt44) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:814:12: ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:12: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:814:12: ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:814:14: LEFT_PAREN pattern= lhs_or RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:12: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:14: LEFT_PAREN or= lhs_or RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2214); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2218);
-                    pattern=lhs_or();
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2267); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2271);
+                    or=lhs_or();
                     _fsp--;
                     if (failed) return d;
                     if ( backtracking==0 ) {
-                       if ( pattern != null ) ((ExistsDescr)d).addDescr( pattern ); 
+                       if ( or != null ) ((ExistsDescr)d).addDescr( or ); 
                     }
                     RIGHT_PAREN38=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2248); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2301); if (failed) return d;
                     if ( backtracking==0 ) {
                        d.setEndCharacter( ((CommonToken)RIGHT_PAREN38).getStopIndex() ); 
                     }
@@ -3509,9 +3584,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:12: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:12: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2298);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2351);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -3545,12 +3620,14 @@
 
 
     // $ANTLR start lhs_not
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:1: lhs_not returns [NotDescr d] : NOT ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:838:1: lhs_not returns [NotDescr d] : NOT ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) ;
     public final NotDescr lhs_not() throws RecognitionException {
         NotDescr d = null;
 
         Token NOT39=null;
         Token RIGHT_PAREN40=null;
+        BaseDescr or = null;
+
         BaseDescr pattern = null;
 
 
@@ -3558,11 +3635,11 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:4: ( NOT ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:4: NOT ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:842:4: ( NOT ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:842:4: NOT ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
             {
             NOT39=(Token)input.LT(1);
-            match(input,NOT,FOLLOW_NOT_in_lhs_not2350); if (failed) return d;
+            match(input,NOT,FOLLOW_NOT_in_lhs_not2403); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new NotDescr( ); 
@@ -3571,7 +3648,7 @@
               			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:3: ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:3: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )
             int alt45=2;
             int LA45_0 = input.LA(1);
 
@@ -3584,27 +3661,27 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("840:3: ( ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )", 45, 0, input);
+                    new NoViableAltException("849:3: ( ( LEFT_PAREN or= lhs_or RIGHT_PAREN ) | pattern= lhs_pattern )", 45, 0, input);
 
                 throw nvae;
             }
             switch (alt45) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:5: ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:5: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:5: ( LEFT_PAREN pattern= lhs_or RIGHT_PAREN )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:7: LEFT_PAREN pattern= lhs_or RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:5: ( LEFT_PAREN or= lhs_or RIGHT_PAREN )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:7: LEFT_PAREN or= lhs_or RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2363); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2367);
-                    pattern=lhs_or();
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2416); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2420);
+                    or=lhs_or();
                     _fsp--;
                     if (failed) return d;
                     if ( backtracking==0 ) {
-                       if ( pattern != null ) d.addDescr( pattern ); 
+                       if ( or != null ) d.addDescr( or ); 
                     }
                     RIGHT_PAREN40=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2398); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2451); if (failed) return d;
                     if ( backtracking==0 ) {
                        d.setEndCharacter( ((CommonToken)RIGHT_PAREN40).getStopIndex() ); 
                     }
@@ -3615,9 +3692,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:3: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:3: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2435);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2488);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -3651,7 +3728,7 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:1: lhs_eval returns [BaseDescr d] : EVAL c= paren_chunk ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:865:1: lhs_eval returns [BaseDescr d] : EVAL c= paren_chunk ;
     public final BaseDescr lhs_eval() throws RecognitionException {
         BaseDescr d = null;
 
@@ -3663,17 +3740,17 @@
         		d = new EvalDescr( );
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:3: ( EVAL c= paren_chunk )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:3: EVAL c= paren_chunk
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:870:3: ( EVAL c= paren_chunk )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:870:3: EVAL c= paren_chunk
             {
             EVAL41=(Token)input.LT(1);
-            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval2481); if (failed) return d;
+            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval2534); if (failed) return d;
             if ( backtracking==0 ) {
 
               			location.setType( Location.LOCATION_LHS_INSIDE_EVAL );
               		
             }
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2492);
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2545);
             c=paren_chunk();
             _fsp--;
             if (failed) return d;
@@ -3708,7 +3785,7 @@
 
 
     // $ANTLR start lhs_forall
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881:1: lhs_forall returns [ForallDescr d] : FORALL LEFT_PAREN base= lhs_pattern ( ( COMMA )? pattern= lhs_pattern )+ RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:890:1: lhs_forall returns [ForallDescr d] : FORALL LEFT_PAREN base= lhs_pattern ( ( COMMA )? pattern= lhs_pattern )+ RIGHT_PAREN ;
     public final ForallDescr lhs_forall() throws RecognitionException {
         ForallDescr d = null;
 
@@ -3723,13 +3800,13 @@
         		d = factory.createForall();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885:4: ( FORALL LEFT_PAREN base= lhs_pattern ( ( COMMA )? pattern= lhs_pattern )+ RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885:4: FORALL LEFT_PAREN base= lhs_pattern ( ( COMMA )? pattern= lhs_pattern )+ RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894:4: ( FORALL LEFT_PAREN base= lhs_pattern ( ( COMMA )? pattern= lhs_pattern )+ RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894:4: FORALL LEFT_PAREN base= lhs_pattern ( ( COMMA )? pattern= lhs_pattern )+ RIGHT_PAREN
             {
             FORALL42=(Token)input.LT(1);
-            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall2518); if (failed) return d;
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2520); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2524);
+            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall2571); if (failed) return d;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2573); if (failed) return d;
+            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2577);
             base=lhs_pattern();
             _fsp--;
             if (failed) return d;
@@ -3741,7 +3818,7 @@
               			d.setLocation( offset(FORALL42.getLine()), FORALL42.getCharPositionInLine() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:3: ( ( COMMA )? pattern= lhs_pattern )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:3: ( ( COMMA )? pattern= lhs_pattern )+
             int cnt47=0;
             loop47:
             do {
@@ -3755,9 +3832,9 @@
 
                 switch (alt47) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:5: ( COMMA )? pattern= lhs_pattern
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:5: ( COMMA )? pattern= lhs_pattern
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:5: ( COMMA )?
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:5: ( COMMA )?
             	    int alt46=2;
             	    int LA46_0 = input.LA(1);
 
@@ -3766,16 +3843,16 @@
             	    }
             	    switch (alt46) {
             	        case 1 :
-            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:5: COMMA
+            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:5: COMMA
             	            {
-            	            match(input,COMMA,FOLLOW_COMMA_in_lhs_forall2537); if (failed) return d;
+            	            match(input,COMMA,FOLLOW_COMMA_in_lhs_forall2590); if (failed) return d;
 
             	            }
             	            break;
 
             	    }
 
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2542);
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2595);
             	    pattern=lhs_pattern();
             	    _fsp--;
             	    if (failed) return d;
@@ -3800,7 +3877,7 @@
             } while (true);
 
             RIGHT_PAREN43=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2555); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2608); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        d.setEndCharacter( ((CommonToken)RIGHT_PAREN43).getStopIndex() );
@@ -3822,7 +3899,7 @@
 
 
     // $ANTLR start lhs_pattern
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );
     public final BaseDescr lhs_pattern() throws RecognitionException {
         BaseDescr d = null;
 
@@ -3833,7 +3910,7 @@
         		d =null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:4: (f= fact_binding | f= fact[null] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:4: (f= fact_binding | f= fact[null] )
             int alt48=2;
             int LA48_0 = input.LA(1);
 
@@ -3849,7 +3926,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("904:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );", 48, 1, input);
+                        new NoViableAltException("913:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );", 48, 1, input);
 
                     throw nvae;
                 }
@@ -3857,15 +3934,15 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("904:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );", 48, 0, input);
+                    new NoViableAltException("913:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact[null] );", 48, 0, input);
 
                 throw nvae;
             }
             switch (alt48) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:4: f= fact_binding
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:4: f= fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2588);
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2641);
                     f=fact_binding();
                     _fsp--;
                     if (failed) return d;
@@ -3873,9 +3950,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:4: f= fact[null]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:921:4: f= fact[null]
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern2596);
+                    pushFollow(FOLLOW_fact_in_lhs_pattern2649);
                     f=fact(null);
                     _fsp--;
                     if (failed) return d;
@@ -3902,7 +3979,7 @@
 
 
     // $ANTLR start from_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:1: from_statement returns [FromDescr d] : ds= from_source[$d] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:1: from_statement returns [FromDescr d] : ds= from_source[$d] ;
     public final FromDescr from_statement() throws RecognitionException {
         FromDescr d = null;
 
@@ -3913,10 +3990,10 @@
         		d =factory.createFrom();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:2: (ds= from_source[$d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:2: ds= from_source[$d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:929:2: (ds= from_source[$d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:929:2: ds= from_source[$d]
             {
-            pushFollow(FOLLOW_from_source_in_from_statement2623);
+            pushFollow(FOLLOW_from_source_in_from_statement2676);
             ds=from_source(d);
             _fsp--;
             if (failed) return d;
@@ -3941,7 +4018,7 @@
 
 
     // $ANTLR start from_source
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:1: from_source[FromDescr from] returns [DeclarativeInvokerDescr ds] : ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:1: from_source[FromDescr from] returns [DeclarativeInvokerDescr ds] : ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )? ;
     public final DeclarativeInvokerDescr from_source(FromDescr from) throws RecognitionException {
         DeclarativeInvokerDescr ds = null;
 
@@ -3956,10 +4033,10 @@
         		FunctionCallDescr fc = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:4: (ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:4: ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:4: (ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:4: ident= identifier ( options {k=1; } : args= paren_chunk )? ( expression_chain[$from, ad] )?
             {
-            pushFollow(FOLLOW_identifier_in_from_source2652);
+            pushFollow(FOLLOW_identifier_in_from_source2705);
             ident=identifier();
             _fsp--;
             if (failed) return ds;
@@ -3973,7 +4050,7 @@
               			location.setProperty(Location.LOCATION_FROM_CONTENT, ident.start.getText());
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:3: ( options {k=1; } : args= paren_chunk )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:950:3: ( options {k=1; } : args= paren_chunk )?
             int alt49=2;
             int LA49_0 = input.LA(1);
 
@@ -3982,9 +4059,9 @@
             }
             switch (alt49) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:5: args= paren_chunk
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:957:5: args= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source2680);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source2733);
                     args=paren_chunk();
                     _fsp--;
                     if (failed) return ds;
@@ -4008,7 +4085,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:3: ( expression_chain[$from, ad] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:3: ( expression_chain[$from, ad] )?
             int alt50=2;
             int LA50_0 = input.LA(1);
 
@@ -4017,9 +4094,9 @@
             }
             switch (alt50) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:3: expression_chain[$from, ad]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:3: expression_chain[$from, ad]
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source2693);
+                    pushFollow(FOLLOW_expression_chain_in_from_source2746);
                     expression_chain(from,  ad);
                     _fsp--;
                     if (failed) return ds;
@@ -4053,7 +4130,7 @@
 
 
     // $ANTLR start accumulate_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:1: accumulate_statement returns [AccumulateDescr d] : ACCUMULATE LEFT_PAREN pattern= lhs_pattern ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:1: accumulate_statement returns [AccumulateDescr d] : ACCUMULATE LEFT_PAREN pattern= pattern_source ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN ;
     public final AccumulateDescr accumulate_statement() throws RecognitionException {
         AccumulateDescr d = null;
 
@@ -4069,11 +4146,11 @@
         		d = factory.createAccumulate();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:10: ( ACCUMULATE LEFT_PAREN pattern= lhs_pattern ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:10: ACCUMULATE LEFT_PAREN pattern= lhs_pattern ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:988:10: ( ACCUMULATE LEFT_PAREN pattern= pattern_source ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:988:10: ACCUMULATE LEFT_PAREN pattern= pattern_source ( COMMA )? ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) ) RIGHT_PAREN
             {
             ACCUMULATE44=(Token)input.LT(1);
-            match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement2734); if (failed) return d;
+            match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement2787); if (failed) return d;
             if ( backtracking==0 ) {
                
               			d.setLocation( offset(ACCUMULATE44.getLine()), ACCUMULATE44.getCharPositionInLine() );
@@ -4081,12 +4158,12 @@
               			location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE );
               		
             }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2744); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_accumulate_statement2748);
-            pattern=lhs_pattern();
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2797); if (failed) return d;
+            pushFollow(FOLLOW_pattern_source_in_accumulate_statement2801);
+            pattern=pattern_source();
             _fsp--;
             if (failed) return d;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985:34: ( COMMA )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:37: ( COMMA )?
             int alt51=2;
             int LA51_0 = input.LA(1);
 
@@ -4095,9 +4172,9 @@
             }
             switch (alt51) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985:34: COMMA
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:37: COMMA
                     {
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2750); if (failed) return d;
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2803); if (failed) return d;
 
                     }
                     break;
@@ -4106,10 +4183,10 @@
 
             if ( backtracking==0 ) {
 
-              		        d.setSourcePattern( (PatternDescr) pattern );
+              		        d.setInputPattern( (PatternDescr) pattern );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:3: ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:998:3: ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) )
             int alt56=2;
             int LA56_0 = input.LA(1);
 
@@ -4122,28 +4199,28 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("989:3: ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) )", 56, 0, input);
+                    new NoViableAltException("998:3: ( ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk ) | (id= ID text= paren_chunk ) )", 56, 0, input);
 
                 throw nvae;
             }
             switch (alt56) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:5: ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:998:5: ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:5: ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:4: INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:998:5: ( INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:4: INIT text= paren_chunk ( COMMA )? ACTION text= paren_chunk ( COMMA )? ( REVERSE text= paren_chunk ( COMMA )? )? RESULT text= paren_chunk
                     {
-                    match(input,INIT,FOLLOW_INIT_in_accumulate_statement2768); if (failed) return d;
+                    match(input,INIT,FOLLOW_INIT_in_accumulate_statement2821); if (failed) return d;
                     if ( backtracking==0 ) {
 
                       				location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE_INIT );
                       			
                     }
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2781);
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2834);
                     text=paren_chunk();
                     _fsp--;
                     if (failed) return d;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:21: ( COMMA )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:21: ( COMMA )?
                     int alt52=2;
                     int LA52_0 = input.LA(1);
 
@@ -4152,9 +4229,9 @@
                     }
                     switch (alt52) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:21: COMMA
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:21: COMMA
                             {
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2783); if (failed) return d;
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2836); if (failed) return d;
 
                             }
                             break;
@@ -4170,12 +4247,12 @@
                       				}
                       			
                     }
-                    match(input,ACTION,FOLLOW_ACTION_in_accumulate_statement2794); if (failed) return d;
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2798);
+                    match(input,ACTION,FOLLOW_ACTION_in_accumulate_statement2847); if (failed) return d;
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2851);
                     text=paren_chunk();
                     _fsp--;
                     if (failed) return d;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1002:28: ( COMMA )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:28: ( COMMA )?
                     int alt53=2;
                     int LA53_0 = input.LA(1);
 
@@ -4184,9 +4261,9 @@
                     }
                     switch (alt53) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1002:28: COMMA
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:28: COMMA
                             {
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2800); if (failed) return d;
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2853); if (failed) return d;
 
                             }
                             break;
@@ -4202,7 +4279,7 @@
                       				}
                       			
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:4: ( REVERSE text= paren_chunk ( COMMA )? )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:4: ( REVERSE text= paren_chunk ( COMMA )? )?
                     int alt55=2;
                     int LA55_0 = input.LA(1);
 
@@ -4211,14 +4288,14 @@
                     }
                     switch (alt55) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:6: REVERSE text= paren_chunk ( COMMA )?
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:6: REVERSE text= paren_chunk ( COMMA )?
                             {
-                            match(input,REVERSE,FOLLOW_REVERSE_in_accumulate_statement2813); if (failed) return d;
-                            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2817);
+                            match(input,REVERSE,FOLLOW_REVERSE_in_accumulate_statement2866); if (failed) return d;
+                            pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2870);
                             text=paren_chunk();
                             _fsp--;
                             if (failed) return d;
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:31: ( COMMA )?
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:31: ( COMMA )?
                             int alt54=2;
                             int LA54_0 = input.LA(1);
 
@@ -4227,9 +4304,9 @@
                             }
                             switch (alt54) {
                                 case 1 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:31: COMMA
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:31: COMMA
                                     {
-                                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2819); if (failed) return d;
+                                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2872); if (failed) return d;
 
                                     }
                                     break;
@@ -4251,8 +4328,8 @@
 
                     }
 
-                    match(input,RESULT,FOLLOW_RESULT_in_accumulate_statement2836); if (failed) return d;
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2840);
+                    match(input,RESULT,FOLLOW_RESULT_in_accumulate_statement2889); if (failed) return d;
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2893);
                     text=paren_chunk();
                     _fsp--;
                     if (failed) return d;
@@ -4271,14 +4348,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:3: (id= ID text= paren_chunk )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:3: (id= ID text= paren_chunk )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:3: (id= ID text= paren_chunk )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:4: id= ID text= paren_chunk
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:3: (id= ID text= paren_chunk )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:4: id= ID text= paren_chunk
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_accumulate_statement2866); if (failed) return d;
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2870);
+                    match(input,ID,FOLLOW_ID_in_accumulate_statement2919); if (failed) return d;
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_statement2923);
                     text=paren_chunk();
                     _fsp--;
                     if (failed) return d;
@@ -4302,7 +4379,7 @@
             }
 
             RIGHT_PAREN45=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2887); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2940); if (failed) return d;
             if ( backtracking==0 ) {
 
               			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
@@ -4325,7 +4402,7 @@
 
 
     // $ANTLR start expression_chain
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:4: expression_chain[FromDescr from, AccessorDescr as] : ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1056:1: expression_chain[FromDescr from, AccessorDescr as] : ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? ) ;
     public final void expression_chain(FromDescr from, AccessorDescr as) throws RecognitionException {
         identifier_return field = null;
 
@@ -4339,14 +4416,14 @@
         	    	MethodAccessDescr ma = null;	
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:2: ( ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:2: ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:2: ( ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:2: ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:2: ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:4: DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:2: ( DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:4: DOT field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )? ( expression_chain[from, as] )?
             {
-            match(input,DOT,FOLLOW_DOT_in_expression_chain2913); if (failed) return ;
-            pushFollow(FOLLOW_identifier_in_expression_chain2917);
+            match(input,DOT,FOLLOW_DOT_in_expression_chain2969); if (failed) return ;
+            pushFollow(FOLLOW_identifier_in_expression_chain2973);
             field=identifier();
             _fsp--;
             if (failed) return ;
@@ -4358,14 +4435,14 @@
               		fa.setEndCharacter( ((CommonToken)((Token)field.start)).getStopIndex() );
               	    
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1069:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )?
             int alt57=3;
             alt57 = dfa57.predict(input);
             switch (alt57) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:6: ( LEFT_SQUARE )=>sqarg= square_chunk
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:6: ( LEFT_SQUARE )=>sqarg= square_chunk
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain2948);
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain3004);
                     sqarg=square_chunk();
                     _fsp--;
                     if (failed) return ;
@@ -4379,9 +4456,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:6: ( LEFT_PAREN )=>paarg= paren_chunk
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:6: ( LEFT_PAREN )=>paarg= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2981);
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain3037);
                     paarg=paren_chunk();
                     _fsp--;
                     if (failed) return ;
@@ -4399,7 +4476,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:4: ( expression_chain[from, as] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:4: ( expression_chain[from, as] )?
             int alt58=2;
             int LA58_0 = input.LA(1);
 
@@ -4408,9 +4485,9 @@
             }
             switch (alt58) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:4: expression_chain[from, as]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:4: expression_chain[from, as]
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain2996);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain3052);
                     expression_chain(from,  as);
                     _fsp--;
                     if (failed) return ;
@@ -4447,7 +4524,7 @@
 
 
     // $ANTLR start collect_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1087:1: collect_statement returns [CollectDescr d] : COLLECT LEFT_PAREN pattern= lhs_pattern RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:1: collect_statement returns [CollectDescr d] : COLLECT LEFT_PAREN pattern= pattern_source RIGHT_PAREN ;
     public final CollectDescr collect_statement() throws RecognitionException {
         CollectDescr d = null;
 
@@ -4460,11 +4537,11 @@
         		d = factory.createCollect();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1092:10: ( COLLECT LEFT_PAREN pattern= lhs_pattern RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1092:10: COLLECT LEFT_PAREN pattern= lhs_pattern RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:10: ( COLLECT LEFT_PAREN pattern= pattern_source RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:10: COLLECT LEFT_PAREN pattern= pattern_source RIGHT_PAREN
             {
             COLLECT46=(Token)input.LT(1);
-            match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement3047); if (failed) return d;
+            match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement3103); if (failed) return d;
             if ( backtracking==0 ) {
                
               			d.setLocation( offset(COLLECT46.getLine()), COLLECT46.getCharPositionInLine() );
@@ -4472,16 +4549,16 @@
               			location.setType( Location.LOCATION_LHS_FROM_COLLECT );
               		
             }
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement3057); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_collect_statement3061);
-            pattern=lhs_pattern();
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement3113); if (failed) return d;
+            pushFollow(FOLLOW_pattern_source_in_collect_statement3117);
+            pattern=pattern_source();
             _fsp--;
             if (failed) return d;
             RIGHT_PAREN47=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement3063); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement3119); if (failed) return d;
             if ( backtracking==0 ) {
 
-              		        d.setSourcePattern( (PatternDescr)pattern );
+              		        d.setInputPattern( (PatternDescr) pattern );
               			d.setEndCharacter( ((CommonToken)RIGHT_PAREN47).getStopIndex() );
               			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
               		
@@ -4502,7 +4579,7 @@
 
 
     // $ANTLR start fact_binding
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:1: fact_binding returns [BaseDescr d] : ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:1: fact_binding returns [BaseDescr d] : ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN ) ;
     public final BaseDescr fact_binding() throws RecognitionException {
         BaseDescr d = null;
 
@@ -4519,12 +4596,12 @@
         		OrDescr or = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:4: ( ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:4: ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:4: ( ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:4: ID ':' (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )
             {
             ID48=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_fact_binding3095); if (failed) return d;
-            match(input,72,FOLLOW_72_in_fact_binding3097); if (failed) return d;
+            match(input,ID,FOLLOW_ID_in_fact_binding3151); if (failed) return d;
+            match(input,72,FOLLOW_72_in_fact_binding3153); if (failed) return d;
             if ( backtracking==0 ) {
 
                		        // handling incomplete parsing
@@ -4532,7 +4609,7 @@
                		        ((PatternDescr) d).setIdentifier( ID48.getText() );
                		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1118:3: (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1129:3: (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )
             int alt60=2;
             int LA60_0 = input.LA(1);
 
@@ -4545,15 +4622,15 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1118:3: (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )", 60, 0, input);
+                    new NoViableAltException("1129:3: (fe= fact[$ID.text] | LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN )", 60, 0, input);
 
                 throw nvae;
             }
             switch (alt60) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1118:5: fe= fact[$ID.text]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1129:5: fe= fact[$ID.text]
                     {
-                    pushFollow(FOLLOW_fact_in_fact_binding3111);
+                    pushFollow(FOLLOW_fact_in_fact_binding3167);
                     fe=fact(ID48.getText());
                     _fsp--;
                     if (failed) return d;
@@ -4570,10 +4647,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:4: LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:4: LEFT_PAREN left= fact[$ID.text] ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )* RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding3127); if (failed) return d;
-                    pushFollow(FOLLOW_fact_in_fact_binding3131);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding3183); if (failed) return d;
+                    pushFollow(FOLLOW_fact_in_fact_binding3187);
                     left=fact(ID48.getText());
                     _fsp--;
                     if (failed) return d;
@@ -4586,7 +4663,7 @@
                          			}
                        		
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:4: ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:4: ( ( OR | DOUBLE_PIPE ) right= fact[$ID.text] )*
                     loop59:
                     do {
                         int alt59=2;
@@ -4599,7 +4676,7 @@
 
                         switch (alt59) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:6: ( OR | DOUBLE_PIPE ) right= fact[$ID.text]
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:6: ( OR | DOUBLE_PIPE ) right= fact[$ID.text]
                     	    {
                     	    if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
                     	        input.consume();
@@ -4609,10 +4686,10 @@
                     	        if (backtracking>0) {failed=true; return d;}
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_binding3144);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_binding3200);    throw mse;
                     	    }
 
-                    	    pushFollow(FOLLOW_fact_in_fact_binding3156);
+                    	    pushFollow(FOLLOW_fact_in_fact_binding3212);
                     	    right=fact(ID48.getText());
                     	    _fsp--;
                     	    if (failed) return d;
@@ -4635,7 +4712,7 @@
                         }
                     } while (true);
 
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding3174); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding3230); if (failed) return d;
 
                     }
                     break;
@@ -4658,7 +4735,7 @@
 
 
     // $ANTLR start fact
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:1: fact[String ident] returns [BaseDescr d] : id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1161:1: fact[String ident] returns [BaseDescr d] : id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN ;
     public final BaseDescr fact(String ident) throws RecognitionException {
         BaseDescr d = null;
 
@@ -4672,8 +4749,8 @@
         		PatternDescr pattern = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:11: (id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:11: id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1167:11: (id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1167:11: id= qualified_id LEFT_PAREN ( constraints[pattern] )? RIGHT_PAREN
             {
             if ( backtracking==0 ) {
 
@@ -4684,7 +4761,7 @@
                			d = pattern; 
                	        
             }
-            pushFollow(FOLLOW_qualified_id_in_fact3229);
+            pushFollow(FOLLOW_qualified_id_in_fact3285);
             id=qualified_id();
             _fsp--;
             if (failed) return d;
@@ -4698,7 +4775,7 @@
                		
             }
             LEFT_PAREN49=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3239); if (failed) return d;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3295); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START );
@@ -4708,7 +4785,7 @@
                			pattern.setLeftParentCharacter( ((CommonToken)LEFT_PAREN49).getStartIndex() );
                		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1179:4: ( constraints[pattern] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1190:4: ( constraints[pattern] )?
             int alt61=2;
             int LA61_0 = input.LA(1);
 
@@ -4717,9 +4794,9 @@
             }
             switch (alt61) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1179:6: constraints[pattern]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1190:6: constraints[pattern]
                     {
-                    pushFollow(FOLLOW_constraints_in_fact3253);
+                    pushFollow(FOLLOW_constraints_in_fact3309);
                     constraints(pattern);
                     _fsp--;
                     if (failed) return d;
@@ -4730,7 +4807,7 @@
             }
 
             RIGHT_PAREN50=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3264); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3320); if (failed) return d;
             if ( backtracking==0 ) {
 
               			this.location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
@@ -4755,17 +4832,17 @@
 
 
     // $ANTLR start constraints
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1190:1: constraints[PatternDescr pattern] : constraint[$pattern] ( COMMA constraint[$pattern] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1201:1: constraints[PatternDescr pattern] : constraint[$pattern] ( COMMA constraint[$pattern] )* ;
     public final void constraints(PatternDescr pattern) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1191:4: ( constraint[$pattern] ( COMMA constraint[$pattern] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1191:4: constraint[$pattern] ( COMMA constraint[$pattern] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1202:4: ( constraint[$pattern] ( COMMA constraint[$pattern] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1202:4: constraint[$pattern] ( COMMA constraint[$pattern] )*
             {
-            pushFollow(FOLLOW_constraint_in_constraints3284);
+            pushFollow(FOLLOW_constraint_in_constraints3340);
             constraint(pattern);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1192:3: ( COMMA constraint[$pattern] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:3: ( COMMA constraint[$pattern] )*
             loop62:
             do {
                 int alt62=2;
@@ -4778,13 +4855,13 @@
 
                 switch (alt62) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1192:5: COMMA constraint[$pattern]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:5: COMMA constraint[$pattern]
             	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3291); if (failed) return ;
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3347); if (failed) return ;
             	    if ( backtracking==0 ) {
             	       location.setType( Location.LOCATION_LHS_INSIDE_CONDITION_START ); 
             	    }
-            	    pushFollow(FOLLOW_constraint_in_constraints3300);
+            	    pushFollow(FOLLOW_constraint_in_constraints3356);
             	    constraint(pattern);
             	    _fsp--;
             	    if (failed) return ;
@@ -4813,21 +4890,21 @@
 
 
     // $ANTLR start constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1197:1: constraint[PatternDescr pattern] : or_constr[top] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1208:1: constraint[PatternDescr pattern] : or_constr[top] ;
     public final void constraint(PatternDescr pattern) throws RecognitionException {
 
         		ConditionalElementDescr top = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1202:3: ( or_constr[top] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1202:3: or_constr[top]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1213:3: ( or_constr[top] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1213:3: or_constr[top]
             {
             if ( backtracking==0 ) {
 
               			top = pattern.getConstraint();
               		
             }
-            pushFollow(FOLLOW_or_constr_in_constraint3333);
+            pushFollow(FOLLOW_or_constr_in_constraint3389);
             or_constr(top);
             _fsp--;
             if (failed) return ;
@@ -4847,20 +4924,20 @@
 
 
     // $ANTLR start or_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1208:1: or_constr[ConditionalElementDescr base] : and_constr[or] ( DOUBLE_PIPE and_constr[or] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1219:1: or_constr[ConditionalElementDescr base] : and_constr[or] ( DOUBLE_PIPE and_constr[or] )* ;
     public final void or_constr(ConditionalElementDescr base) throws RecognitionException {
 
         		OrDescr or = new OrDescr();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1213:3: ( and_constr[or] ( DOUBLE_PIPE and_constr[or] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1213:3: and_constr[or] ( DOUBLE_PIPE and_constr[or] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1224:3: ( and_constr[or] ( DOUBLE_PIPE and_constr[or] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1224:3: and_constr[or] ( DOUBLE_PIPE and_constr[or] )*
             {
-            pushFollow(FOLLOW_and_constr_in_or_constr3356);
+            pushFollow(FOLLOW_and_constr_in_or_constr3412);
             and_constr(or);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:3: ( DOUBLE_PIPE and_constr[or] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1225:3: ( DOUBLE_PIPE and_constr[or] )*
             loop63:
             do {
                 int alt63=2;
@@ -4873,15 +4950,15 @@
 
                 switch (alt63) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:5: DOUBLE_PIPE and_constr[or]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1225:5: DOUBLE_PIPE and_constr[or]
             	    {
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3364); if (failed) return ;
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3420); if (failed) return ;
             	    if ( backtracking==0 ) {
 
             	      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
             	      		
             	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr3373);
+            	    pushFollow(FOLLOW_and_constr_in_or_constr3429);
             	    and_constr(or);
             	    _fsp--;
             	    if (failed) return ;
@@ -4919,20 +4996,20 @@
 
 
     // $ANTLR start and_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1229:1: and_constr[ConditionalElementDescr base] : unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1240:1: and_constr[ConditionalElementDescr base] : unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )* ;
     public final void and_constr(ConditionalElementDescr base) throws RecognitionException {
 
         		AndDescr and = new AndDescr();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1234:3: ( unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1234:3: unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1245:3: ( unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1245:3: unary_constr[and] ( DOUBLE_AMPER unary_constr[and] )*
             {
-            pushFollow(FOLLOW_unary_constr_in_and_constr3405);
+            pushFollow(FOLLOW_unary_constr_in_and_constr3461);
             unary_constr(and);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1235:3: ( DOUBLE_AMPER unary_constr[and] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246:3: ( DOUBLE_AMPER unary_constr[and] )*
             loop64:
             do {
                 int alt64=2;
@@ -4945,15 +5022,15 @@
 
                 switch (alt64) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1235:5: DOUBLE_AMPER unary_constr[and]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246:5: DOUBLE_AMPER unary_constr[and]
             	    {
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3413); if (failed) return ;
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3469); if (failed) return ;
             	    if ( backtracking==0 ) {
 
             	      			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_START);
             	      		
             	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr3422);
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr3478);
             	    unary_constr(and);
             	    _fsp--;
             	    if (failed) return ;
@@ -4991,13 +5068,13 @@
 
 
     // $ANTLR start unary_constr
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1250:1: unary_constr[ConditionalElementDescr base] : ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1261:1: unary_constr[ConditionalElementDescr base] : ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] ) ;
     public final void unary_constr(ConditionalElementDescr base) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:3: ( ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1263:3: ( ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1263:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1263:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )
             int alt65=3;
             switch ( input.LA(1) ) {
             case ATTRIBUTES:
@@ -5042,16 +5119,16 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1252:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )", 65, 0, input);
+                    new NoViableAltException("1263:3: ( field_constraint[$base] | LEFT_PAREN or_constr[$base] RIGHT_PAREN | EVAL predicate[$base] )", 65, 0, input);
 
                 throw nvae;
             }
 
             switch (alt65) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:5: field_constraint[$base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1263:5: field_constraint[$base]
                     {
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr3450);
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr3506);
                     field_constraint(base);
                     _fsp--;
                     if (failed) return ;
@@ -5059,22 +5136,22 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1253:5: LEFT_PAREN or_constr[$base] RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1264:5: LEFT_PAREN or_constr[$base] RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3458); if (failed) return ;
-                    pushFollow(FOLLOW_or_constr_in_unary_constr3460);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3514); if (failed) return ;
+                    pushFollow(FOLLOW_or_constr_in_unary_constr3516);
                     or_constr(base);
                     _fsp--;
                     if (failed) return ;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3463); if (failed) return ;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3519); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1254:5: EVAL predicate[$base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1265:5: EVAL predicate[$base]
                     {
-                    match(input,EVAL,FOLLOW_EVAL_in_unary_constr3469); if (failed) return ;
-                    pushFollow(FOLLOW_predicate_in_unary_constr3471);
+                    match(input,EVAL,FOLLOW_EVAL_in_unary_constr3525); if (failed) return ;
+                    pushFollow(FOLLOW_predicate_in_unary_constr3527);
                     predicate(base);
                     _fsp--;
                     if (failed) return ;
@@ -5100,7 +5177,7 @@
 
 
     // $ANTLR start field_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1258:1: field_constraint[ConditionalElementDescr base] : ( ID ':' )? f= accessor_path ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1269:1: field_constraint[ConditionalElementDescr base] : ( ID ':' )? f= accessor_path ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )? ;
     public final void field_constraint(ConditionalElementDescr base) throws RecognitionException {
         Token ID51=null;
         accessor_path_return f = null;
@@ -5112,10 +5189,10 @@
         		RestrictionConnectiveDescr top = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1265:3: ( ( ID ':' )? f= accessor_path ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1265:3: ( ID ':' )? f= accessor_path ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:3: ( ( ID ':' )? f= accessor_path ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:3: ( ID ':' )? f= accessor_path ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )?
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1265:3: ( ID ':' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:3: ( ID ':' )?
             int alt66=2;
             int LA66_0 = input.LA(1);
 
@@ -5128,11 +5205,11 @@
             }
             switch (alt66) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1265:5: ID ':'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:5: ID ':'
                     {
                     ID51=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_field_constraint3501); if (failed) return ;
-                    match(input,72,FOLLOW_72_in_field_constraint3503); if (failed) return ;
+                    match(input,ID,FOLLOW_ID_in_field_constraint3557); if (failed) return ;
+                    match(input,72,FOLLOW_72_in_field_constraint3559); if (failed) return ;
                     if ( backtracking==0 ) {
                        
                       			fbd = new FieldBindingDescr();
@@ -5149,7 +5226,7 @@
 
             }
 
-            pushFollow(FOLLOW_accessor_path_in_field_constraint3524);
+            pushFollow(FOLLOW_accessor_path_in_field_constraint3580);
             f=accessor_path();
             _fsp--;
             if (failed) return ;
@@ -5178,7 +5255,7 @@
               		    }
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1299:3: ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1310:3: ( ( options {backtrack=true; } : or_restr_connective[top] ) | '->' predicate[$base] )?
             int alt67=3;
             int LA67_0 = input.LA(1);
 
@@ -5190,12 +5267,12 @@
             }
             switch (alt67) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1300:4: ( options {backtrack=true; } : or_restr_connective[top] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1311:4: ( options {backtrack=true; } : or_restr_connective[top] )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1300:4: ( options {backtrack=true; } : or_restr_connective[top] )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1301:6: or_restr_connective[top]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1311:4: ( options {backtrack=true; } : or_restr_connective[top] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1312:6: or_restr_connective[top]
                     {
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3552);
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3608);
                     or_restr_connective(top);
                     _fsp--;
                     if (failed) return ;
@@ -5214,10 +5291,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1310:4: '->' predicate[$base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1321:4: '->' predicate[$base]
                     {
-                    match(input,74,FOLLOW_74_in_field_constraint3572); if (failed) return ;
-                    pushFollow(FOLLOW_predicate_in_field_constraint3574);
+                    match(input,74,FOLLOW_74_in_field_constraint3628); if (failed) return ;
+                    pushFollow(FOLLOW_predicate_in_field_constraint3630);
                     predicate(base);
                     _fsp--;
                     if (failed) return ;
@@ -5243,35 +5320,35 @@
 
 
     // $ANTLR start or_restr_connective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1315:1: or_restr_connective[ RestrictionConnectiveDescr base ] : and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1326:1: or_restr_connective[ RestrictionConnectiveDescr base ] options {backtrack=true; } : and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )* ;
     public final void or_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
 
         		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:3: ( and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:3: and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1334:3: ( and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1334:3: and_restr_connective[or] ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*
             {
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3603);
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3673);
             and_restr_connective(or);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1321:3: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1335:3: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*
             loop68:
             do {
                 int alt68=2;
                 alt68 = dfa68.predict(input);
                 switch (alt68) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1322:5: DOUBLE_PIPE and_restr_connective[or]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1337:6: DOUBLE_PIPE and_restr_connective[or]
             	    {
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3622); if (failed) return ;
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3697); if (failed) return ;
             	    if ( backtracking==0 ) {
 
             	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
             	      			
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3634);
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3708);
             	    and_restr_connective(or);
             	    _fsp--;
             	    if (failed) return ;
@@ -5307,7 +5384,7 @@
 
 
     // $ANTLR start and_restr_connective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1337:1: and_restr_connective[ RestrictionConnectiveDescr base ] : constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1352:1: and_restr_connective[ RestrictionConnectiveDescr base ] : constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )* ;
     public final void and_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
         Token t=null;
 
@@ -5315,30 +5392,30 @@
         		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1342:3: ( constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1342:3: constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1357:3: ( constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1357:3: constraint_expression[and] ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*
             {
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3666);
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3740);
             constraint_expression(and);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1343:3: ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1358:3: ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*
             loop69:
             do {
                 int alt69=2;
                 alt69 = dfa69.predict(input);
                 switch (alt69) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344:5: t= DOUBLE_AMPER constraint_expression[and]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1359:5: t= DOUBLE_AMPER constraint_expression[and]
             	    {
             	    t=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3687); if (failed) return ;
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3761); if (failed) return ;
             	    if ( backtracking==0 ) {
 
             	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
             	      			
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3698);
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3772);
             	    constraint_expression(and);
             	    _fsp--;
             	    if (failed) return ;
@@ -5374,13 +5451,13 @@
 
 
     // $ANTLR start constraint_expression
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1359:1: constraint_expression[RestrictionConnectiveDescr base] : ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1374:1: constraint_expression[RestrictionConnectiveDescr base] : ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN ) ;
     public final void constraint_expression(RestrictionConnectiveDescr base) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1361:3: ( ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1361:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1376:3: ( ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1376:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1361:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1376:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )
             int alt70=3;
             switch ( input.LA(1) ) {
             case IN:
@@ -5401,7 +5478,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1361:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )", 70, 2, input);
+                        new NoViableAltException("1376:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )", 70, 2, input);
 
                     throw nvae;
                 }
@@ -5429,16 +5506,16 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1361:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )", 70, 0, input);
+                    new NoViableAltException("1376:3: ( compound_operator[$base] | simple_operator[$base] | LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN )", 70, 0, input);
 
                 throw nvae;
             }
 
             switch (alt70) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1361:5: compound_operator[$base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1376:5: compound_operator[$base]
                     {
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3735);
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3809);
                     compound_operator(base);
                     _fsp--;
                     if (failed) return ;
@@ -5446,9 +5523,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1362:5: simple_operator[$base]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1377:5: simple_operator[$base]
                     {
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3742);
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3816);
                     simple_operator(base);
                     _fsp--;
                     if (failed) return ;
@@ -5456,19 +5533,19 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1363:5: LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1378:5: LEFT_PAREN or_restr_connective[$base] RIGHT_PAREN
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3749); if (failed) return ;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3823); if (failed) return ;
                     if ( backtracking==0 ) {
 
                       			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
                       		
                     }
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3758);
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3832);
                     or_restr_connective(base);
                     _fsp--;
                     if (failed) return ;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3764); if (failed) return ;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3838); if (failed) return ;
 
                     }
                     break;
@@ -5491,7 +5568,7 @@
 
 
     // $ANTLR start simple_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1372:1: simple_operator[RestrictionConnectiveDescr base] : (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[$base, op] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:1: simple_operator[RestrictionConnectiveDescr base] : (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[$base, op] ;
     public final void simple_operator(RestrictionConnectiveDescr base) throws RecognitionException {
         Token t=null;
         Token n=null;
@@ -5502,10 +5579,10 @@
         		String op = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1377:3: ( (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[$base, op] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1377:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[$base, op]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:3: ( (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[$base, op] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[$base, op]
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1377:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF )
             int alt71=13;
             switch ( input.LA(1) ) {
             case 75:
@@ -5546,6 +5623,11 @@
             case NOT:
                 {
                 switch ( input.LA(2) ) {
+                case MATCHES:
+                    {
+                    alt71=11;
+                    }
+                    break;
                 case CONTAINS:
                     {
                     alt71=8;
@@ -5556,15 +5638,10 @@
                     alt71=13;
                     }
                     break;
-                case MATCHES:
-                    {
-                    alt71=11;
-                    }
-                    break;
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1377:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF )", 71, 8, input);
+                        new NoViableAltException("1392:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF )", 71, 8, input);
 
                     throw nvae;
                 }
@@ -5589,119 +5666,119 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1377:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF )", 71, 0, input);
+                    new NoViableAltException("1392:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | n= NOT t= CONTAINS | t= EXCLUDES | t= MATCHES | n= NOT t= MATCHES | t= MEMBEROF | n= NOT t= MEMBEROF )", 71, 0, input);
 
                 throw nvae;
             }
 
             switch (alt71) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1377:5: t= '=='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:5: t= '=='
                     {
                     t=(Token)input.LT(1);
-                    match(input,75,FOLLOW_75_in_simple_operator3795); if (failed) return ;
+                    match(input,75,FOLLOW_75_in_simple_operator3869); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1378:5: t= '>'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1393:5: t= '>'
                     {
                     t=(Token)input.LT(1);
-                    match(input,76,FOLLOW_76_in_simple_operator3803); if (failed) return ;
+                    match(input,76,FOLLOW_76_in_simple_operator3877); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1379:5: t= '>='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1394:5: t= '>='
                     {
                     t=(Token)input.LT(1);
-                    match(input,77,FOLLOW_77_in_simple_operator3811); if (failed) return ;
+                    match(input,77,FOLLOW_77_in_simple_operator3885); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1380:5: t= '<'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1395:5: t= '<'
                     {
                     t=(Token)input.LT(1);
-                    match(input,78,FOLLOW_78_in_simple_operator3819); if (failed) return ;
+                    match(input,78,FOLLOW_78_in_simple_operator3893); if (failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1381:5: t= '<='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1396:5: t= '<='
                     {
                     t=(Token)input.LT(1);
-                    match(input,79,FOLLOW_79_in_simple_operator3827); if (failed) return ;
+                    match(input,79,FOLLOW_79_in_simple_operator3901); if (failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:5: t= '!='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1397:5: t= '!='
                     {
                     t=(Token)input.LT(1);
-                    match(input,80,FOLLOW_80_in_simple_operator3835); if (failed) return ;
+                    match(input,80,FOLLOW_80_in_simple_operator3909); if (failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1383:5: t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1398:5: t= CONTAINS
                     {
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator3843); if (failed) return ;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator3917); if (failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1384:5: n= NOT t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1399:5: n= NOT t= CONTAINS
                     {
                     n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator3851); if (failed) return ;
+                    match(input,NOT,FOLLOW_NOT_in_simple_operator3925); if (failed) return ;
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator3855); if (failed) return ;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator3929); if (failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1385:5: t= EXCLUDES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1400:5: t= EXCLUDES
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator3863); if (failed) return ;
+                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator3937); if (failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1386:5: t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1401:5: t= MATCHES
                     {
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator3871); if (failed) return ;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator3945); if (failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:5: n= NOT t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1402:5: n= NOT t= MATCHES
                     {
                     n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator3879); if (failed) return ;
+                    match(input,NOT,FOLLOW_NOT_in_simple_operator3953); if (failed) return ;
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator3883); if (failed) return ;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator3957); if (failed) return ;
 
                     }
                     break;
                 case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:5: t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1403:5: t= MEMBEROF
                     {
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator3891); if (failed) return ;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator3965); if (failed) return ;
 
                     }
                     break;
                 case 13 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:5: n= NOT t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1404:5: n= NOT t= MEMBEROF
                     {
                     n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator3899); if (failed) return ;
+                    match(input,NOT,FOLLOW_NOT_in_simple_operator3973); if (failed) return ;
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator3903); if (failed) return ;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator3977); if (failed) return ;
 
                     }
                     break;
@@ -5719,7 +5796,7 @@
               		    }
               		
             }
-            pushFollow(FOLLOW_expression_value_in_simple_operator3917);
+            pushFollow(FOLLOW_expression_value_in_simple_operator3991);
             rd=expression_value(base,  op);
             _fsp--;
             if (failed) return ;
@@ -5744,7 +5821,7 @@
 
 
     // $ANTLR start compound_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:1: compound_operator[RestrictionConnectiveDescr base] : ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op] ( COMMA rd= expression_value[group, op] )* RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1423:1: compound_operator[RestrictionConnectiveDescr base] : ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op] ( COMMA rd= expression_value[group, op] )* RIGHT_PAREN ;
     public final void compound_operator(RestrictionConnectiveDescr base) throws RecognitionException {
         RestrictionDescr rd = null;
 
@@ -5754,10 +5831,10 @@
         		RestrictionConnectiveDescr group = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:3: ( ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op] ( COMMA rd= expression_value[group, op] )* RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:3: ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op] ( COMMA rd= expression_value[group, op] )* RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1429:3: ( ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op] ( COMMA rd= expression_value[group, op] )* RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1429:3: ( IN | NOT IN ) LEFT_PAREN rd= expression_value[group, op] ( COMMA rd= expression_value[group, op] )* RIGHT_PAREN
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:3: ( IN | NOT IN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1429:3: ( IN | NOT IN )
             int alt72=2;
             int LA72_0 = input.LA(1);
 
@@ -5770,15 +5847,15 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1414:3: ( IN | NOT IN )", 72, 0, input);
+                    new NoViableAltException("1429:3: ( IN | NOT IN )", 72, 0, input);
 
                 throw nvae;
             }
             switch (alt72) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:5: IN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1429:5: IN
                     {
-                    match(input,IN,FOLLOW_IN_in_compound_operator3947); if (failed) return ;
+                    match(input,IN,FOLLOW_IN_in_compound_operator4021); if (failed) return ;
                     if ( backtracking==0 ) {
 
                       			  op = "==";
@@ -5792,10 +5869,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1422:5: NOT IN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1437:5: NOT IN
                     {
-                    match(input,NOT,FOLLOW_NOT_in_compound_operator3959); if (failed) return ;
-                    match(input,IN,FOLLOW_IN_in_compound_operator3961); if (failed) return ;
+                    match(input,NOT,FOLLOW_NOT_in_compound_operator4033); if (failed) return ;
+                    match(input,IN,FOLLOW_IN_in_compound_operator4035); if (failed) return ;
                     if ( backtracking==0 ) {
 
                       			  op = "!=";
@@ -5811,12 +5888,12 @@
 
             }
 
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3976); if (failed) return ;
-            pushFollow(FOLLOW_expression_value_in_compound_operator3980);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator4050); if (failed) return ;
+            pushFollow(FOLLOW_expression_value_in_compound_operator4054);
             rd=expression_value(group,  op);
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1432:3: ( COMMA rd= expression_value[group, op] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1447:3: ( COMMA rd= expression_value[group, op] )*
             loop73:
             do {
                 int alt73=2;
@@ -5829,10 +5906,10 @@
 
                 switch (alt73) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1432:5: COMMA rd= expression_value[group, op]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1447:5: COMMA rd= expression_value[group, op]
             	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3987); if (failed) return ;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator3991);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator4061); if (failed) return ;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator4065);
             	    rd=expression_value(group,  op);
             	    _fsp--;
             	    if (failed) return ;
@@ -5845,7 +5922,7 @@
                 }
             } while (true);
 
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator4000); if (failed) return ;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator4074); if (failed) return ;
             if ( backtracking==0 ) {
 
               			location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_END);
@@ -5867,7 +5944,7 @@
 
 
     // $ANTLR start expression_value
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1439:1: expression_value[RestrictionConnectiveDescr base, String op] returns [RestrictionDescr rd] : (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1454:1: expression_value[RestrictionConnectiveDescr base, String op] returns [RestrictionDescr rd] : (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk ) ;
     public final RestrictionDescr expression_value(RestrictionConnectiveDescr base, String op) throws RecognitionException {
         RestrictionDescr rd = null;
 
@@ -5882,10 +5959,10 @@
         		rd = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1444:3: ( (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1444:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1459:3: ( (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1459:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1444:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1459:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )
             int alt74=3;
             switch ( input.LA(1) ) {
             case ATTRIBUTES:
@@ -5934,16 +6011,16 @@
             default:
                 if (backtracking>0) {failed=true; return rd;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1444:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )", 74, 0, input);
+                    new NoViableAltException("1459:3: (ap= accessor_path | lc= literal_constraint | rvc= paren_chunk )", 74, 0, input);
 
                 throw nvae;
             }
 
             switch (alt74) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1444:5: ap= accessor_path
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1459:5: ap= accessor_path
                     {
-                    pushFollow(FOLLOW_accessor_path_in_expression_value4034);
+                    pushFollow(FOLLOW_accessor_path_in_expression_value4108);
                     ap=accessor_path();
                     _fsp--;
                     if (failed) return rd;
@@ -5960,9 +6037,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1452:5: lc= literal_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1467:5: lc= literal_constraint
                     {
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value4054);
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value4128);
                     lc=literal_constraint();
                     _fsp--;
                     if (failed) return rd;
@@ -5975,9 +6052,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1456:5: rvc= paren_chunk
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1471:5: rvc= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value4068);
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value4142);
                     rvc=paren_chunk();
                     _fsp--;
                     if (failed) return rd;
@@ -6016,7 +6093,7 @@
 
 
     // $ANTLR start literal_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1484:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
     public final String literal_constraint() throws RecognitionException {
         String text = null;
 
@@ -6026,10 +6103,10 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1473:4: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1473:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:4: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1473:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
             int alt75=5;
             switch ( input.LA(1) ) {
             case STRING:
@@ -6060,17 +6137,17 @@
             default:
                 if (backtracking>0) {failed=true; return text;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1473:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 75, 0, input);
+                    new NoViableAltException("1488:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 75, 0, input);
 
                 throw nvae;
             }
 
             switch (alt75) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1473:6: t= STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:6: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint4111); if (failed) return text;
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint4185); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = getString( t.getText() ); 
                     }
@@ -6078,10 +6155,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1474:5: t= INT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1489:5: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint4122); if (failed) return text;
+                    match(input,INT,FOLLOW_INT_in_literal_constraint4196); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -6089,10 +6166,10 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1475:5: t= FLOAT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1490:5: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint4135); if (failed) return text;
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint4209); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -6100,10 +6177,10 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:5: t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1491:5: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint4146); if (failed) return text;
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint4220); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -6111,10 +6188,10 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1477:5: t= NULL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1492:5: t= NULL
                     {
                     t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_literal_constraint4158); if (failed) return text;
+                    match(input,NULL,FOLLOW_NULL_in_literal_constraint4232); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = null; 
                     }
@@ -6140,7 +6217,7 @@
 
 
     // $ANTLR start predicate
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1481:1: predicate[ConditionalElementDescr base] : text= paren_chunk ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1496:1: predicate[ConditionalElementDescr base] : text= paren_chunk ;
     public final void predicate(ConditionalElementDescr base) throws RecognitionException {
         paren_chunk_return text = null;
 
@@ -6149,10 +6226,10 @@
         		PredicateDescr d = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1486:3: (text= paren_chunk )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1486:3: text= paren_chunk
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:3: (text= paren_chunk )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:3: text= paren_chunk
             {
-            pushFollow(FOLLOW_paren_chunk_in_predicate4196);
+            pushFollow(FOLLOW_paren_chunk_in_predicate4270);
             text=paren_chunk();
             _fsp--;
             if (failed) return ;
@@ -6184,17 +6261,17 @@
     };
 
     // $ANTLR start curly_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1498:1: curly_chunk : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1513:1: curly_chunk : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY ;
     public final curly_chunk_return curly_chunk() throws RecognitionException {
         curly_chunk_return retval = new curly_chunk_return();
         retval.start = input.LT(1);
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1500:3: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1500:3: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:3: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:3: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )* RIGHT_CURLY
             {
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk4214); if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1500:14: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )*
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk4288); if (failed) return retval;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:14: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk )*
             loop76:
             do {
                 int alt76=3;
@@ -6210,7 +6287,7 @@
 
                 switch (alt76) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1500:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
             	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_SQUARE && input.LA(1)<=80) ) {
             	        input.consume();
@@ -6220,16 +6297,16 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk4218);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk4292);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1500:44: curly_chunk
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:44: curly_chunk
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk4227);
+            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk4301);
             	    curly_chunk();
             	    _fsp--;
             	    if (failed) return retval;
@@ -6242,7 +6319,7 @@
                 }
             } while (true);
 
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk4232); if (failed) return retval;
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk4306); if (failed) return retval;
 
             }
 
@@ -6263,17 +6340,17 @@
     };
 
     // $ANTLR start paren_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1503:1: paren_chunk : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1518:1: paren_chunk : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN ;
     public final paren_chunk_return paren_chunk() throws RecognitionException {
         paren_chunk_return retval = new paren_chunk_return();
         retval.start = input.LT(1);
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1505:3: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1505:3: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1520:3: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1520:3: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )* RIGHT_PAREN
             {
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk4246); if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1505:14: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )*
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk4320); if (failed) return retval;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1520:14: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk )*
             loop77:
             do {
                 int alt77=3;
@@ -6289,7 +6366,7 @@
 
                 switch (alt77) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1505:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1520:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
             	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=GLOBAL)||input.LA(1)==COMMA||(input.LA(1)>=QUERY && input.LA(1)<=80) ) {
             	        input.consume();
@@ -6299,16 +6376,16 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk4250);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk4324);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1505:44: paren_chunk
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1520:44: paren_chunk
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk4259);
+            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk4333);
             	    paren_chunk();
             	    _fsp--;
             	    if (failed) return retval;
@@ -6321,7 +6398,7 @@
                 }
             } while (true);
 
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk4264); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk4338); if (failed) return retval;
 
             }
 
@@ -6342,17 +6419,17 @@
     };
 
     // $ANTLR start square_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1508:1: square_chunk : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1523:1: square_chunk : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE ;
     public final square_chunk_return square_chunk() throws RecognitionException {
         square_chunk_return retval = new square_chunk_return();
         retval.start = input.LT(1);
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:3: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:3: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:3: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:3: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )* RIGHT_SQUARE
             {
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk4277); if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:15: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )*
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk4351); if (failed) return retval;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:15: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk )*
             loop78:
             do {
                 int alt78=3;
@@ -6368,7 +6445,7 @@
 
                 switch (alt78) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
             	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=RIGHT_CURLY)||(input.LA(1)>=THEN && input.LA(1)<=80) ) {
             	        input.consume();
@@ -6378,16 +6455,16 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk4281);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk4355);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:47: square_chunk
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:47: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_square_chunk4290);
+            	    pushFollow(FOLLOW_square_chunk_in_square_chunk4364);
             	    square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
@@ -6400,7 +6477,7 @@
                 }
             } while (true);
 
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk4295); if (failed) return retval;
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk4369); if (failed) return retval;
 
             }
 
@@ -6421,17 +6498,17 @@
     };
 
     // $ANTLR start qualified_id
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1513:1: qualified_id : ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1528:1: qualified_id : ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* ;
     public final qualified_id_return qualified_id() throws RecognitionException {
         qualified_id_return retval = new qualified_id_return();
         retval.start = input.LT(1);
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:5: ( ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:5: ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:5: ( ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:5: ID ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )*
             {
-            match(input,ID,FOLLOW_ID_in_qualified_id4308); if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:8: ( DOT identifier )*
+            match(input,ID,FOLLOW_ID_in_qualified_id4382); if (failed) return retval;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:8: ( DOT identifier )*
             loop79:
             do {
                 int alt79=2;
@@ -6444,10 +6521,10 @@
 
                 switch (alt79) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:10: DOT identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:10: DOT identifier
             	    {
-            	    match(input,DOT,FOLLOW_DOT_in_qualified_id4312); if (failed) return retval;
-            	    pushFollow(FOLLOW_identifier_in_qualified_id4314);
+            	    match(input,DOT,FOLLOW_DOT_in_qualified_id4386); if (failed) return retval;
+            	    pushFollow(FOLLOW_identifier_in_qualified_id4388);
             	    identifier();
             	    _fsp--;
             	    if (failed) return retval;
@@ -6460,7 +6537,7 @@
                 }
             } while (true);
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:28: ( LEFT_SQUARE RIGHT_SQUARE )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:28: ( LEFT_SQUARE RIGHT_SQUARE )*
             loop80:
             do {
                 int alt80=2;
@@ -6473,10 +6550,10 @@
 
                 switch (alt80) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:30: LEFT_SQUARE RIGHT_SQUARE
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:30: LEFT_SQUARE RIGHT_SQUARE
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_qualified_id4321); if (failed) return retval;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_qualified_id4323); if (failed) return retval;
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_qualified_id4395); if (failed) return retval;
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_qualified_id4397); if (failed) return retval;
 
             	    }
             	    break;
@@ -6506,20 +6583,20 @@
     };
 
     // $ANTLR start dotted_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1517:1: dotted_name : identifier ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1532:1: dotted_name : identifier ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* ;
     public final dotted_name_return dotted_name() throws RecognitionException {
         dotted_name_return retval = new dotted_name_return();
         retval.start = input.LT(1);
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1518:4: ( identifier ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1518:4: identifier ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:4: ( identifier ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:4: identifier ( DOT identifier )* ( LEFT_SQUARE RIGHT_SQUARE )*
             {
-            pushFollow(FOLLOW_identifier_in_dotted_name4338);
+            pushFollow(FOLLOW_identifier_in_dotted_name4412);
             identifier();
             _fsp--;
             if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1518:15: ( DOT identifier )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:15: ( DOT identifier )*
             loop81:
             do {
                 int alt81=2;
@@ -6532,10 +6609,10 @@
 
                 switch (alt81) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1518:17: DOT identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:17: DOT identifier
             	    {
-            	    match(input,DOT,FOLLOW_DOT_in_dotted_name4342); if (failed) return retval;
-            	    pushFollow(FOLLOW_identifier_in_dotted_name4344);
+            	    match(input,DOT,FOLLOW_DOT_in_dotted_name4416); if (failed) return retval;
+            	    pushFollow(FOLLOW_identifier_in_dotted_name4418);
             	    identifier();
             	    _fsp--;
             	    if (failed) return retval;
@@ -6548,7 +6625,7 @@
                 }
             } while (true);
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1518:35: ( LEFT_SQUARE RIGHT_SQUARE )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:35: ( LEFT_SQUARE RIGHT_SQUARE )*
             loop82:
             do {
                 int alt82=2;
@@ -6561,10 +6638,10 @@
 
                 switch (alt82) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1518:37: LEFT_SQUARE RIGHT_SQUARE
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:37: LEFT_SQUARE RIGHT_SQUARE
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4351); if (failed) return retval;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4353); if (failed) return retval;
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4425); if (failed) return retval;
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4427); if (failed) return retval;
 
             	    }
             	    break;
@@ -6594,20 +6671,20 @@
     };
 
     // $ANTLR start accessor_path
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1521:1: accessor_path : accessor_element ( DOT accessor_element )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1536:1: accessor_path : accessor_element ( DOT accessor_element )* ;
     public final accessor_path_return accessor_path() throws RecognitionException {
         accessor_path_return retval = new accessor_path_return();
         retval.start = input.LT(1);
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1522:4: ( accessor_element ( DOT accessor_element )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1522:4: accessor_element ( DOT accessor_element )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1537:4: ( accessor_element ( DOT accessor_element )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1537:4: accessor_element ( DOT accessor_element )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path4369);
+            pushFollow(FOLLOW_accessor_element_in_accessor_path4443);
             accessor_element();
             _fsp--;
             if (failed) return retval;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1522:21: ( DOT accessor_element )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1537:21: ( DOT accessor_element )*
             loop83:
             do {
                 int alt83=2;
@@ -6620,10 +6697,10 @@
 
                 switch (alt83) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1522:23: DOT accessor_element
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1537:23: DOT accessor_element
             	    {
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path4373); if (failed) return retval;
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path4375);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path4447); if (failed) return retval;
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path4449);
             	    accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
@@ -6654,17 +6731,17 @@
 
 
     // $ANTLR start accessor_element
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:1: accessor_element : identifier ( square_chunk )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1540:1: accessor_element : identifier ( square_chunk )* ;
     public final void accessor_element() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:3: ( identifier ( square_chunk )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:3: identifier ( square_chunk )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1542:3: ( identifier ( square_chunk )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1542:3: identifier ( square_chunk )*
             {
-            pushFollow(FOLLOW_identifier_in_accessor_element4393);
+            pushFollow(FOLLOW_identifier_in_accessor_element4467);
             identifier();
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:14: ( square_chunk )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1542:14: ( square_chunk )*
             loop84:
             do {
                 int alt84=2;
@@ -6677,9 +6754,9 @@
 
                 switch (alt84) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:14: square_chunk
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1542:14: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element4395);
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element4469);
             	    square_chunk();
             	    _fsp--;
             	    if (failed) return ;
@@ -6708,21 +6785,21 @@
 
 
     // $ANTLR start rhs_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:1: rhs_chunk[RuleDescr rule] : THEN (~ END )* loc= END opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:1: rhs_chunk[RuleDescr rule] : THEN (~ END )* loc= END opt_semicolon ;
     public final void rhs_chunk(RuleDescr rule) throws RecognitionException {
         Token loc=null;
         Token THEN52=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1532:3: ( THEN (~ END )* loc= END opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1532:3: THEN (~ END )* loc= END opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1547:3: ( THEN (~ END )* loc= END opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1547:3: THEN (~ END )* loc= END opt_semicolon
             {
             THEN52=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk4412); if (failed) return ;
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk4486); if (failed) return ;
             if ( backtracking==0 ) {
                location.setType( Location.LOCATION_RHS ); 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:3: (~ END )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1548:3: (~ END )*
             loop85:
             do {
                 int alt85=2;
@@ -6735,7 +6812,7 @@
 
                 switch (alt85) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:5: ~ END
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1548:5: ~ END
             	    {
             	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=QUERY)||(input.LA(1)>=TEMPLATE && input.LA(1)<=80) ) {
             	        input.consume();
@@ -6745,7 +6822,7 @@
             	        if (backtracking>0) {failed=true; return ;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4420);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4494);    throw mse;
             	    }
 
 
@@ -6758,8 +6835,8 @@
             } while (true);
 
             loc=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk4444); if (failed) return ;
-            pushFollow(FOLLOW_opt_semicolon_in_rhs_chunk4446);
+            match(input,END,FOLLOW_END_in_rhs_chunk4518); if (failed) return ;
+            pushFollow(FOLLOW_opt_semicolon_in_rhs_chunk4520);
             opt_semicolon();
             _fsp--;
             if (failed) return ;
@@ -6796,7 +6873,7 @@
 
 
     // $ANTLR start name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1552:1: name returns [String name] : ( ID | STRING );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1567:1: name returns [String name] : ( ID | STRING );
     public final String name() throws RecognitionException {
         String name = null;
 
@@ -6804,7 +6881,7 @@
         Token STRING54=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1553:5: ( ID | STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1568:5: ( ID | STRING )
             int alt86=2;
             int LA86_0 = input.LA(1);
 
@@ -6817,16 +6894,16 @@
             else {
                 if (backtracking>0) {failed=true; return name;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1552:1: name returns [String name] : ( ID | STRING );", 86, 0, input);
+                    new NoViableAltException("1567:1: name returns [String name] : ( ID | STRING );", 86, 0, input);
 
                 throw nvae;
             }
             switch (alt86) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1553:5: ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1568:5: ID
                     {
                     ID53=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_name4480); if (failed) return name;
+                    match(input,ID,FOLLOW_ID_in_name4554); if (failed) return name;
                     if ( backtracking==0 ) {
                        name = ID53.getText(); 
                     }
@@ -6834,10 +6911,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1554:5: STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1569:5: STRING
                     {
                     STRING54=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_name4488); if (failed) return name;
+                    match(input,STRING,FOLLOW_STRING_in_name4562); if (failed) return name;
                     if ( backtracking==0 ) {
                        name = getString( STRING54.getText() ); 
                     }
@@ -6861,13 +6938,13 @@
     };
 
     // $ANTLR start identifier
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1557:1: identifier : ( ID | PACKAGE | FUNCTION | GLOBAL | IMPORT | RULE | QUERY | TEMPLATE | ATTRIBUTES | ENABLED | SALIENCE | DURATION | FROM | INIT | ACTION | REVERSE | RESULT | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | WHEN | THEN | END | IN );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:1: identifier : ( ID | PACKAGE | FUNCTION | GLOBAL | IMPORT | RULE | QUERY | TEMPLATE | ATTRIBUTES | ENABLED | SALIENCE | DURATION | FROM | INIT | ACTION | REVERSE | RESULT | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | WHEN | THEN | END | IN );
     public final identifier_return identifier() throws RecognitionException {
         identifier_return retval = new identifier_return();
         retval.start = input.LT(1);
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1558:10: ( ID | PACKAGE | FUNCTION | GLOBAL | IMPORT | RULE | QUERY | TEMPLATE | ATTRIBUTES | ENABLED | SALIENCE | DURATION | FROM | INIT | ACTION | REVERSE | RESULT | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | WHEN | THEN | END | IN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1573:10: ( ID | PACKAGE | FUNCTION | GLOBAL | IMPORT | RULE | QUERY | TEMPLATE | ATTRIBUTES | ENABLED | SALIENCE | DURATION | FROM | INIT | ACTION | REVERSE | RESULT | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | WHEN | THEN | END | IN )
             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=ID)||input.LA(1)==GLOBAL||(input.LA(1)>=QUERY && input.LA(1)<=WHEN)||input.LA(1)==ENABLED||input.LA(1)==SALIENCE||input.LA(1)==DURATION||input.LA(1)==FROM||(input.LA(1)>=INIT && input.LA(1)<=RESULT)||(input.LA(1)>=CONTAINS && input.LA(1)<=IN)||input.LA(1)==THEN ) {
@@ -6899,10 +6976,10 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:6: ( LEFT_SQUARE )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:8: LEFT_SQUARE
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:6: ( EXISTS )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:8: EXISTS
         {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred12940); if (failed) return ;
+        match(input,EXISTS,FOLLOW_EXISTS_in_synpred11952); if (failed) return ;
 
         }
     }
@@ -6910,10 +6987,10 @@
 
     // $ANTLR start synpred2
     public final void synpred2_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:6: ( LEFT_PAREN )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:8: LEFT_PAREN
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:5: ( NOT )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:7: NOT
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred22973); if (failed) return ;
+        match(input,NOT,FOLLOW_NOT_in_synpred21970); if (failed) return ;
 
         }
     }
@@ -6921,14 +6998,10 @@
 
     // $ANTLR start synpred3
     public final void synpred3_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1322:5: ( DOUBLE_PIPE and_restr_connective[or] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1322:5: DOUBLE_PIPE and_restr_connective[or]
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:5: ( EVAL )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:7: EVAL
         {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred33622); if (failed) return ;
-        pushFollow(FOLLOW_and_restr_connective_in_synpred33634);
-        and_restr_connective(or);
-        _fsp--;
-        if (failed) return ;
+        match(input,EVAL,FOLLOW_EVAL_in_synpred31989); if (failed) return ;
 
         }
     }
@@ -6936,18 +7009,77 @@
 
     // $ANTLR start synpred4
     public final void synpred4_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344:5: ( DOUBLE_AMPER constraint_expression[and] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344:5: DOUBLE_AMPER constraint_expression[and]
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:5: ( FORALL )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:7: FORALL
         {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred43687); if (failed) return ;
-        pushFollow(FOLLOW_constraint_expression_in_synpred43698);
+        match(input,FORALL,FOLLOW_FORALL_in_synpred42008); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred4
+
+    // $ANTLR start synpred5
+    public final void synpred5_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:5: ( LEFT_PAREN )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:7: LEFT_PAREN
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred52027); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred5
+
+    // $ANTLR start synpred6
+    public final void synpred6_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:6: ( LEFT_SQUARE )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:8: LEFT_SQUARE
+        {
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred62996); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred6
+
+    // $ANTLR start synpred7
+    public final void synpred7_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:6: ( LEFT_PAREN )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:8: LEFT_PAREN
+        {
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred73029); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred7
+
+    // $ANTLR start synpred8
+    public final void synpred8_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1337:6: ( DOUBLE_PIPE and_restr_connective[or] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1337:6: DOUBLE_PIPE and_restr_connective[or]
+        {
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred83697); if (failed) return ;
+        pushFollow(FOLLOW_and_restr_connective_in_synpred83708);
+        and_restr_connective(or);
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred8
+
+    // $ANTLR start synpred9
+    public final void synpred9_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1359:5: ( DOUBLE_AMPER constraint_expression[and] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1359:5: DOUBLE_AMPER constraint_expression[and]
+        {
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred93761); if (failed) return ;
+        pushFollow(FOLLOW_constraint_expression_in_synpred93772);
         constraint_expression(and);
         _fsp--;
         if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred4
+    // $ANTLR end synpred9
 
     public final boolean synpred4() {
         backtracking++;
@@ -6963,6 +7095,34 @@
         failed=false;
         return success;
     }
+    public final boolean synpred9() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred9_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred7() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred7_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
     public final boolean synpred2() {
         backtracking++;
         int start = input.mark();
@@ -7005,6 +7165,48 @@
         failed=false;
         return success;
     }
+    public final boolean synpred5() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred5_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred6() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred6_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred8() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred8_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
 
 
     protected DFA12 dfa12 = new DFA12(this);
@@ -7193,104 +7395,104 @@
     static final String DFA57_eofS =
         "\150\uffff";
     static final String DFA57_minS =
-        "\1\10\1\uffff\1\4\1\uffff\2\4\1\0\5\4\2\uffff\1\0\12\4\2\0\1\4\1"+
-        "\0\1\4\1\0\3\4\3\0\1\4\1\0\1\4\1\0\3\4\3\0\1\4\1\0\1\4\1\0\3\4\2"+
-        "\0\3\4\1\0\3\4\1\0\1\4\1\0\1\4\1\uffff\44\0";
+        "\1\10\1\uffff\1\4\1\uffff\2\4\1\0\5\4\2\uffff\1\4\1\0\5\4\1\0\5"+
+        "\4\2\0\1\4\2\0\2\4\1\0\2\4\2\0\1\4\2\0\2\4\1\0\2\4\1\0\1\4\3\0\2"+
+        "\4\1\0\3\4\1\0\3\4\1\0\2\4\1\0\1\4\1\uffff\44\0";
     static final String DFA57_maxS =
-        "\1\107\1\uffff\1\120\1\uffff\2\120\1\0\5\120\2\uffff\1\0\12\120"+
-        "\2\0\1\120\1\0\1\120\1\0\3\120\3\0\1\120\1\0\1\120\1\0\3\120\3\0"+
-        "\1\120\1\0\1\120\1\0\3\120\2\0\3\120\1\0\3\120\1\0\1\120\1\0\1\120"+
-        "\1\uffff\44\0";
+        "\1\107\1\uffff\1\120\1\uffff\2\120\1\0\5\120\2\uffff\1\120\1\0\5"+
+        "\120\1\0\5\120\2\0\1\120\2\0\2\120\1\0\2\120\2\0\1\120\2\0\2\120"+
+        "\1\0\2\120\1\0\1\120\3\0\2\120\1\0\3\120\1\0\3\120\1\0\2\120\1\0"+
+        "\1\120\1\uffff\44\0";
     static final String DFA57_acceptS =
         "\1\uffff\1\1\1\uffff\1\3\10\uffff\2\2\65\uffff\1\2\44\uffff";
     static final String DFA57_specialS =
-        "\1\27\1\uffff\1\35\1\uffff\1\5\1\66\1\41\1\21\1\71\1\62\1\57\1\50"+
-        "\2\uffff\1\53\1\36\1\54\1\34\1\17\1\33\1\74\1\26\1\60\1\43\1\31"+
-        "\1\1\1\24\1\56\1\45\1\55\1\20\1\47\1\12\1\7\1\75\1\0\1\25\1\16\1"+
-        "\65\1\15\1\3\1\63\1\40\1\22\1\6\1\2\1\73\1\42\1\4\1\44\1\61\1\23"+
-        "\1\64\1\37\1\67\1\46\1\51\1\13\1\10\1\72\1\52\1\14\1\11\1\76\1\30"+
-        "\1\32\1\70\45\uffff}>";
+        "\1\76\1\uffff\1\70\1\uffff\1\40\1\37\1\2\1\33\1\31\1\67\1\21\1\30"+
+        "\2\uffff\1\54\1\47\1\34\1\1\1\4\1\7\1\64\1\63\1\66\1\43\1\35\1\46"+
+        "\1\27\1\57\1\25\1\26\1\11\1\56\1\22\1\60\1\14\1\13\1\6\1\55\1\65"+
+        "\1\5\1\20\1\32\1\72\1\36\1\73\1\12\1\45\1\3\1\44\1\51\1\52\1\74"+
+        "\1\41\1\71\1\0\1\10\1\23\1\61\1\15\1\16\1\24\1\62\1\75\1\17\1\53"+
+        "\1\42\1\50\45\uffff}>";
     static final String[] DFA57_transitionS = {
-            "\2\3\1\uffff\1\2\1\uffff\1\3\1\uffff\1\3\22\uffff\4\3\1\uffff"+
-            "\4\3\17\uffff\1\1\1\uffff\1\3\12\uffff\1\3",
+            "\2\3\1\uffff\1\2\2\3\1\uffff\1\3\22\uffff\4\3\1\uffff\4\3\1"+
+            "\uffff\1\3\15\uffff\1\1\1\uffff\1\3\12\uffff\1\3",
             "",
-            "\4\14\1\12\2\14\1\6\1\14\1\15\24\14\1\4\1\14\1\5\2\14\1\7\1"+
-            "\10\1\11\1\13\46\14",
+            "\4\14\1\13\2\14\1\6\1\14\1\15\24\14\1\5\1\14\1\4\2\14\1\7\1"+
+            "\10\1\11\1\12\46\14",
             "",
-            "\4\14\1\22\2\14\1\16\1\14\1\15\31\14\1\17\1\20\1\21\1\23\46"+
+            "\4\14\1\23\2\14\1\17\1\14\1\15\31\14\1\16\1\20\1\21\1\22\46"+
             "\14",
-            "\4\14\1\27\2\14\1\31\1\14\1\15\31\14\1\24\1\25\1\26\1\30\46"+
+            "\4\14\1\31\2\14\1\25\1\14\1\15\31\14\1\24\1\26\1\27\1\30\46"+
             "\14",
             "\1\uffff",
-            "\4\14\1\33\2\14\1\32\1\14\1\15\103\14",
+            "\4\14\1\32\2\14\1\33\1\14\1\15\103\14",
             "\4\14\1\35\2\14\1\34\1\14\1\15\103\14",
             "\7\14\1\36\1\14\1\15\103\14",
-            "\5\14\1\40\1\14\1\42\1\14\1\15\54\14\1\41\15\14\1\37\10\14",
-            "\7\14\1\43\1\14\1\15\103\14",
+            "\7\14\1\37\1\14\1\15\103\14",
+            "\5\14\1\41\1\14\1\42\1\14\1\15\54\14\1\43\15\14\1\40\10\14",
             "",
             "",
+            "\4\14\1\44\2\14\1\45\1\14\1\15\103\14",
             "\1\uffff",
-            "\4\14\1\45\2\14\1\44\1\14\1\15\103\14",
             "\4\14\1\47\2\14\1\46\1\14\1\15\103\14",
             "\7\14\1\50\1\14\1\15\103\14",
-            "\5\14\1\52\1\14\1\54\1\14\1\15\54\14\1\53\15\14\1\51\10\14",
-            "\7\14\1\55\1\14\1\15\103\14",
-            "\4\14\1\57\2\14\1\56\1\14\1\15\103\14",
-            "\4\14\1\61\2\14\1\60\1\14\1\15\103\14",
+            "\7\14\1\51\1\14\1\15\103\14",
+            "\5\14\1\53\1\14\1\54\1\14\1\15\54\14\1\55\15\14\1\52\10\14",
+            "\4\14\1\56\2\14\1\57\1\14\1\15\103\14",
+            "\1\uffff",
+            "\4\14\1\60\2\14\1\61\1\14\1\15\103\14",
             "\7\14\1\62\1\14\1\15\103\14",
-            "\5\14\1\64\1\14\1\66\1\14\1\15\54\14\1\65\15\14\1\63\10\14",
-            "\7\14\1\67\1\14\1\15\103\14",
+            "\7\14\1\63\1\14\1\15\103\14",
+            "\5\14\1\65\1\14\1\66\1\14\1\15\54\14\1\67\15\14\1\64\10\14",
+            "\5\14\1\71\1\14\1\72\1\14\1\15\54\14\1\73\15\14\1\70\10\14",
             "\1\uffff",
             "\1\uffff",
-            "\5\14\1\71\1\14\1\73\1\14\1\15\54\14\1\72\15\14\1\70\10\14",
+            "\5\14\1\75\1\14\1\76\1\14\1\15\54\14\1\77\15\14\1\74\10\14",
             "\1\uffff",
-            "\5\14\1\75\1\14\1\77\1\14\1\15\54\14\1\76\15\14\1\74\10\14",
             "\1\uffff",
             "\4\14\1\100\2\14\1\101\1\14\1\15\103\14",
             "\5\102\1\14\1\102\1\103\1\14\1\15\5\102\3\14\1\102\1\14\1\102"+
             "\6\14\1\102\6\14\1\102\5\14\4\102\1\14\5\102\6\14\1\102\24\14",
+            "\1\uffff",
             "\7\14\1\103\1\14\1\15\55\14\1\104\25\14",
+            "\5\14\1\106\1\14\1\107\1\14\1\15\54\14\1\110\15\14\1\105\10"+
+            "\14",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
-            "\5\14\1\106\1\14\1\110\1\14\1\15\54\14\1\107\15\14\1\105\10"+
+            "\5\14\1\112\1\14\1\113\1\14\1\15\54\14\1\114\15\14\1\111\10"+
             "\14",
             "\1\uffff",
-            "\5\14\1\112\1\14\1\114\1\14\1\15\54\14\1\113\15\14\1\111\10"+
-            "\14",
             "\1\uffff",
             "\4\14\1\115\2\14\1\116\1\14\1\15\103\14",
             "\5\117\1\14\1\117\1\103\1\14\1\15\5\117\3\14\1\117\1\14\1\117"+
             "\6\14\1\117\6\14\1\117\5\14\4\117\1\14\5\117\6\14\1\117\24\14",
+            "\1\uffff",
             "\7\14\1\103\1\14\1\15\55\14\1\120\25\14",
+            "\5\14\1\122\1\14\1\123\1\14\1\15\54\14\1\124\15\14\1\121\10"+
+            "\14",
             "\1\uffff",
+            "\5\14\1\126\1\14\1\127\1\14\1\15\54\14\1\130\15\14\1\125\10"+
+            "\14",
             "\1\uffff",
             "\1\uffff",
-            "\5\14\1\122\1\14\1\124\1\14\1\15\54\14\1\123\15\14\1\121\10"+
-            "\14",
             "\1\uffff",
-            "\5\14\1\126\1\14\1\130\1\14\1\15\54\14\1\127\15\14\1\125\10"+
-            "\14",
-            "\1\uffff",
             "\4\14\1\131\2\14\1\132\1\14\1\15\103\14",
             "\5\133\1\14\1\133\1\103\1\14\1\15\5\133\3\14\1\133\1\14\1\133"+
             "\6\14\1\133\6\14\1\133\5\14\4\133\1\14\5\133\6\14\1\133\24\14",
+            "\1\uffff",
             "\7\14\1\103\1\14\1\15\55\14\1\134\25\14",
-            "\1\uffff",
-            "\1\uffff",
             "\4\14\1\135\2\14\1\136\1\14\1\15\103\14",
             "\5\137\1\14\1\137\1\103\1\14\1\15\5\137\3\14\1\137\1\14\1\137"+
             "\6\14\1\137\6\14\1\137\5\14\4\137\1\14\5\137\6\14\1\137\24\14",
+            "\1\uffff",
             "\7\14\1\103\1\14\1\15\55\14\1\140\25\14",
-            "\1\uffff",
             "\4\14\1\141\2\14\1\142\1\14\1\15\103\14",
             "\5\143\1\14\1\143\1\103\1\14\1\15\5\143\3\14\1\143\1\14\1\143"+
             "\6\14\1\143\6\14\1\143\5\14\4\143\1\14\5\143\6\14\1\143\24\14",
+            "\1\uffff",
             "\7\14\1\103\1\14\1\15\55\14\1\144\25\14",
-            "\1\uffff",
             "\5\14\1\145\1\14\1\147\1\14\1\15\54\14\1\146\26\14",
             "\1\uffff",
-            "\5\14\1\40\1\14\1\42\1\14\1\15\54\14\1\41\26\14",
+            "\5\14\1\41\1\14\1\42\1\14\1\15\54\14\1\43\26\14",
             "",
             "\1\uffff",
             "\1\uffff",
@@ -7360,660 +7562,666 @@
             this.transition = DFA57_transition;
         }
         public String getDescription() {
-            return "1058:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )?";
+            return "1069:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk | ( LEFT_PAREN )=>paarg= paren_chunk )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA57_35 = input.LA(1);
+                        int LA57_54 = input.LA(1);
 
                          
-                        int index57_35 = input.index();
+                        int index57_54 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 67;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_35);
+                        input.seek(index57_54);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA57_25 = input.LA(1);
+                        int LA57_17 = input.LA(1);
 
                          
-                        int index57_25 = input.index();
+                        int index57_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 13;}
+                        if ( (LA57_17==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( ((LA57_17>=ATTRIBUTES && LA57_17<=GLOBAL)||LA57_17==COMMA||(LA57_17>=QUERY && LA57_17<=80)) && (synpred7())) {s = 12;}
 
+                        else if ( (LA57_17==LEFT_PAREN) ) {s = 40;}
+
                          
-                        input.seek(index57_25);
+                        input.seek(index57_17);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA57_45 = input.LA(1);
+                        int LA57_6 = input.LA(1);
 
                          
-                        int index57_45 = input.index();
+                        int index57_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 13;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_45);
+                        input.seek(index57_6);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA57_40 = input.LA(1);
+                        int LA57_47 = input.LA(1);
 
                          
-                        int index57_40 = input.index();
+                        int index57_47 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 67;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_40);
+                        input.seek(index57_47);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA57_48 = input.LA(1);
+                        int LA57_18 = input.LA(1);
 
                          
-                        int index57_48 = input.index();
+                        int index57_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (LA57_18==LEFT_PAREN) ) {s = 41;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_18==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
+                        else if ( ((LA57_18>=ATTRIBUTES && LA57_18<=GLOBAL)||LA57_18==COMMA||(LA57_18>=QUERY && LA57_18<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_48);
+                        input.seek(index57_18);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA57_4 = input.LA(1);
+                        int LA57_39 = input.LA(1);
 
                          
-                        int index57_4 = input.index();
+                        int index57_39 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_4==LEFT_PAREN) ) {s = 14;}
+                        if ( (LA57_39==72) ) {s = 73;}
 
-                        else if ( (LA57_4==EXISTS) ) {s = 15;}
+                        else if ( (LA57_39==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_4==NOT) ) {s = 16;}
+                        else if ( (LA57_39==DOT) ) {s = 74;}
 
-                        else if ( (LA57_4==EVAL) ) {s = 17;}
+                        else if ( (LA57_39==LEFT_PAREN) ) {s = 75;}
 
-                        else if ( (LA57_4==ID) ) {s = 18;}
+                        else if ( (LA57_39==LEFT_SQUARE) ) {s = 76;}
 
-                        else if ( (LA57_4==FORALL) ) {s = 19;}
+                        else if ( ((LA57_39>=ATTRIBUTES && LA57_39<=ID)||LA57_39==GLOBAL||LA57_39==COMMA||(LA57_39>=QUERY && LA57_39<=RIGHT_CURLY)||(LA57_39>=RIGHT_SQUARE && LA57_39<=71)||(LA57_39>=73 && LA57_39<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_4==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_4>=ATTRIBUTES && LA57_4<=FUNCTION)||(LA57_4>=DOT && LA57_4<=GLOBAL)||LA57_4==COMMA||(LA57_4>=QUERY && LA57_4<=FROM)||(LA57_4>=ACCUMULATE && LA57_4<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_4);
+                        input.seek(index57_39);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA57_44 = input.LA(1);
+                        int LA57_36 = input.LA(1);
 
                          
-                        int index57_44 = input.index();
+                        int index57_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (LA57_36==72) ) {s = 69;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_36==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
+                        else if ( (LA57_36==DOT) ) {s = 70;}
+
+                        else if ( (LA57_36==LEFT_PAREN) ) {s = 71;}
+
+                        else if ( (LA57_36==LEFT_SQUARE) ) {s = 72;}
+
+                        else if ( ((LA57_36>=ATTRIBUTES && LA57_36<=ID)||LA57_36==GLOBAL||LA57_36==COMMA||(LA57_36>=QUERY && LA57_36<=RIGHT_CURLY)||(LA57_36>=RIGHT_SQUARE && LA57_36<=71)||(LA57_36>=73 && LA57_36<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_44);
+                        input.seek(index57_36);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA57_33 = input.LA(1);
+                        int LA57_19 = input.LA(1);
 
                          
-                        int index57_33 = input.index();
+                        int index57_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_33==RIGHT_SQUARE) ) {s = 68;}
+                        if ( (LA57_19==72) ) {s = 42;}
 
-                        else if ( (LA57_33==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_19==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( ((LA57_33>=ATTRIBUTES && LA57_33<=GLOBAL)||LA57_33==COMMA||(LA57_33>=QUERY && LA57_33<=LEFT_SQUARE)||(LA57_33>=THEN && LA57_33<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_19==DOT) ) {s = 43;}
 
-                        else if ( (LA57_33==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( (LA57_19==LEFT_PAREN) ) {s = 44;}
 
+                        else if ( (LA57_19==LEFT_SQUARE) ) {s = 45;}
+
+                        else if ( ((LA57_19>=ATTRIBUTES && LA57_19<=ID)||LA57_19==GLOBAL||LA57_19==COMMA||(LA57_19>=QUERY && LA57_19<=RIGHT_CURLY)||(LA57_19>=RIGHT_SQUARE && LA57_19<=71)||(LA57_19>=73 && LA57_19<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_33);
+                        input.seek(index57_19);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA57_58 = input.LA(1);
+                        int LA57_55 = input.LA(1);
 
                          
-                        int index57_58 = input.index();
+                        int index57_55 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_58==RIGHT_SQUARE) ) {s = 96;}
+                        if ( (LA57_55==RIGHT_SQUARE) ) {s = 92;}
 
-                        else if ( (LA57_58==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_55==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( ((LA57_58>=ATTRIBUTES && LA57_58<=GLOBAL)||LA57_58==COMMA||(LA57_58>=QUERY && LA57_58<=LEFT_SQUARE)||(LA57_58>=THEN && LA57_58<=80)) && (synpred2())) {s = 12;}
+                        else if ( ((LA57_55>=ATTRIBUTES && LA57_55<=GLOBAL)||LA57_55==COMMA||(LA57_55>=QUERY && LA57_55<=LEFT_SQUARE)||(LA57_55>=THEN && LA57_55<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_58==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( (LA57_55==LEFT_PAREN) && (synpred7())) {s = 67;}
 
                          
-                        input.seek(index57_58);
+                        input.seek(index57_55);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA57_62 = input.LA(1);
+                        int LA57_30 = input.LA(1);
 
                          
-                        int index57_62 = input.index();
+                        int index57_30 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_62==RIGHT_SQUARE) ) {s = 100;}
+                        if ( (synpred7()) ) {s = 13;}
 
-                        else if ( (LA57_62==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( ((LA57_62>=ATTRIBUTES && LA57_62<=GLOBAL)||LA57_62==COMMA||(LA57_62>=QUERY && LA57_62<=LEFT_SQUARE)||(LA57_62>=THEN && LA57_62<=80)) && (synpred2())) {s = 12;}
-
-                        else if ( (LA57_62==LEFT_PAREN) && (synpred2())) {s = 67;}
-
                          
-                        input.seek(index57_62);
+                        input.seek(index57_30);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA57_32 = input.LA(1);
+                        int LA57_45 = input.LA(1);
 
                          
-                        int index57_32 = input.index();
+                        int index57_45 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA57_32>=ATTRIBUTES && LA57_32<=ID)||LA57_32==GLOBAL||(LA57_32>=QUERY && LA57_32<=WHEN)||LA57_32==ENABLED||LA57_32==SALIENCE||LA57_32==DURATION||LA57_32==FROM||(LA57_32>=INIT && LA57_32<=RESULT)||(LA57_32>=CONTAINS && LA57_32<=IN)||LA57_32==THEN) ) {s = 66;}
+                        if ( (LA57_45==RIGHT_SQUARE) ) {s = 80;}
 
-                        else if ( (LA57_32==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_45==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_32==DOT||LA57_32==COMMA||(LA57_32>=DATE_EFFECTIVE && LA57_32<=DATE_EXPIRES)||LA57_32==BOOL||(LA57_32>=INT && LA57_32<=AGENDA_GROUP)||(LA57_32>=DIALECT && LA57_32<=DOUBLE_AMPER)||(LA57_32>=EXISTS && LA57_32<=ACCUMULATE)||LA57_32==COLLECT||(LA57_32>=FLOAT && LA57_32<=RIGHT_SQUARE)||(LA57_32>=EOL && LA57_32<=80)) && (synpred2())) {s = 12;}
+                        else if ( ((LA57_45>=ATTRIBUTES && LA57_45<=GLOBAL)||LA57_45==COMMA||(LA57_45>=QUERY && LA57_45<=LEFT_SQUARE)||(LA57_45>=THEN && LA57_45<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_32==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( (LA57_45==LEFT_PAREN) && (synpred7())) {s = 67;}
 
                          
-                        input.seek(index57_32);
+                        input.seek(index57_45);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA57_57 = input.LA(1);
+                        int LA57_35 = input.LA(1);
 
                          
-                        int index57_57 = input.index();
+                        int index57_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA57_57>=ATTRIBUTES && LA57_57<=ID)||LA57_57==GLOBAL||(LA57_57>=QUERY && LA57_57<=WHEN)||LA57_57==ENABLED||LA57_57==SALIENCE||LA57_57==DURATION||LA57_57==FROM||(LA57_57>=INIT && LA57_57<=RESULT)||(LA57_57>=CONTAINS && LA57_57<=IN)||LA57_57==THEN) ) {s = 95;}
+                        if ( (LA57_35==RIGHT_SQUARE) ) {s = 68;}
 
-                        else if ( (LA57_57==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_35==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_57==DOT||LA57_57==COMMA||(LA57_57>=DATE_EFFECTIVE && LA57_57<=DATE_EXPIRES)||LA57_57==BOOL||(LA57_57>=INT && LA57_57<=AGENDA_GROUP)||(LA57_57>=DIALECT && LA57_57<=DOUBLE_AMPER)||(LA57_57>=EXISTS && LA57_57<=ACCUMULATE)||LA57_57==COLLECT||(LA57_57>=FLOAT && LA57_57<=RIGHT_SQUARE)||(LA57_57>=EOL && LA57_57<=80)) && (synpred2())) {s = 12;}
+                        else if ( ((LA57_35>=ATTRIBUTES && LA57_35<=GLOBAL)||LA57_35==COMMA||(LA57_35>=QUERY && LA57_35<=LEFT_SQUARE)||(LA57_35>=THEN && LA57_35<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_57==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( (LA57_35==LEFT_PAREN) && (synpred7())) {s = 67;}
 
                          
-                        input.seek(index57_57);
+                        input.seek(index57_35);
                         if ( s>=0 ) return s;
                         break;
                     case 12 : 
-                        int LA57_61 = input.LA(1);
+                        int LA57_34 = input.LA(1);
 
                          
-                        int index57_61 = input.index();
+                        int index57_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA57_61>=ATTRIBUTES && LA57_61<=ID)||LA57_61==GLOBAL||(LA57_61>=QUERY && LA57_61<=WHEN)||LA57_61==ENABLED||LA57_61==SALIENCE||LA57_61==DURATION||LA57_61==FROM||(LA57_61>=INIT && LA57_61<=RESULT)||(LA57_61>=CONTAINS && LA57_61<=IN)||LA57_61==THEN) ) {s = 99;}
+                        if ( (synpred7()) ) {s = 67;}
 
-                        else if ( (LA57_61==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_61==DOT||LA57_61==COMMA||(LA57_61>=DATE_EFFECTIVE && LA57_61<=DATE_EXPIRES)||LA57_61==BOOL||(LA57_61>=INT && LA57_61<=AGENDA_GROUP)||(LA57_61>=DIALECT && LA57_61<=DOUBLE_AMPER)||(LA57_61>=EXISTS && LA57_61<=ACCUMULATE)||LA57_61==COLLECT||(LA57_61>=FLOAT && LA57_61<=RIGHT_SQUARE)||(LA57_61>=EOL && LA57_61<=80)) && (synpred2())) {s = 12;}
-
-                        else if ( (LA57_61==LEFT_PAREN) && (synpred2())) {s = 67;}
-
                          
-                        input.seek(index57_61);
+                        input.seek(index57_34);
                         if ( s>=0 ) return s;
                         break;
                     case 13 : 
-                        int LA57_39 = input.LA(1);
+                        int LA57_58 = input.LA(1);
 
                          
-                        int index57_39 = input.index();
+                        int index57_58 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_39==72) ) {s = 73;}
+                        if ( (synpred7()) ) {s = 67;}
 
-                        else if ( (LA57_39==DOT) ) {s = 74;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_39==LEFT_SQUARE) ) {s = 75;}
-
-                        else if ( (LA57_39==LEFT_PAREN) ) {s = 76;}
-
-                        else if ( (LA57_39==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_39>=ATTRIBUTES && LA57_39<=ID)||LA57_39==GLOBAL||LA57_39==COMMA||(LA57_39>=QUERY && LA57_39<=RIGHT_CURLY)||(LA57_39>=RIGHT_SQUARE && LA57_39<=71)||(LA57_39>=73 && LA57_39<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_39);
+                        input.seek(index57_58);
                         if ( s>=0 ) return s;
                         break;
                     case 14 : 
-                        int LA57_37 = input.LA(1);
+                        int LA57_59 = input.LA(1);
 
                          
-                        int index57_37 = input.index();
+                        int index57_59 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_37==72) ) {s = 69;}
+                        if ( (LA57_59==RIGHT_SQUARE) ) {s = 96;}
 
-                        else if ( (LA57_37==DOT) ) {s = 70;}
+                        else if ( (LA57_59==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_37==LEFT_SQUARE) ) {s = 71;}
+                        else if ( ((LA57_59>=ATTRIBUTES && LA57_59<=GLOBAL)||LA57_59==COMMA||(LA57_59>=QUERY && LA57_59<=LEFT_SQUARE)||(LA57_59>=THEN && LA57_59<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_37==LEFT_PAREN) ) {s = 72;}
+                        else if ( (LA57_59==LEFT_PAREN) && (synpred7())) {s = 67;}
 
-                        else if ( (LA57_37==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_37>=ATTRIBUTES && LA57_37<=ID)||LA57_37==GLOBAL||LA57_37==COMMA||(LA57_37>=QUERY && LA57_37<=RIGHT_CURLY)||(LA57_37>=RIGHT_SQUARE && LA57_37<=71)||(LA57_37>=73 && LA57_37<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_37);
+                        input.seek(index57_59);
                         if ( s>=0 ) return s;
                         break;
                     case 15 : 
-                        int LA57_18 = input.LA(1);
+                        int LA57_63 = input.LA(1);
 
                          
-                        int index57_18 = input.index();
+                        int index57_63 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_18==72) ) {s = 41;}
+                        if ( (LA57_63==RIGHT_SQUARE) ) {s = 100;}
 
-                        else if ( (LA57_18==DOT) ) {s = 42;}
+                        else if ( (LA57_63==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_18==LEFT_SQUARE) ) {s = 43;}
+                        else if ( ((LA57_63>=ATTRIBUTES && LA57_63<=GLOBAL)||LA57_63==COMMA||(LA57_63>=QUERY && LA57_63<=LEFT_SQUARE)||(LA57_63>=THEN && LA57_63<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_18==LEFT_PAREN) ) {s = 44;}
+                        else if ( (LA57_63==LEFT_PAREN) && (synpred7())) {s = 67;}
 
-                        else if ( (LA57_18==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_18>=ATTRIBUTES && LA57_18<=ID)||LA57_18==GLOBAL||LA57_18==COMMA||(LA57_18>=QUERY && LA57_18<=RIGHT_CURLY)||(LA57_18>=RIGHT_SQUARE && LA57_18<=71)||(LA57_18>=73 && LA57_18<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_18);
+                        input.seek(index57_63);
                         if ( s>=0 ) return s;
                         break;
                     case 16 : 
-                        int LA57_30 = input.LA(1);
+                        int LA57_40 = input.LA(1);
 
                          
-                        int index57_30 = input.index();
+                        int index57_40 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 13;}
+                        if ( (synpred7()) ) {s = 67;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_30);
+                        input.seek(index57_40);
                         if ( s>=0 ) return s;
                         break;
                     case 17 : 
-                        int LA57_7 = input.LA(1);
+                        int LA57_10 = input.LA(1);
 
                          
-                        int index57_7 = input.index();
+                        int index57_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_7==LEFT_PAREN) ) {s = 26;}
+                        if ( (LA57_10==LEFT_PAREN) ) {s = 31;}
 
-                        else if ( (LA57_7==ID) ) {s = 27;}
+                        else if ( (LA57_10==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_7==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( ((LA57_10>=ATTRIBUTES && LA57_10<=GLOBAL)||LA57_10==COMMA||(LA57_10>=QUERY && LA57_10<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( ((LA57_7>=ATTRIBUTES && LA57_7<=FUNCTION)||(LA57_7>=DOT && LA57_7<=GLOBAL)||LA57_7==COMMA||(LA57_7>=QUERY && LA57_7<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_7);
+                        input.seek(index57_10);
                         if ( s>=0 ) return s;
                         break;
                     case 18 : 
-                        int LA57_43 = input.LA(1);
+                        int LA57_32 = input.LA(1);
 
                          
-                        int index57_43 = input.index();
+                        int index57_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_43==RIGHT_SQUARE) ) {s = 80;}
+                        if ( (LA57_32==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_43==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_32==ID) ) {s = 64;}
 
-                        else if ( ((LA57_43>=ATTRIBUTES && LA57_43<=GLOBAL)||LA57_43==COMMA||(LA57_43>=QUERY && LA57_43<=LEFT_SQUARE)||(LA57_43>=THEN && LA57_43<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_32==LEFT_PAREN) ) {s = 65;}
 
-                        else if ( (LA57_43==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( ((LA57_32>=ATTRIBUTES && LA57_32<=FUNCTION)||(LA57_32>=DOT && LA57_32<=GLOBAL)||LA57_32==COMMA||(LA57_32>=QUERY && LA57_32<=80)) && (synpred7())) {s = 12;}
 
                          
-                        input.seek(index57_43);
+                        input.seek(index57_32);
                         if ( s>=0 ) return s;
                         break;
                     case 19 : 
-                        int LA57_51 = input.LA(1);
+                        int LA57_56 = input.LA(1);
 
                          
-                        int index57_51 = input.index();
+                        int index57_56 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_51==ID) ) {s = 89;}
+                        if ( (LA57_56==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_51==LEFT_PAREN) ) {s = 90;}
+                        else if ( (LA57_56==ID) ) {s = 93;}
 
-                        else if ( (LA57_51==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_56==LEFT_PAREN) ) {s = 94;}
 
-                        else if ( ((LA57_51>=ATTRIBUTES && LA57_51<=FUNCTION)||(LA57_51>=DOT && LA57_51<=GLOBAL)||LA57_51==COMMA||(LA57_51>=QUERY && LA57_51<=80)) && (synpred2())) {s = 12;}
+                        else if ( ((LA57_56>=ATTRIBUTES && LA57_56<=FUNCTION)||(LA57_56>=DOT && LA57_56<=GLOBAL)||LA57_56==COMMA||(LA57_56>=QUERY && LA57_56<=80)) && (synpred7())) {s = 12;}
 
                          
-                        input.seek(index57_51);
+                        input.seek(index57_56);
                         if ( s>=0 ) return s;
                         break;
                     case 20 : 
-                        int LA57_26 = input.LA(1);
+                        int LA57_60 = input.LA(1);
 
                          
-                        int index57_26 = input.index();
+                        int index57_60 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 13;}
+                        if ( (LA57_60==ID) ) {s = 97;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_60==LEFT_PAREN) ) {s = 98;}
 
+                        else if ( (LA57_60==RIGHT_PAREN) && (synpred7())) {s = 13;}
+
+                        else if ( ((LA57_60>=ATTRIBUTES && LA57_60<=FUNCTION)||(LA57_60>=DOT && LA57_60<=GLOBAL)||LA57_60==COMMA||(LA57_60>=QUERY && LA57_60<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_26);
+                        input.seek(index57_60);
                         if ( s>=0 ) return s;
                         break;
                     case 21 : 
-                        int LA57_36 = input.LA(1);
+                        int LA57_28 = input.LA(1);
 
                          
-                        int index57_36 = input.index();
+                        int index57_28 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 13;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_36);
+                        input.seek(index57_28);
                         if ( s>=0 ) return s;
                         break;
                     case 22 : 
-                        int LA57_21 = input.LA(1);
+                        int LA57_29 = input.LA(1);
 
                          
-                        int index57_21 = input.index();
+                        int index57_29 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_21==LEFT_PAREN) ) {s = 48;}
+                        if ( (LA57_29==72) ) {s = 60;}
 
-                        else if ( (LA57_21==ID) ) {s = 49;}
+                        else if ( (LA57_29==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_21==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_29==DOT) ) {s = 61;}
 
-                        else if ( ((LA57_21>=ATTRIBUTES && LA57_21<=FUNCTION)||(LA57_21>=DOT && LA57_21<=GLOBAL)||LA57_21==COMMA||(LA57_21>=QUERY && LA57_21<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_29==LEFT_PAREN) ) {s = 62;}
 
+                        else if ( (LA57_29==LEFT_SQUARE) ) {s = 63;}
+
+                        else if ( ((LA57_29>=ATTRIBUTES && LA57_29<=ID)||LA57_29==GLOBAL||LA57_29==COMMA||(LA57_29>=QUERY && LA57_29<=RIGHT_CURLY)||(LA57_29>=RIGHT_SQUARE && LA57_29<=71)||(LA57_29>=73 && LA57_29<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_21);
+                        input.seek(index57_29);
                         if ( s>=0 ) return s;
                         break;
                     case 23 : 
-                        int LA57_0 = input.LA(1);
+                        int LA57_26 = input.LA(1);
 
                          
-                        int index57_0 = input.index();
+                        int index57_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_0==LEFT_SQUARE) && (synpred1())) {s = 1;}
+                        if ( (LA57_26==72) ) {s = 56;}
 
-                        else if ( (LA57_0==LEFT_PAREN) ) {s = 2;}
+                        else if ( (LA57_26==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( ((LA57_0>=ID && LA57_0<=DOT)||LA57_0==RIGHT_PAREN||LA57_0==END||(LA57_0>=OR && LA57_0<=DOUBLE_AMPER)||(LA57_0>=EXISTS && LA57_0<=FORALL)||LA57_0==THEN||LA57_0==71) ) {s = 3;}
+                        else if ( (LA57_26==DOT) ) {s = 57;}
 
+                        else if ( (LA57_26==LEFT_PAREN) ) {s = 58;}
+
+                        else if ( (LA57_26==LEFT_SQUARE) ) {s = 59;}
+
+                        else if ( ((LA57_26>=ATTRIBUTES && LA57_26<=ID)||LA57_26==GLOBAL||LA57_26==COMMA||(LA57_26>=QUERY && LA57_26<=RIGHT_CURLY)||(LA57_26>=RIGHT_SQUARE && LA57_26<=71)||(LA57_26>=73 && LA57_26<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_0);
+                        input.seek(index57_26);
                         if ( s>=0 ) return s;
                         break;
                     case 24 : 
-                        int LA57_64 = input.LA(1);
+                        int LA57_11 = input.LA(1);
 
                          
-                        int index57_64 = input.index();
+                        int index57_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_64==DOT) ) {s = 101;}
+                        if ( (LA57_11==72) ) {s = 32;}
 
-                        else if ( (LA57_64==LEFT_SQUARE) ) {s = 102;}
+                        else if ( (LA57_11==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_64==LEFT_PAREN) ) {s = 103;}
+                        else if ( (LA57_11==DOT) ) {s = 33;}
 
-                        else if ( (LA57_64==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_11==LEFT_PAREN) ) {s = 34;}
 
-                        else if ( ((LA57_64>=ATTRIBUTES && LA57_64<=ID)||LA57_64==GLOBAL||LA57_64==COMMA||(LA57_64>=QUERY && LA57_64<=RIGHT_CURLY)||(LA57_64>=RIGHT_SQUARE && LA57_64<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_11==LEFT_SQUARE) ) {s = 35;}
 
+                        else if ( ((LA57_11>=ATTRIBUTES && LA57_11<=ID)||LA57_11==GLOBAL||LA57_11==COMMA||(LA57_11>=QUERY && LA57_11<=RIGHT_CURLY)||(LA57_11>=RIGHT_SQUARE && LA57_11<=71)||(LA57_11>=73 && LA57_11<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_64);
+                        input.seek(index57_11);
                         if ( s>=0 ) return s;
                         break;
                     case 25 : 
-                        int LA57_24 = input.LA(1);
+                        int LA57_8 = input.LA(1);
 
                          
-                        int index57_24 = input.index();
+                        int index57_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_24==LEFT_PAREN) ) {s = 55;}
+                        if ( (LA57_8==LEFT_PAREN) ) {s = 28;}
 
-                        else if ( (LA57_24==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_8==ID) ) {s = 29;}
 
-                        else if ( ((LA57_24>=ATTRIBUTES && LA57_24<=GLOBAL)||LA57_24==COMMA||(LA57_24>=QUERY && LA57_24<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_8==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
+                        else if ( ((LA57_8>=ATTRIBUTES && LA57_8<=FUNCTION)||(LA57_8>=DOT && LA57_8<=GLOBAL)||LA57_8==COMMA||(LA57_8>=QUERY && LA57_8<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_24);
+                        input.seek(index57_8);
                         if ( s>=0 ) return s;
                         break;
                     case 26 : 
-                        int LA57_65 = input.LA(1);
+                        int LA57_41 = input.LA(1);
 
                          
-                        int index57_65 = input.index();
+                        int index57_41 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 67;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_65);
+                        input.seek(index57_41);
                         if ( s>=0 ) return s;
                         break;
                     case 27 : 
-                        int LA57_19 = input.LA(1);
+                        int LA57_7 = input.LA(1);
 
                          
-                        int index57_19 = input.index();
+                        int index57_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_19==LEFT_PAREN) ) {s = 45;}
+                        if ( (LA57_7==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_19==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_7==ID) ) {s = 26;}
 
-                        else if ( ((LA57_19>=ATTRIBUTES && LA57_19<=GLOBAL)||LA57_19==COMMA||(LA57_19>=QUERY && LA57_19<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_7==LEFT_PAREN) ) {s = 27;}
 
+                        else if ( ((LA57_7>=ATTRIBUTES && LA57_7<=FUNCTION)||(LA57_7>=DOT && LA57_7<=GLOBAL)||LA57_7==COMMA||(LA57_7>=QUERY && LA57_7<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_19);
+                        input.seek(index57_7);
                         if ( s>=0 ) return s;
                         break;
                     case 28 : 
-                        int LA57_17 = input.LA(1);
+                        int LA57_16 = input.LA(1);
 
                          
-                        int index57_17 = input.index();
+                        int index57_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_17==LEFT_PAREN) ) {s = 40;}
+                        if ( (LA57_16==LEFT_PAREN) ) {s = 38;}
 
-                        else if ( (LA57_17==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_16==ID) ) {s = 39;}
 
-                        else if ( ((LA57_17>=ATTRIBUTES && LA57_17<=GLOBAL)||LA57_17==COMMA||(LA57_17>=QUERY && LA57_17<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_16==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
+                        else if ( ((LA57_16>=ATTRIBUTES && LA57_16<=FUNCTION)||(LA57_16>=DOT && LA57_16<=GLOBAL)||LA57_16==COMMA||(LA57_16>=QUERY && LA57_16<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_17);
+                        input.seek(index57_16);
                         if ( s>=0 ) return s;
                         break;
                     case 29 : 
-                        int LA57_2 = input.LA(1);
+                        int LA57_24 = input.LA(1);
 
                          
-                        int index57_2 = input.index();
+                        int index57_24 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_2==OR) ) {s = 4;}
+                        if ( (LA57_24==LEFT_PAREN) ) {s = 51;}
 
-                        else if ( (LA57_2==AND) ) {s = 5;}
+                        else if ( (LA57_24==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( ((LA57_24>=ATTRIBUTES && LA57_24<=GLOBAL)||LA57_24==COMMA||(LA57_24>=QUERY && LA57_24<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_2==EXISTS) ) {s = 7;}
-
-                        else if ( (LA57_2==NOT) ) {s = 8;}
-
-                        else if ( (LA57_2==EVAL) ) {s = 9;}
-
-                        else if ( (LA57_2==ID) ) {s = 10;}
-
-                        else if ( (LA57_2==FORALL) ) {s = 11;}
-
-                        else if ( ((LA57_2>=ATTRIBUTES && LA57_2<=FUNCTION)||(LA57_2>=DOT && LA57_2<=GLOBAL)||LA57_2==COMMA||(LA57_2>=QUERY && LA57_2<=LOCK_ON_ACTIVE)||LA57_2==DOUBLE_PIPE||(LA57_2>=DOUBLE_AMPER && LA57_2<=FROM)||(LA57_2>=ACCUMULATE && LA57_2<=80)) && (synpred2())) {s = 12;}
-
-                        else if ( (LA57_2==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
                          
-                        input.seek(index57_2);
+                        input.seek(index57_24);
                         if ( s>=0 ) return s;
                         break;
                     case 30 : 
-                        int LA57_15 = input.LA(1);
+                        int LA57_43 = input.LA(1);
 
                          
-                        int index57_15 = input.index();
+                        int index57_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_15==LEFT_PAREN) ) {s = 36;}
+                        if ( (LA57_43==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_15==ID) ) {s = 37;}
+                        else if ( ((LA57_43>=ATTRIBUTES && LA57_43<=ID)||LA57_43==GLOBAL||(LA57_43>=QUERY && LA57_43<=WHEN)||LA57_43==ENABLED||LA57_43==SALIENCE||LA57_43==DURATION||LA57_43==FROM||(LA57_43>=INIT && LA57_43<=RESULT)||(LA57_43>=CONTAINS && LA57_43<=IN)||LA57_43==THEN) ) {s = 79;}
 
-                        else if ( (LA57_15==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_43==LEFT_PAREN) && (synpred7())) {s = 67;}
 
-                        else if ( ((LA57_15>=ATTRIBUTES && LA57_15<=FUNCTION)||(LA57_15>=DOT && LA57_15<=GLOBAL)||LA57_15==COMMA||(LA57_15>=QUERY && LA57_15<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_43==DOT||LA57_43==COMMA||(LA57_43>=DATE_EFFECTIVE && LA57_43<=DATE_EXPIRES)||LA57_43==BOOL||(LA57_43>=INT && LA57_43<=AGENDA_GROUP)||(LA57_43>=DIALECT && LA57_43<=DOUBLE_AMPER)||(LA57_43>=EXISTS && LA57_43<=ACCUMULATE)||LA57_43==COLLECT||(LA57_43>=FLOAT && LA57_43<=RIGHT_SQUARE)||(LA57_43>=EOL && LA57_43<=80)) && (synpred7())) {s = 12;}
 
                          
-                        input.seek(index57_15);
+                        input.seek(index57_43);
                         if ( s>=0 ) return s;
                         break;
                     case 31 : 
-                        int LA57_53 = input.LA(1);
+                        int LA57_5 = input.LA(1);
 
                          
-                        int index57_53 = input.index();
+                        int index57_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_53==RIGHT_SQUARE) ) {s = 92;}
+                        if ( (LA57_5==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_53==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_5==EXISTS) ) {s = 20;}
 
-                        else if ( ((LA57_53>=ATTRIBUTES && LA57_53<=GLOBAL)||LA57_53==COMMA||(LA57_53>=QUERY && LA57_53<=LEFT_SQUARE)||(LA57_53>=THEN && LA57_53<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_5==LEFT_PAREN) ) {s = 21;}
 
-                        else if ( (LA57_53==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( (LA57_5==NOT) ) {s = 22;}
 
+                        else if ( (LA57_5==EVAL) ) {s = 23;}
+
+                        else if ( (LA57_5==FORALL) ) {s = 24;}
+
+                        else if ( (LA57_5==ID) ) {s = 25;}
+
+                        else if ( ((LA57_5>=ATTRIBUTES && LA57_5<=FUNCTION)||(LA57_5>=DOT && LA57_5<=GLOBAL)||LA57_5==COMMA||(LA57_5>=QUERY && LA57_5<=FROM)||(LA57_5>=ACCUMULATE && LA57_5<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_53);
+                        input.seek(index57_5);
                         if ( s>=0 ) return s;
                         break;
                     case 32 : 
-                        int LA57_42 = input.LA(1);
+                        int LA57_4 = input.LA(1);
 
                          
-                        int index57_42 = input.index();
+                        int index57_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA57_42>=ATTRIBUTES && LA57_42<=ID)||LA57_42==GLOBAL||(LA57_42>=QUERY && LA57_42<=WHEN)||LA57_42==ENABLED||LA57_42==SALIENCE||LA57_42==DURATION||LA57_42==FROM||(LA57_42>=INIT && LA57_42<=RESULT)||(LA57_42>=CONTAINS && LA57_42<=IN)||LA57_42==THEN) ) {s = 79;}
+                        if ( (LA57_4==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_42==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_4==EXISTS) ) {s = 14;}
 
-                        else if ( (LA57_42==DOT||LA57_42==COMMA||(LA57_42>=DATE_EFFECTIVE && LA57_42<=DATE_EXPIRES)||LA57_42==BOOL||(LA57_42>=INT && LA57_42<=AGENDA_GROUP)||(LA57_42>=DIALECT && LA57_42<=DOUBLE_AMPER)||(LA57_42>=EXISTS && LA57_42<=ACCUMULATE)||LA57_42==COLLECT||(LA57_42>=FLOAT && LA57_42<=RIGHT_SQUARE)||(LA57_42>=EOL && LA57_42<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_4==LEFT_PAREN) ) {s = 15;}
 
-                        else if ( (LA57_42==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( (LA57_4==NOT) ) {s = 16;}
 
+                        else if ( (LA57_4==EVAL) ) {s = 17;}
+
+                        else if ( (LA57_4==FORALL) ) {s = 18;}
+
+                        else if ( (LA57_4==ID) ) {s = 19;}
+
+                        else if ( ((LA57_4>=ATTRIBUTES && LA57_4<=FUNCTION)||(LA57_4>=DOT && LA57_4<=GLOBAL)||LA57_4==COMMA||(LA57_4>=QUERY && LA57_4<=FROM)||(LA57_4>=ACCUMULATE && LA57_4<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_42);
+                        input.seek(index57_4);
                         if ( s>=0 ) return s;
                         break;
                     case 33 : 
-                        int LA57_6 = input.LA(1);
+                        int LA57_52 = input.LA(1);
 
                          
-                        int index57_6 = input.index();
+                        int index57_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 13;}
+                        if ( (LA57_52==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_52==ID) ) {s = 89;}
 
+                        else if ( (LA57_52==LEFT_PAREN) ) {s = 90;}
+
+                        else if ( ((LA57_52>=ATTRIBUTES && LA57_52<=FUNCTION)||(LA57_52>=DOT && LA57_52<=GLOBAL)||LA57_52==COMMA||(LA57_52>=QUERY && LA57_52<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_6);
+                        input.seek(index57_52);
                         if ( s>=0 ) return s;
                         break;
                     case 34 : 
-                        int LA57_47 = input.LA(1);
+                        int LA57_65 = input.LA(1);
 
                          
-                        int index57_47 = input.index();
+                        int index57_65 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_47==72) ) {s = 81;}
+                        if ( (synpred7()) ) {s = 67;}
 
-                        else if ( (LA57_47==DOT) ) {s = 82;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_47==LEFT_SQUARE) ) {s = 83;}
-
-                        else if ( (LA57_47==LEFT_PAREN) ) {s = 84;}
-
-                        else if ( (LA57_47==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_47>=ATTRIBUTES && LA57_47<=ID)||LA57_47==GLOBAL||LA57_47==COMMA||(LA57_47>=QUERY && LA57_47<=RIGHT_CURLY)||(LA57_47>=RIGHT_SQUARE && LA57_47<=71)||(LA57_47>=73 && LA57_47<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_47);
+                        input.seek(index57_65);
                         if ( s>=0 ) return s;
                         break;
                     case 35 : 
@@ -8023,337 +8231,325 @@
                         int index57_23 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_23==72) ) {s = 51;}
+                        if ( (LA57_23==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_23==DOT) ) {s = 52;}
+                        else if ( ((LA57_23>=ATTRIBUTES && LA57_23<=GLOBAL)||LA57_23==COMMA||(LA57_23>=QUERY && LA57_23<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_23==LEFT_SQUARE) ) {s = 53;}
+                        else if ( (LA57_23==LEFT_PAREN) ) {s = 50;}
 
-                        else if ( (LA57_23==LEFT_PAREN) ) {s = 54;}
-
-                        else if ( (LA57_23==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_23>=ATTRIBUTES && LA57_23<=ID)||LA57_23==GLOBAL||LA57_23==COMMA||(LA57_23>=QUERY && LA57_23<=RIGHT_CURLY)||(LA57_23>=RIGHT_SQUARE && LA57_23<=71)||(LA57_23>=73 && LA57_23<=80)) && (synpred2())) {s = 12;}
-
                          
                         input.seek(index57_23);
                         if ( s>=0 ) return s;
                         break;
                     case 36 : 
-                        int LA57_49 = input.LA(1);
+                        int LA57_48 = input.LA(1);
 
                          
-                        int index57_49 = input.index();
+                        int index57_48 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_49==72) ) {s = 85;}
+                        if ( (LA57_48==72) ) {s = 85;}
 
-                        else if ( (LA57_49==DOT) ) {s = 86;}
+                        else if ( (LA57_48==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_49==LEFT_SQUARE) ) {s = 87;}
+                        else if ( (LA57_48==DOT) ) {s = 86;}
 
-                        else if ( (LA57_49==LEFT_PAREN) ) {s = 88;}
+                        else if ( (LA57_48==LEFT_PAREN) ) {s = 87;}
 
-                        else if ( (LA57_49==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_48==LEFT_SQUARE) ) {s = 88;}
 
-                        else if ( ((LA57_49>=ATTRIBUTES && LA57_49<=ID)||LA57_49==GLOBAL||LA57_49==COMMA||(LA57_49>=QUERY && LA57_49<=RIGHT_CURLY)||(LA57_49>=RIGHT_SQUARE && LA57_49<=71)||(LA57_49>=73 && LA57_49<=80)) && (synpred2())) {s = 12;}
+                        else if ( ((LA57_48>=ATTRIBUTES && LA57_48<=ID)||LA57_48==GLOBAL||LA57_48==COMMA||(LA57_48>=QUERY && LA57_48<=RIGHT_CURLY)||(LA57_48>=RIGHT_SQUARE && LA57_48<=71)||(LA57_48>=73 && LA57_48<=80)) && (synpred7())) {s = 12;}
 
                          
-                        input.seek(index57_49);
+                        input.seek(index57_48);
                         if ( s>=0 ) return s;
                         break;
                     case 37 : 
-                        int LA57_28 = input.LA(1);
+                        int LA57_46 = input.LA(1);
 
                          
-                        int index57_28 = input.index();
+                        int index57_46 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 13;}
+                        if ( (LA57_46==72) ) {s = 81;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_46==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
+                        else if ( (LA57_46==DOT) ) {s = 82;}
+
+                        else if ( (LA57_46==LEFT_PAREN) ) {s = 83;}
+
+                        else if ( (LA57_46==LEFT_SQUARE) ) {s = 84;}
+
+                        else if ( ((LA57_46>=ATTRIBUTES && LA57_46<=ID)||LA57_46==GLOBAL||LA57_46==COMMA||(LA57_46>=QUERY && LA57_46<=RIGHT_CURLY)||(LA57_46>=RIGHT_SQUARE && LA57_46<=71)||(LA57_46>=73 && LA57_46<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_28);
+                        input.seek(index57_46);
                         if ( s>=0 ) return s;
                         break;
                     case 38 : 
-                        int LA57_55 = input.LA(1);
+                        int LA57_25 = input.LA(1);
 
                          
-                        int index57_55 = input.index();
+                        int index57_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (LA57_25==72) ) {s = 52;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_25==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
+                        else if ( (LA57_25==DOT) ) {s = 53;}
+
+                        else if ( (LA57_25==LEFT_PAREN) ) {s = 54;}
+
+                        else if ( (LA57_25==LEFT_SQUARE) ) {s = 55;}
+
+                        else if ( ((LA57_25>=ATTRIBUTES && LA57_25<=ID)||LA57_25==GLOBAL||LA57_25==COMMA||(LA57_25>=QUERY && LA57_25<=RIGHT_CURLY)||(LA57_25>=RIGHT_SQUARE && LA57_25<=71)||(LA57_25>=73 && LA57_25<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_55);
+                        input.seek(index57_25);
                         if ( s>=0 ) return s;
                         break;
                     case 39 : 
-                        int LA57_31 = input.LA(1);
+                        int LA57_15 = input.LA(1);
 
                          
-                        int index57_31 = input.index();
+                        int index57_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_31==ID) ) {s = 64;}
+                        if ( (synpred7()) ) {s = 13;}
 
-                        else if ( (LA57_31==LEFT_PAREN) ) {s = 65;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_31==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_31>=ATTRIBUTES && LA57_31<=FUNCTION)||(LA57_31>=DOT && LA57_31<=GLOBAL)||LA57_31==COMMA||(LA57_31>=QUERY && LA57_31<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_31);
+                        input.seek(index57_15);
                         if ( s>=0 ) return s;
                         break;
                     case 40 : 
-                        int LA57_11 = input.LA(1);
+                        int LA57_66 = input.LA(1);
 
                          
-                        int index57_11 = input.index();
+                        int index57_66 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_11==LEFT_PAREN) ) {s = 35;}
+                        if ( (LA57_66==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_11==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_66==LEFT_SQUARE) ) {s = 35;}
 
-                        else if ( ((LA57_11>=ATTRIBUTES && LA57_11<=GLOBAL)||LA57_11==COMMA||(LA57_11>=QUERY && LA57_11<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_66==LEFT_PAREN) ) {s = 34;}
 
+                        else if ( (LA57_66==DOT) ) {s = 33;}
+
+                        else if ( ((LA57_66>=ATTRIBUTES && LA57_66<=ID)||LA57_66==GLOBAL||LA57_66==COMMA||(LA57_66>=QUERY && LA57_66<=RIGHT_CURLY)||(LA57_66>=RIGHT_SQUARE && LA57_66<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_11);
+                        input.seek(index57_66);
                         if ( s>=0 ) return s;
                         break;
                     case 41 : 
-                        int LA57_56 = input.LA(1);
+                        int LA57_49 = input.LA(1);
 
                          
-                        int index57_56 = input.index();
+                        int index57_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_56==ID) ) {s = 93;}
+                        if ( (synpred7()) ) {s = 67;}
 
-                        else if ( (LA57_56==LEFT_PAREN) ) {s = 94;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_56==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_56>=ATTRIBUTES && LA57_56<=FUNCTION)||(LA57_56>=DOT && LA57_56<=GLOBAL)||LA57_56==COMMA||(LA57_56>=QUERY && LA57_56<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_56);
+                        input.seek(index57_49);
                         if ( s>=0 ) return s;
                         break;
                     case 42 : 
-                        int LA57_60 = input.LA(1);
+                        int LA57_50 = input.LA(1);
 
                          
-                        int index57_60 = input.index();
+                        int index57_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_60==ID) ) {s = 97;}
+                        if ( (synpred7()) ) {s = 67;}
 
-                        else if ( (LA57_60==LEFT_PAREN) ) {s = 98;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_60==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_60>=ATTRIBUTES && LA57_60<=FUNCTION)||(LA57_60>=DOT && LA57_60<=GLOBAL)||LA57_60==COMMA||(LA57_60>=QUERY && LA57_60<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_60);
+                        input.seek(index57_50);
                         if ( s>=0 ) return s;
                         break;
                     case 43 : 
-                        int LA57_14 = input.LA(1);
+                        int LA57_64 = input.LA(1);
 
                          
-                        int index57_14 = input.index();
+                        int index57_64 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 13;}
+                        if ( (LA57_64==DOT) ) {s = 101;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_64==LEFT_SQUARE) ) {s = 102;}
 
+                        else if ( (LA57_64==LEFT_PAREN) ) {s = 103;}
+
+                        else if ( (LA57_64==RIGHT_PAREN) && (synpred7())) {s = 13;}
+
+                        else if ( ((LA57_64>=ATTRIBUTES && LA57_64<=ID)||LA57_64==GLOBAL||LA57_64==COMMA||(LA57_64>=QUERY && LA57_64<=RIGHT_CURLY)||(LA57_64>=RIGHT_SQUARE && LA57_64<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_14);
+                        input.seek(index57_64);
                         if ( s>=0 ) return s;
                         break;
                     case 44 : 
-                        int LA57_16 = input.LA(1);
+                        int LA57_14 = input.LA(1);
 
                          
-                        int index57_16 = input.index();
+                        int index57_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_16==LEFT_PAREN) ) {s = 38;}
+                        if ( (LA57_14==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_16==ID) ) {s = 39;}
+                        else if ( (LA57_14==ID) ) {s = 36;}
 
-                        else if ( (LA57_16==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_14==LEFT_PAREN) ) {s = 37;}
 
-                        else if ( ((LA57_16>=ATTRIBUTES && LA57_16<=FUNCTION)||(LA57_16>=DOT && LA57_16<=GLOBAL)||LA57_16==COMMA||(LA57_16>=QUERY && LA57_16<=80)) && (synpred2())) {s = 12;}
+                        else if ( ((LA57_14>=ATTRIBUTES && LA57_14<=FUNCTION)||(LA57_14>=DOT && LA57_14<=GLOBAL)||LA57_14==COMMA||(LA57_14>=QUERY && LA57_14<=80)) && (synpred7())) {s = 12;}
 
                          
-                        input.seek(index57_16);
+                        input.seek(index57_14);
                         if ( s>=0 ) return s;
                         break;
                     case 45 : 
-                        int LA57_29 = input.LA(1);
+                        int LA57_37 = input.LA(1);
 
                          
-                        int index57_29 = input.index();
+                        int index57_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_29==72) ) {s = 60;}
+                        if ( (synpred7()) ) {s = 67;}
 
-                        else if ( (LA57_29==DOT) ) {s = 61;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_29==LEFT_SQUARE) ) {s = 62;}
-
-                        else if ( (LA57_29==LEFT_PAREN) ) {s = 63;}
-
-                        else if ( (LA57_29==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_29>=ATTRIBUTES && LA57_29<=ID)||LA57_29==GLOBAL||LA57_29==COMMA||(LA57_29>=QUERY && LA57_29<=RIGHT_CURLY)||(LA57_29>=RIGHT_SQUARE && LA57_29<=71)||(LA57_29>=73 && LA57_29<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_29);
+                        input.seek(index57_37);
                         if ( s>=0 ) return s;
                         break;
                     case 46 : 
-                        int LA57_27 = input.LA(1);
+                        int LA57_31 = input.LA(1);
 
                          
-                        int index57_27 = input.index();
+                        int index57_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_27==72) ) {s = 56;}
+                        if ( (synpred7()) ) {s = 13;}
 
-                        else if ( (LA57_27==DOT) ) {s = 57;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_27==LEFT_SQUARE) ) {s = 58;}
-
-                        else if ( (LA57_27==LEFT_PAREN) ) {s = 59;}
-
-                        else if ( (LA57_27==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_27>=ATTRIBUTES && LA57_27<=ID)||LA57_27==GLOBAL||LA57_27==COMMA||(LA57_27>=QUERY && LA57_27<=RIGHT_CURLY)||(LA57_27>=RIGHT_SQUARE && LA57_27<=71)||(LA57_27>=73 && LA57_27<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_27);
+                        input.seek(index57_31);
                         if ( s>=0 ) return s;
                         break;
                     case 47 : 
-                        int LA57_10 = input.LA(1);
+                        int LA57_27 = input.LA(1);
 
                          
-                        int index57_10 = input.index();
+                        int index57_27 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_10==72) ) {s = 31;}
+                        if ( (synpred7()) ) {s = 13;}
 
-                        else if ( (LA57_10==DOT) ) {s = 32;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_10==LEFT_SQUARE) ) {s = 33;}
-
-                        else if ( (LA57_10==LEFT_PAREN) ) {s = 34;}
-
-                        else if ( (LA57_10==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_10>=ATTRIBUTES && LA57_10<=ID)||LA57_10==GLOBAL||LA57_10==COMMA||(LA57_10>=QUERY && LA57_10<=RIGHT_CURLY)||(LA57_10>=RIGHT_SQUARE && LA57_10<=71)||(LA57_10>=73 && LA57_10<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_10);
+                        input.seek(index57_27);
                         if ( s>=0 ) return s;
                         break;
                     case 48 : 
-                        int LA57_22 = input.LA(1);
+                        int LA57_33 = input.LA(1);
 
                          
-                        int index57_22 = input.index();
+                        int index57_33 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_22==LEFT_PAREN) ) {s = 50;}
+                        if ( (LA57_33==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_22==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( ((LA57_33>=ATTRIBUTES && LA57_33<=ID)||LA57_33==GLOBAL||(LA57_33>=QUERY && LA57_33<=WHEN)||LA57_33==ENABLED||LA57_33==SALIENCE||LA57_33==DURATION||LA57_33==FROM||(LA57_33>=INIT && LA57_33<=RESULT)||(LA57_33>=CONTAINS && LA57_33<=IN)||LA57_33==THEN) ) {s = 66;}
 
-                        else if ( ((LA57_22>=ATTRIBUTES && LA57_22<=GLOBAL)||LA57_22==COMMA||(LA57_22>=QUERY && LA57_22<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_33==LEFT_PAREN) && (synpred7())) {s = 67;}
 
+                        else if ( (LA57_33==DOT||LA57_33==COMMA||(LA57_33>=DATE_EFFECTIVE && LA57_33<=DATE_EXPIRES)||LA57_33==BOOL||(LA57_33>=INT && LA57_33<=AGENDA_GROUP)||(LA57_33>=DIALECT && LA57_33<=DOUBLE_AMPER)||(LA57_33>=EXISTS && LA57_33<=ACCUMULATE)||LA57_33==COLLECT||(LA57_33>=FLOAT && LA57_33<=RIGHT_SQUARE)||(LA57_33>=EOL && LA57_33<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_22);
+                        input.seek(index57_33);
                         if ( s>=0 ) return s;
                         break;
                     case 49 : 
-                        int LA57_50 = input.LA(1);
+                        int LA57_57 = input.LA(1);
 
                          
-                        int index57_50 = input.index();
+                        int index57_57 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (LA57_57==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( ((LA57_57>=ATTRIBUTES && LA57_57<=ID)||LA57_57==GLOBAL||(LA57_57>=QUERY && LA57_57<=WHEN)||LA57_57==ENABLED||LA57_57==SALIENCE||LA57_57==DURATION||LA57_57==FROM||(LA57_57>=INIT && LA57_57<=RESULT)||(LA57_57>=CONTAINS && LA57_57<=IN)||LA57_57==THEN) ) {s = 95;}
 
+                        else if ( (LA57_57==LEFT_PAREN) && (synpred7())) {s = 67;}
+
+                        else if ( (LA57_57==DOT||LA57_57==COMMA||(LA57_57>=DATE_EFFECTIVE && LA57_57<=DATE_EXPIRES)||LA57_57==BOOL||(LA57_57>=INT && LA57_57<=AGENDA_GROUP)||(LA57_57>=DIALECT && LA57_57<=DOUBLE_AMPER)||(LA57_57>=EXISTS && LA57_57<=ACCUMULATE)||LA57_57==COLLECT||(LA57_57>=FLOAT && LA57_57<=RIGHT_SQUARE)||(LA57_57>=EOL && LA57_57<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_50);
+                        input.seek(index57_57);
                         if ( s>=0 ) return s;
                         break;
                     case 50 : 
-                        int LA57_9 = input.LA(1);
+                        int LA57_61 = input.LA(1);
 
                          
-                        int index57_9 = input.index();
+                        int index57_61 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_9==LEFT_PAREN) ) {s = 30;}
+                        if ( ((LA57_61>=ATTRIBUTES && LA57_61<=ID)||LA57_61==GLOBAL||(LA57_61>=QUERY && LA57_61<=WHEN)||LA57_61==ENABLED||LA57_61==SALIENCE||LA57_61==DURATION||LA57_61==FROM||(LA57_61>=INIT && LA57_61<=RESULT)||(LA57_61>=CONTAINS && LA57_61<=IN)||LA57_61==THEN) ) {s = 99;}
 
-                        else if ( (LA57_9==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_61==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( ((LA57_9>=ATTRIBUTES && LA57_9<=GLOBAL)||LA57_9==COMMA||(LA57_9>=QUERY && LA57_9<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_61==DOT||LA57_61==COMMA||(LA57_61>=DATE_EFFECTIVE && LA57_61<=DATE_EXPIRES)||LA57_61==BOOL||(LA57_61>=INT && LA57_61<=AGENDA_GROUP)||(LA57_61>=DIALECT && LA57_61<=DOUBLE_AMPER)||(LA57_61>=EXISTS && LA57_61<=ACCUMULATE)||LA57_61==COLLECT||(LA57_61>=FLOAT && LA57_61<=RIGHT_SQUARE)||(LA57_61>=EOL && LA57_61<=80)) && (synpred7())) {s = 12;}
 
+                        else if ( (LA57_61==LEFT_PAREN) && (synpred7())) {s = 67;}
+
                          
-                        input.seek(index57_9);
+                        input.seek(index57_61);
                         if ( s>=0 ) return s;
                         break;
                     case 51 : 
-                        int LA57_41 = input.LA(1);
+                        int LA57_21 = input.LA(1);
 
                          
-                        int index57_41 = input.index();
+                        int index57_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_41==ID) ) {s = 77;}
+                        if ( (synpred7()) ) {s = 13;}
 
-                        else if ( (LA57_41==LEFT_PAREN) ) {s = 78;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_41==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_41>=ATTRIBUTES && LA57_41<=FUNCTION)||(LA57_41>=DOT && LA57_41<=GLOBAL)||LA57_41==COMMA||(LA57_41>=QUERY && LA57_41<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_41);
+                        input.seek(index57_21);
                         if ( s>=0 ) return s;
                         break;
                     case 52 : 
-                        int LA57_52 = input.LA(1);
+                        int LA57_20 = input.LA(1);
 
                          
-                        int index57_52 = input.index();
+                        int index57_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA57_52>=ATTRIBUTES && LA57_52<=ID)||LA57_52==GLOBAL||(LA57_52>=QUERY && LA57_52<=WHEN)||LA57_52==ENABLED||LA57_52==SALIENCE||LA57_52==DURATION||LA57_52==FROM||(LA57_52>=INIT && LA57_52<=RESULT)||(LA57_52>=CONTAINS && LA57_52<=IN)||LA57_52==THEN) ) {s = 91;}
+                        if ( (LA57_20==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_52==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_20==ID) ) {s = 46;}
 
-                        else if ( (LA57_52==DOT||LA57_52==COMMA||(LA57_52>=DATE_EFFECTIVE && LA57_52<=DATE_EXPIRES)||LA57_52==BOOL||(LA57_52>=INT && LA57_52<=AGENDA_GROUP)||(LA57_52>=DIALECT && LA57_52<=DOUBLE_AMPER)||(LA57_52>=EXISTS && LA57_52<=ACCUMULATE)||LA57_52==COLLECT||(LA57_52>=FLOAT && LA57_52<=RIGHT_SQUARE)||(LA57_52>=EOL && LA57_52<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_20==LEFT_PAREN) ) {s = 47;}
 
-                        else if ( (LA57_52==LEFT_PAREN) && (synpred2())) {s = 67;}
+                        else if ( ((LA57_20>=ATTRIBUTES && LA57_20<=FUNCTION)||(LA57_20>=DOT && LA57_20<=GLOBAL)||LA57_20==COMMA||(LA57_20>=QUERY && LA57_20<=80)) && (synpred7())) {s = 12;}
 
                          
-                        input.seek(index57_52);
+                        input.seek(index57_20);
                         if ( s>=0 ) return s;
                         break;
                     case 53 : 
@@ -8363,7 +8559,7 @@
                         int index57_38 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 67;}
 
                         else if ( (true) ) {s = 3;}
 
@@ -8372,164 +8568,170 @@
                         if ( s>=0 ) return s;
                         break;
                     case 54 : 
-                        int LA57_5 = input.LA(1);
+                        int LA57_22 = input.LA(1);
 
                          
-                        int index57_5 = input.index();
+                        int index57_22 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_5==EXISTS) ) {s = 20;}
+                        if ( (LA57_22==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_5==NOT) ) {s = 21;}
+                        else if ( (LA57_22==ID) ) {s = 48;}
 
-                        else if ( (LA57_5==EVAL) ) {s = 22;}
+                        else if ( (LA57_22==LEFT_PAREN) ) {s = 49;}
 
-                        else if ( (LA57_5==ID) ) {s = 23;}
+                        else if ( ((LA57_22>=ATTRIBUTES && LA57_22<=FUNCTION)||(LA57_22>=DOT && LA57_22<=GLOBAL)||LA57_22==COMMA||(LA57_22>=QUERY && LA57_22<=80)) && (synpred7())) {s = 12;}
 
-                        else if ( (LA57_5==FORALL) ) {s = 24;}
-
-                        else if ( (LA57_5==LEFT_PAREN) ) {s = 25;}
-
-                        else if ( (LA57_5==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_5>=ATTRIBUTES && LA57_5<=FUNCTION)||(LA57_5>=DOT && LA57_5<=GLOBAL)||LA57_5==COMMA||(LA57_5>=QUERY && LA57_5<=FROM)||(LA57_5>=ACCUMULATE && LA57_5<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_5);
+                        input.seek(index57_22);
                         if ( s>=0 ) return s;
                         break;
                     case 55 : 
-                        int LA57_54 = input.LA(1);
+                        int LA57_9 = input.LA(1);
 
                          
-                        int index57_54 = input.index();
+                        int index57_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (LA57_9==LEFT_PAREN) ) {s = 30;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_9==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
+                        else if ( ((LA57_9>=ATTRIBUTES && LA57_9<=GLOBAL)||LA57_9==COMMA||(LA57_9>=QUERY && LA57_9<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_54);
+                        input.seek(index57_9);
                         if ( s>=0 ) return s;
                         break;
                     case 56 : 
-                        int LA57_66 = input.LA(1);
+                        int LA57_2 = input.LA(1);
 
                          
-                        int index57_66 = input.index();
+                        int index57_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_66==LEFT_SQUARE) ) {s = 33;}
+                        if ( (LA57_2==AND) ) {s = 4;}
 
-                        else if ( (LA57_66==LEFT_PAREN) ) {s = 34;}
+                        else if ( (LA57_2==OR) ) {s = 5;}
 
-                        else if ( (LA57_66==DOT) ) {s = 32;}
+                        else if ( (LA57_2==LEFT_PAREN) ) {s = 6;}
 
-                        else if ( (LA57_66==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_2==EXISTS) ) {s = 7;}
 
-                        else if ( ((LA57_66>=ATTRIBUTES && LA57_66<=ID)||LA57_66==GLOBAL||LA57_66==COMMA||(LA57_66>=QUERY && LA57_66<=RIGHT_CURLY)||(LA57_66>=RIGHT_SQUARE && LA57_66<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_2==NOT) ) {s = 8;}
 
+                        else if ( (LA57_2==EVAL) ) {s = 9;}
+
+                        else if ( (LA57_2==FORALL) ) {s = 10;}
+
+                        else if ( (LA57_2==ID) ) {s = 11;}
+
+                        else if ( ((LA57_2>=ATTRIBUTES && LA57_2<=FUNCTION)||(LA57_2>=DOT && LA57_2<=GLOBAL)||LA57_2==COMMA||(LA57_2>=QUERY && LA57_2<=LOCK_ON_ACTIVE)||LA57_2==DOUBLE_PIPE||(LA57_2>=DOUBLE_AMPER && LA57_2<=FROM)||(LA57_2>=ACCUMULATE && LA57_2<=80)) && (synpred7())) {s = 12;}
+
+                        else if ( (LA57_2==RIGHT_PAREN) && (synpred7())) {s = 13;}
+
                          
-                        input.seek(index57_66);
+                        input.seek(index57_2);
                         if ( s>=0 ) return s;
                         break;
                     case 57 : 
-                        int LA57_8 = input.LA(1);
+                        int LA57_53 = input.LA(1);
 
                          
-                        int index57_8 = input.index();
+                        int index57_53 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_8==LEFT_PAREN) ) {s = 28;}
+                        if ( (LA57_53==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (LA57_8==ID) ) {s = 29;}
+                        else if ( ((LA57_53>=ATTRIBUTES && LA57_53<=ID)||LA57_53==GLOBAL||(LA57_53>=QUERY && LA57_53<=WHEN)||LA57_53==ENABLED||LA57_53==SALIENCE||LA57_53==DURATION||LA57_53==FROM||(LA57_53>=INIT && LA57_53<=RESULT)||(LA57_53>=CONTAINS && LA57_53<=IN)||LA57_53==THEN) ) {s = 91;}
 
-                        else if ( (LA57_8==RIGHT_PAREN) && (synpred2())) {s = 13;}
+                        else if ( (LA57_53==LEFT_PAREN) && (synpred7())) {s = 67;}
 
-                        else if ( ((LA57_8>=ATTRIBUTES && LA57_8<=FUNCTION)||(LA57_8>=DOT && LA57_8<=GLOBAL)||LA57_8==COMMA||(LA57_8>=QUERY && LA57_8<=80)) && (synpred2())) {s = 12;}
+                        else if ( (LA57_53==DOT||LA57_53==COMMA||(LA57_53>=DATE_EFFECTIVE && LA57_53<=DATE_EXPIRES)||LA57_53==BOOL||(LA57_53>=INT && LA57_53<=AGENDA_GROUP)||(LA57_53>=DIALECT && LA57_53<=DOUBLE_AMPER)||(LA57_53>=EXISTS && LA57_53<=ACCUMULATE)||LA57_53==COLLECT||(LA57_53>=FLOAT && LA57_53<=RIGHT_SQUARE)||(LA57_53>=EOL && LA57_53<=80)) && (synpred7())) {s = 12;}
 
                          
-                        input.seek(index57_8);
+                        input.seek(index57_53);
                         if ( s>=0 ) return s;
                         break;
                     case 58 : 
-                        int LA57_59 = input.LA(1);
+                        int LA57_42 = input.LA(1);
 
                          
-                        int index57_59 = input.index();
+                        int index57_42 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (LA57_42==RIGHT_PAREN) && (synpred7())) {s = 13;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_42==ID) ) {s = 77;}
 
+                        else if ( (LA57_42==LEFT_PAREN) ) {s = 78;}
+
+                        else if ( ((LA57_42>=ATTRIBUTES && LA57_42<=FUNCTION)||(LA57_42>=DOT && LA57_42<=GLOBAL)||LA57_42==COMMA||(LA57_42>=QUERY && LA57_42<=80)) && (synpred7())) {s = 12;}
+
                          
-                        input.seek(index57_59);
+                        input.seek(index57_42);
                         if ( s>=0 ) return s;
                         break;
                     case 59 : 
-                        int LA57_46 = input.LA(1);
+                        int LA57_44 = input.LA(1);
 
                          
-                        int index57_46 = input.index();
+                        int index57_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 67;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_46);
+                        input.seek(index57_44);
                         if ( s>=0 ) return s;
                         break;
                     case 60 : 
-                        int LA57_20 = input.LA(1);
+                        int LA57_51 = input.LA(1);
 
                          
-                        int index57_20 = input.index();
+                        int index57_51 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_20==LEFT_PAREN) ) {s = 46;}
+                        if ( (synpred7()) ) {s = 67;}
 
-                        else if ( (LA57_20==ID) ) {s = 47;}
+                        else if ( (true) ) {s = 3;}
 
-                        else if ( (LA57_20==RIGHT_PAREN) && (synpred2())) {s = 13;}
-
-                        else if ( ((LA57_20>=ATTRIBUTES && LA57_20<=FUNCTION)||(LA57_20>=DOT && LA57_20<=GLOBAL)||LA57_20==COMMA||(LA57_20>=QUERY && LA57_20<=80)) && (synpred2())) {s = 12;}
-
                          
-                        input.seek(index57_20);
+                        input.seek(index57_51);
                         if ( s>=0 ) return s;
                         break;
                     case 61 : 
-                        int LA57_34 = input.LA(1);
+                        int LA57_62 = input.LA(1);
 
                          
-                        int index57_34 = input.index();
+                        int index57_62 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (synpred7()) ) {s = 67;}
 
                         else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index57_34);
+                        input.seek(index57_62);
                         if ( s>=0 ) return s;
                         break;
                     case 62 : 
-                        int LA57_63 = input.LA(1);
+                        int LA57_0 = input.LA(1);
 
                          
-                        int index57_63 = input.index();
+                        int index57_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred2()) ) {s = 67;}
+                        if ( (LA57_0==LEFT_SQUARE) && (synpred6())) {s = 1;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (LA57_0==LEFT_PAREN) ) {s = 2;}
 
+                        else if ( ((LA57_0>=ID && LA57_0<=DOT)||(LA57_0>=COMMA && LA57_0<=RIGHT_PAREN)||LA57_0==END||(LA57_0>=OR && LA57_0<=DOUBLE_AMPER)||(LA57_0>=EXISTS && LA57_0<=FORALL)||LA57_0==INIT||LA57_0==THEN||LA57_0==71) ) {s = 3;}
+
                          
-                        input.seek(index57_63);
+                        input.seek(index57_0);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -8561,14 +8763,14 @@
             "\1\1\1\uffff\1\12\2\1\25\uffff\1\1\1\uffff\1\1\2\uffff\1\1\10"+
             "\uffff\5\1\4\uffff\1\1\17\uffff\7\1",
             "\1\uffff",
-            "\5\6\1\1\1\6\1\20\2\1\5\6\1\uffff\1\6\1\uffff\4\6\5\uffff\1"+
+            "\5\6\1\1\1\6\1\14\2\1\5\6\1\uffff\1\6\1\uffff\4\6\5\uffff\1"+
             "\6\3\uffff\1\1\1\uffff\1\1\1\6\1\uffff\1\1\3\uffff\4\6\1\uffff"+
-            "\1\14\1\15\1\16\1\17\1\13\2\6\2\uffff\1\1\1\uffff\1\6\15\uffff"+
+            "\1\15\1\16\1\17\1\20\1\13\2\6\2\uffff\1\1\1\uffff\1\6\15\uffff"+
             "\7\1",
             "",
-            "\5\6\1\1\1\6\1\20\2\1\5\6\1\uffff\1\6\1\uffff\4\6\5\uffff\1"+
+            "\5\6\1\1\1\6\1\14\2\1\5\6\1\uffff\1\6\1\uffff\4\6\5\uffff\1"+
             "\6\3\uffff\1\1\1\uffff\1\1\1\6\1\uffff\1\1\3\uffff\4\6\1\uffff"+
-            "\1\14\1\15\1\16\1\17\1\13\2\6\2\uffff\1\1\1\uffff\1\6\15\uffff"+
+            "\1\15\1\16\1\17\1\20\1\13\2\6\2\uffff\1\1\1\uffff\1\6\15\uffff"+
             "\7\1",
             "\1\uffff",
             "\1\uffff",
@@ -8611,7 +8813,7 @@
             this.transition = DFA68_transition;
         }
         public String getDescription() {
-            return "()* loopback of 1321:3: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*";
+            return "()* loopback of 1335:3: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective[or] )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -8623,7 +8825,7 @@
                         int index68_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred3()) ) {s = 6;}
+                        if ( (synpred8()) ) {s = 6;}
 
                         else if ( (true) ) {s = 1;}
 
@@ -8642,11 +8844,11 @@
     static final String DFA69_eotS =
         "\61\uffff";
     static final String DFA69_eofS =
-        "\1\1\12\uffff\1\4\1\uffff\4\4\40\uffff";
+        "\1\1\12\uffff\5\4\41\uffff";
     static final String DFA69_minS =
         "\1\14\1\uffff\1\4\1\11\1\uffff\6\4\1\11\5\4\1\11\2\4\35\0";
     static final String DFA69_maxS =
-        "\1\45\1\uffff\2\120\1\uffff\6\120\1\72\1\120\4\74\3\120\35\0";
+        "\1\45\1\uffff\2\120\1\uffff\6\120\1\72\4\74\4\120\35\0";
     static final String DFA69_acceptS =
         "\1\uffff\1\2\2\uffff\1\1\54\uffff";
     static final String DFA69_specialS =
@@ -8660,31 +8862,29 @@
             "\1\1\1\uffff\1\12\2\1\25\uffff\1\1\1\uffff\1\1\2\uffff\1\1\10"+
             "\uffff\5\1\4\uffff\1\1\17\uffff\7\1",
             "",
-            "\5\4\1\1\1\4\1\14\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
+            "\5\4\1\1\1\4\1\20\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
             "\4\3\uffff\1\1\1\uffff\1\1\1\4\1\uffff\1\1\3\uffff\4\4\1\uffff"+
-            "\1\15\1\16\1\17\1\20\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
+            "\1\14\1\15\1\16\1\17\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
             "\7\1",
-            "\5\4\1\1\1\4\1\14\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
+            "\5\4\1\1\1\4\1\20\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
             "\4\3\uffff\1\1\1\uffff\1\1\1\4\1\uffff\1\1\3\uffff\4\4\1\uffff"+
-            "\1\15\1\16\1\17\1\20\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
+            "\1\14\1\15\1\16\1\17\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
             "\7\1",
-            "\5\4\1\1\1\4\1\14\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
+            "\5\4\1\1\1\4\1\20\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
             "\4\3\uffff\1\1\1\uffff\1\1\1\4\1\uffff\1\1\3\uffff\4\4\1\uffff"+
-            "\1\15\1\16\1\17\1\20\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
+            "\1\14\1\15\1\16\1\17\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
             "\7\1",
-            "\5\4\1\1\1\4\1\14\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
+            "\5\4\1\1\1\4\1\20\2\1\5\4\1\uffff\1\4\1\uffff\4\4\5\uffff\1"+
             "\4\3\uffff\1\1\1\uffff\1\1\1\4\1\uffff\1\1\3\uffff\4\4\1\uffff"+
-            "\1\15\1\16\1\17\1\20\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
+            "\1\14\1\15\1\16\1\17\1\13\2\4\2\uffff\1\1\1\uffff\1\4\15\uffff"+
             "\7\1",
             "\5\1\1\uffff\1\1\1\26\2\uffff\5\1\3\uffff\1\1\1\uffff\1\1\6"+
             "\uffff\1\1\6\uffff\1\1\1\uffff\1\4\1\1\2\uffff\4\1\1\uffff\1"+
             "\22\1\23\1\24\1\25\1\21\6\uffff\1\1\16\uffff\6\4",
-            "\5\4\1\uffff\1\4\1\30\2\uffff\5\4\1\uffff\1\4\1\uffff\4\4\5"+
-            "\uffff\1\4\6\uffff\1\4\1\uffff\1\1\3\uffff\4\4\1\uffff\1\31"+
-            "\1\32\1\33\1\34\1\27\2\4\4\uffff\1\4\16\uffff\6\1",
+            "\5\4\1\uffff\1\4\1\34\2\uffff\5\4\1\uffff\1\4\1\uffff\4\4\5"+
+            "\uffff\1\4\6\uffff\1\4\1\uffff\1\1\3\uffff\4\4\1\uffff\1\30"+
+            "\1\31\1\32\1\33\1\27\2\4\4\uffff\1\4\16\uffff\6\1",
             "\1\4\1\uffff\1\1\2\4\25\uffff\1\4\1\uffff\1\4\24\uffff\1\4",
-            "\7\4\1\51\34\4\1\36\10\4\1\45\1\46\1\47\1\50\1\35\25\4\1\37"+
-            "\1\40\1\41\1\42\1\43\1\44",
             "\5\1\1\4\2\1\2\4\5\1\1\uffff\1\1\1\uffff\4\1\5\uffff\1\1\3\uffff"+
             "\1\4\1\uffff\1\4\1\1\5\uffff\4\1\1\uffff\7\1\2\uffff\1\4\1\uffff"+
             "\1\1",
@@ -8697,6 +8897,8 @@
             "\5\1\1\4\2\1\2\4\5\1\1\uffff\1\1\1\uffff\4\1\5\uffff\1\1\3\uffff"+
             "\1\4\1\uffff\1\4\1\1\5\uffff\4\1\1\uffff\7\1\2\uffff\1\4\1\uffff"+
             "\1\1",
+            "\7\4\1\51\34\4\1\36\10\4\1\45\1\46\1\47\1\50\1\35\25\4\1\37"+
+            "\1\40\1\41\1\42\1\43\1\44",
             "\1\1\1\uffff\1\52\1\uffff\1\1\25\uffff\1\1\1\uffff\1\1\2\uffff"+
             "\1\1\10\uffff\5\1\4\uffff\1\1\17\uffff\7\1",
             "\5\4\1\1\1\4\1\54\1\uffff\1\1\5\4\1\uffff\1\4\1\uffff\4\4\5"+
@@ -8768,7 +8970,7 @@
             this.transition = DFA69_transition;
         }
         public String getDescription() {
-            return "()* loopback of 1343:3: ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*";
+            return "()* loopback of 1358:3: ( options {backtrack=true; } : t= DOUBLE_AMPER constraint_expression[and] )*";
         }
     }
  
@@ -8907,188 +9109,194 @@
     public static final BitSet FOLLOW_lhs_unary_in_lhs_and1891 = new BitSet(new long[]{0x0000003000000002L});
     public static final BitSet FOLLOW_set_in_lhs_and1899 = new BitSet(new long[]{0x0000078000000900L});
     public static final BitSet FOLLOW_lhs_unary_in_lhs_and1915 = new BitSet(new long[]{0x0000003000000002L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1952 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1962 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1972 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_unary1982 = new BitSet(new long[]{0x0000004000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_FROM_in_lhs_unary2000 = new BitSet(new long[]{0x103FF8408147C5F0L});
-    public static final BitSet FOLLOW_accumulate_statement_in_lhs_unary2060 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_collect_statement_in_lhs_unary2083 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_from_statement_in_lhs_unary2107 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2146 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2155 = new BitSet(new long[]{0x0000078000000900L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2159 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2161 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary2172 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_lhs_exist2194 = new BitSet(new long[]{0x0000000000000900L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2214 = new BitSet(new long[]{0x0000078000000900L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2218 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2248 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2298 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_lhs_not2350 = new BitSet(new long[]{0x0000000000000900L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2363 = new BitSet(new long[]{0x0000078000000900L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2367 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2398 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2435 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_lhs_eval2481 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2492 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_lhs_forall2518 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2520 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2524 = new BitSet(new long[]{0x0000000000001100L});
-    public static final BitSet FOLLOW_COMMA_in_lhs_forall2537 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2542 = new BitSet(new long[]{0x0000000000003100L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2555 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2588 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern2596 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_from_statement2623 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_from_source2652 = new BitSet(new long[]{0x0000000000000A02L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source2680 = new BitSet(new long[]{0x0000000000000202L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source2693 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2734 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2744 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_lhs_pattern_in_accumulate_statement2748 = new BitSet(new long[]{0x0000100000001100L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2750 = new BitSet(new long[]{0x0000100000000100L});
-    public static final BitSet FOLLOW_INIT_in_accumulate_statement2768 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2781 = new BitSet(new long[]{0x0000200000001000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2783 = new BitSet(new long[]{0x0000200000000000L});
-    public static final BitSet FOLLOW_ACTION_in_accumulate_statement2794 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2798 = new BitSet(new long[]{0x0000C00000001000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2800 = new BitSet(new long[]{0x0000C00000000000L});
-    public static final BitSet FOLLOW_REVERSE_in_accumulate_statement2813 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2817 = new BitSet(new long[]{0x0000800000001000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2819 = new BitSet(new long[]{0x0000800000000000L});
-    public static final BitSet FOLLOW_RESULT_in_accumulate_statement2836 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2840 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_ID_in_accumulate_statement2866 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2870 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2887 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain2913 = new BitSet(new long[]{0x103EF0408147C5F0L});
-    public static final BitSet FOLLOW_identifier_in_expression_chain2917 = new BitSet(new long[]{0x0400000000000A02L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain2948 = new BitSet(new long[]{0x0000000000000202L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2981 = new BitSet(new long[]{0x0000000000000202L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain2996 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_collect_statement3047 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement3057 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_lhs_pattern_in_collect_statement3061 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement3063 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_fact_binding3095 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_72_in_fact_binding3097 = new BitSet(new long[]{0x0000000000000900L});
-    public static final BitSet FOLLOW_fact_in_fact_binding3111 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding3127 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_fact_in_fact_binding3131 = new BitSet(new long[]{0x0000000C00002000L});
-    public static final BitSet FOLLOW_set_in_fact_binding3144 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_fact_in_fact_binding3156 = new BitSet(new long[]{0x0000000C00002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding3174 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_qualified_id_in_fact3229 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3239 = new BitSet(new long[]{0x103EF2408147EDF0L});
-    public static final BitSet FOLLOW_constraints_in_fact3253 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3264 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints3284 = new BitSet(new long[]{0x0000000000001002L});
-    public static final BitSet FOLLOW_COMMA_in_constraints3291 = new BitSet(new long[]{0x103EF2408147CDF0L});
-    public static final BitSet FOLLOW_constraint_in_constraints3300 = new BitSet(new long[]{0x0000000000001002L});
-    public static final BitSet FOLLOW_or_constr_in_constraint3333 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3356 = new BitSet(new long[]{0x0000000800000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3364 = new BitSet(new long[]{0x103EF2408147CDF0L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3373 = new BitSet(new long[]{0x0000000800000002L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3405 = new BitSet(new long[]{0x0000002000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3413 = new BitSet(new long[]{0x103EF2408147CDF0L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3422 = new BitSet(new long[]{0x0000002000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr3450 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3458 = new BitSet(new long[]{0x103EF2408147CDF0L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr3460 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3463 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_unary_constr3469 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_predicate_in_unary_constr3471 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_field_constraint3501 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_72_in_field_constraint3503 = new BitSet(new long[]{0x103EF0408147C5F0L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint3524 = new BitSet(new long[]{0x003E010000000802L,0x000000000001FC00L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3552 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_74_in_field_constraint3572 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_predicate_in_field_constraint3574 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3603 = new BitSet(new long[]{0x0000000800000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective3622 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3634 = new BitSet(new long[]{0x0000000800000002L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3666 = new BitSet(new long[]{0x0000002000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3687 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3698 = new BitSet(new long[]{0x0000002000000002L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3735 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3742 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3749 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3758 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3764 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_75_in_simple_operator3795 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_76_in_simple_operator3803 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_77_in_simple_operator3811 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_78_in_simple_operator3819 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_79_in_simple_operator3827 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_80_in_simple_operator3835 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_CONTAINS_in_simple_operator3843 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator3851 = new BitSet(new long[]{0x0002000000000000L});
-    public static final BitSet FOLLOW_CONTAINS_in_simple_operator3855 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_EXCLUDES_in_simple_operator3863 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_MATCHES_in_simple_operator3871 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator3879 = new BitSet(new long[]{0x0008000000000000L});
-    public static final BitSet FOLLOW_MATCHES_in_simple_operator3883 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator3891 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator3899 = new BitSet(new long[]{0x0010000000000000L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator3903 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator3917 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IN_in_compound_operator3947 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_NOT_in_compound_operator3959 = new BitSet(new long[]{0x0020000000000000L});
-    public static final BitSet FOLLOW_IN_in_compound_operator3961 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3976 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3980 = new BitSet(new long[]{0x0000000000003000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator3987 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3991 = new BitSet(new long[]{0x0000000000003000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator4000 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value4034 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value4054 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value4068 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint4111 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint4122 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint4135 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint4146 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_literal_constraint4158 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate4196 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk4214 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk4218 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk4227 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk4232 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk4246 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk4250 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk4259 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk4264 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk4277 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk4281 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_square_chunk_in_square_chunk4290 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk4295 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_qualified_id4308 = new BitSet(new long[]{0x0400000000000202L});
-    public static final BitSet FOLLOW_DOT_in_qualified_id4312 = new BitSet(new long[]{0x103EF0408147C5F0L});
-    public static final BitSet FOLLOW_identifier_in_qualified_id4314 = new BitSet(new long[]{0x0400000000000202L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_qualified_id4321 = new BitSet(new long[]{0x0800000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_qualified_id4323 = new BitSet(new long[]{0x0400000000000002L});
-    public static final BitSet FOLLOW_identifier_in_dotted_name4338 = new BitSet(new long[]{0x0400000000000202L});
-    public static final BitSet FOLLOW_DOT_in_dotted_name4342 = new BitSet(new long[]{0x103EF0408147C5F0L});
-    public static final BitSet FOLLOW_identifier_in_dotted_name4344 = new BitSet(new long[]{0x0400000000000202L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name4351 = new BitSet(new long[]{0x0800000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name4353 = new BitSet(new long[]{0x0400000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path4369 = new BitSet(new long[]{0x0000000000000202L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path4373 = new BitSet(new long[]{0x103EF0408147C5F0L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path4375 = new BitSet(new long[]{0x0000000000000202L});
-    public static final BitSet FOLLOW_identifier_in_accessor_element4393 = new BitSet(new long[]{0x0400000000000002L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element4395 = new BitSet(new long[]{0x0400000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk4412 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk4420 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk4444 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_opt_semicolon_in_rhs_chunk4446 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_name4480 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_name4488 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1960 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1978 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1997 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2016 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2033 = new BitSet(new long[]{0x0000078000000900L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2037 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2039 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary2050 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary2062 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2089 = new BitSet(new long[]{0x0000004000000002L});
+    public static final BitSet FOLLOW_FROM_in_pattern_source2101 = new BitSet(new long[]{0x103FF8408147C5F0L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source2180 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_statement_in_pattern_source2204 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXISTS_in_lhs_exist2247 = new BitSet(new long[]{0x0000000000000900L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2267 = new BitSet(new long[]{0x0000078000000900L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2271 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2351 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NOT_in_lhs_not2403 = new BitSet(new long[]{0x0000000000000900L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2416 = new BitSet(new long[]{0x0000078000000900L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2420 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2451 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2488 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_lhs_eval2534 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2545 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FORALL_in_lhs_forall2571 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2573 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2577 = new BitSet(new long[]{0x0000000000001100L});
+    public static final BitSet FOLLOW_COMMA_in_lhs_forall2590 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2595 = new BitSet(new long[]{0x0000000000003100L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2608 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2641 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern2649 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_from_statement2676 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_from_source2705 = new BitSet(new long[]{0x0000000000000A02L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source2733 = new BitSet(new long[]{0x0000000000000202L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source2746 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2787 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2797 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_pattern_source_in_accumulate_statement2801 = new BitSet(new long[]{0x0000100000001100L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2803 = new BitSet(new long[]{0x0000100000000100L});
+    public static final BitSet FOLLOW_INIT_in_accumulate_statement2821 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2834 = new BitSet(new long[]{0x0000200000001000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2836 = new BitSet(new long[]{0x0000200000000000L});
+    public static final BitSet FOLLOW_ACTION_in_accumulate_statement2847 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2851 = new BitSet(new long[]{0x0000C00000001000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2853 = new BitSet(new long[]{0x0000C00000000000L});
+    public static final BitSet FOLLOW_REVERSE_in_accumulate_statement2866 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2870 = new BitSet(new long[]{0x0000800000001000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2872 = new BitSet(new long[]{0x0000800000000000L});
+    public static final BitSet FOLLOW_RESULT_in_accumulate_statement2889 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2893 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_ID_in_accumulate_statement2919 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2923 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2940 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain2969 = new BitSet(new long[]{0x103EF0408147C5F0L});
+    public static final BitSet FOLLOW_identifier_in_expression_chain2973 = new BitSet(new long[]{0x0400000000000A02L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain3004 = new BitSet(new long[]{0x0000000000000202L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain3037 = new BitSet(new long[]{0x0000000000000202L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain3052 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLLECT_in_collect_statement3103 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement3113 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement3117 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement3119 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_fact_binding3151 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_72_in_fact_binding3153 = new BitSet(new long[]{0x0000000000000900L});
+    public static final BitSet FOLLOW_fact_in_fact_binding3167 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding3183 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_fact_in_fact_binding3187 = new BitSet(new long[]{0x0000000C00002000L});
+    public static final BitSet FOLLOW_set_in_fact_binding3200 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_fact_in_fact_binding3212 = new BitSet(new long[]{0x0000000C00002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding3230 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_qualified_id_in_fact3285 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3295 = new BitSet(new long[]{0x103EF2408147EDF0L});
+    public static final BitSet FOLLOW_constraints_in_fact3309 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3320 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints3340 = new BitSet(new long[]{0x0000000000001002L});
+    public static final BitSet FOLLOW_COMMA_in_constraints3347 = new BitSet(new long[]{0x103EF2408147CDF0L});
+    public static final BitSet FOLLOW_constraint_in_constraints3356 = new BitSet(new long[]{0x0000000000001002L});
+    public static final BitSet FOLLOW_or_constr_in_constraint3389 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3412 = new BitSet(new long[]{0x0000000800000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3420 = new BitSet(new long[]{0x103EF2408147CDF0L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3429 = new BitSet(new long[]{0x0000000800000002L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3461 = new BitSet(new long[]{0x0000002000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3469 = new BitSet(new long[]{0x103EF2408147CDF0L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3478 = new BitSet(new long[]{0x0000002000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr3506 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3514 = new BitSet(new long[]{0x103EF2408147CDF0L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr3516 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3519 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_unary_constr3525 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_predicate_in_unary_constr3527 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_field_constraint3557 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_72_in_field_constraint3559 = new BitSet(new long[]{0x103EF0408147C5F0L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint3580 = new BitSet(new long[]{0x003E010000000802L,0x000000000001FC00L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3608 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_74_in_field_constraint3628 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_predicate_in_field_constraint3630 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3673 = new BitSet(new long[]{0x0000000800000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective3697 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3708 = new BitSet(new long[]{0x0000000800000002L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3740 = new BitSet(new long[]{0x0000002000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3761 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3772 = new BitSet(new long[]{0x0000002000000002L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3809 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3816 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3823 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3832 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3838 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_75_in_simple_operator3869 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_76_in_simple_operator3877 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_77_in_simple_operator3885 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_78_in_simple_operator3893 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_79_in_simple_operator3901 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_80_in_simple_operator3909 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_CONTAINS_in_simple_operator3917 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_NOT_in_simple_operator3925 = new BitSet(new long[]{0x0002000000000000L});
+    public static final BitSet FOLLOW_CONTAINS_in_simple_operator3929 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_EXCLUDES_in_simple_operator3937 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_MATCHES_in_simple_operator3945 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_NOT_in_simple_operator3953 = new BitSet(new long[]{0x0008000000000000L});
+    public static final BitSet FOLLOW_MATCHES_in_simple_operator3957 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator3965 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_NOT_in_simple_operator3973 = new BitSet(new long[]{0x0010000000000000L});
+    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator3977 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IN_in_compound_operator4021 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_NOT_in_compound_operator4033 = new BitSet(new long[]{0x0020000000000000L});
+    public static final BitSet FOLLOW_IN_in_compound_operator4035 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator4050 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator4054 = new BitSet(new long[]{0x0000000000003000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator4061 = new BitSet(new long[]{0x10FEF04083D7CDF0L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator4065 = new BitSet(new long[]{0x0000000000003000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator4074 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value4108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value4128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value4142 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint4185 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint4196 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint4209 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint4220 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_literal_constraint4232 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_predicate4270 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk4288 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk4292 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk4301 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk4306 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk4320 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk4324 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk4333 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk4338 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk4351 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk4355 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_square_chunk_in_square_chunk4364 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk4369 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_qualified_id4382 = new BitSet(new long[]{0x0400000000000202L});
+    public static final BitSet FOLLOW_DOT_in_qualified_id4386 = new BitSet(new long[]{0x103EF0408147C5F0L});
+    public static final BitSet FOLLOW_identifier_in_qualified_id4388 = new BitSet(new long[]{0x0400000000000202L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_qualified_id4395 = new BitSet(new long[]{0x0800000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_qualified_id4397 = new BitSet(new long[]{0x0400000000000002L});
+    public static final BitSet FOLLOW_identifier_in_dotted_name4412 = new BitSet(new long[]{0x0400000000000202L});
+    public static final BitSet FOLLOW_DOT_in_dotted_name4416 = new BitSet(new long[]{0x103EF0408147C5F0L});
+    public static final BitSet FOLLOW_identifier_in_dotted_name4418 = new BitSet(new long[]{0x0400000000000202L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name4425 = new BitSet(new long[]{0x0800000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name4427 = new BitSet(new long[]{0x0400000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path4443 = new BitSet(new long[]{0x0000000000000202L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path4447 = new BitSet(new long[]{0x103EF0408147C5F0L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path4449 = new BitSet(new long[]{0x0000000000000202L});
+    public static final BitSet FOLLOW_identifier_in_accessor_element4467 = new BitSet(new long[]{0x0400000000000002L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element4469 = new BitSet(new long[]{0x0400000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk4486 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk4494 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk4518 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_opt_semicolon_in_rhs_chunk4520 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_name4554 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_name4562 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_set_in_identifier0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred12940 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred22973 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred33622 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
-    public static final BitSet FOLLOW_and_restr_connective_in_synpred33634 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred43687 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
-    public static final BitSet FOLLOW_constraint_expression_in_synpred43698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXISTS_in_synpred11952 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NOT_in_synpred21970 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_synpred31989 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FORALL_in_synpred42008 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred52027 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred62996 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred73029 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred83697 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
+    public static final BitSet FOLLOW_and_restr_connective_in_synpred83708 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred93761 = new BitSet(new long[]{0x003E010000000800L,0x000000000001F800L});
+    public static final BitSet FOLLOW_constraint_expression_in_synpred93772 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -138,18 +138,18 @@
 
     public void visitCollectDescr(final CollectDescr descr) {
         String tmpstr = new String();
-        visitPatternDescr( descr.getResultPattern() );
+        //visitPatternDescr( descr.getOutputPattern() );
         tmpstr += this.template + " from collect (";
-        visitPatternDescr( descr.getSourcePattern() );
+        visitPatternDescr( descr.getInputPattern() );
         tmpstr += this.template.substring( 2 );
         this.template = tmpstr + ");";
     }
 
     public void visitAccumulateDescr(final AccumulateDescr descr) {
         String tmpstr = new String();
-        visitPatternDescr( descr.getResultPattern() );
+        //visitPatternDescr( descr.getOutputPattern() );
         tmpstr += this.template + " from accumulate (";
-        visitPatternDescr( descr.getSourcePattern() );
+        visitPatternDescr( descr.getInputPattern() );
         tmpstr += this.template.substring( 2 );
 
         if ( descr.isExternalFunction() ) tmpstr += "," + descr.getFunctionIdentifier() + "(" + descr.getExpression() + ")";
@@ -162,7 +162,7 @@
     }
 
     public void visitFromDescr(final FromDescr descr) {
-        visitPatternDescr( descr.getReturnedPattern() );
+        //visitPatternDescr( descr.getOutputPattern() );
         this.template += " from ";
         this.template += descr.getDataSource();
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -22,14 +22,14 @@
 /**
  * A descr class for accumulate node
  */
-public class AccumulateDescr extends BaseDescr
+public class AccumulateDescr extends PatternSourceDescr
     implements
-    PatternProcessorCeDescr {
+    ConditionalElementDescr,
+    PatternDestinationDescr {
 
     private static final long serialVersionUID = 2831283873824863255L;
 
-    private PatternDescr      sourcePattern;
-    private PatternDescr      resultPattern;
+    private PatternDescr      inputPattern;
     private String            initCode;
     private String            actionCode;
     private String            reverseCode;
@@ -41,17 +41,9 @@
     private String            expression;
 
     public int getLine() {
-        return this.sourcePattern.getLine();
+        return this.inputPattern.getLine();
     }
 
-    public void setSourcePattern(final PatternDescr sourcePattern) {
-        this.sourcePattern = sourcePattern;
-    }
-
-    public PatternDescr getSourcePattern() {
-        return this.sourcePattern;
-    }
-
     public String getClassName() {
         return this.className;
     }
@@ -92,20 +84,12 @@
         this.resultCode = resultCode;
     }
 
-    public void setResultPattern(final PatternDescr resultPattern) {
-        this.resultPattern = resultPattern;
-    }
-
-    public PatternDescr getResultPattern() {
-        return this.resultPattern;
-    }
-
     public String toString() {
-        return "[Accumulate: id=" + this.resultPattern.getIdentifier() + "; objectType=" + this.resultPattern.getObjectType() + "]";
+        return "[Accumulate: input=" + this.inputPattern.getIdentifier() + "; objectType=" + this.inputPattern.getObjectType() + "]";
     }
 
     public void addDescr(final BaseDescr patternDescr) {
-        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+        throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
     }
 
     public List getDescrs() {
@@ -114,7 +98,7 @@
     }
 
     public void addOrMerge(BaseDescr baseDescr) {
-        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+        throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
     }
 
     public String getReverseCode() {
@@ -149,4 +133,12 @@
         this.functionIdentifier = functionIdentifier;
     }
 
+    public PatternDescr getInputPattern() {
+        return this.inputPattern;
+    }
+
+    public void setInputPattern(final PatternDescr inputPattern) {
+        this.inputPattern = inputPattern;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -25,29 +25,21 @@
  * @author etirelli
  *
  */
-public class CollectDescr extends BaseDescr
+public class CollectDescr extends PatternSourceDescr
     implements
-    PatternProcessorCeDescr
+    ConditionalElementDescr,
+    PatternDestinationDescr
     {
 
-    private static final long serialVersionUID = -78056848363435347L;
+    private static final long  serialVersionUID = -78056848363435347L;
 
-    private PatternDescr       sourcePattern;
-    private PatternDescr       resultPattern;
-    private String            classMethodName;
+    private PatternDescr       inputPattern;
+    private String             classMethodName;
 
     public int getLine() {
-        return this.sourcePattern.getLine();
+        return this.inputPattern.getLine();
     }
 
-    public void setSourcePattern(final PatternDescr sourcePattern) {
-        this.sourcePattern = sourcePattern;
-    }
-
-    public PatternDescr getSourcePattern() {
-        return this.sourcePattern;
-    }
-
     public String getClassMethodName() {
         return this.classMethodName;
     }
@@ -56,20 +48,12 @@
         this.classMethodName = classMethodName;
     }
 
-    public void setResultPattern(final PatternDescr resultPattern) {
-        this.resultPattern = resultPattern;
-    }
-
-    public PatternDescr getResultPattern() {
-        return this.resultPattern;
-    }
-
     public String toString() {
-        return "[Collect: id=" + this.resultPattern.getIdentifier() + "; objectType=" + this.resultPattern.getObjectType() + "]";
+        return "[Collect: input=" + this.inputPattern.getIdentifier() + "; objectType=" + this.inputPattern.getObjectType() + "]";
     }
 
     public void addDescr(final BaseDescr patternDescr) {
-        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+        throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
     }
 
     public List getDescrs() {
@@ -78,7 +62,15 @@
     }
 
     public void addOrMerge(BaseDescr baseDescr) {
-        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+        throw new UnsupportedOperationException( "Can't add descriptors to " + this.getClass().getName() );
     }
 
+    public PatternDescr getInputPattern() {
+        return this.inputPattern;
+    }
+
+    public void setInputPattern(final PatternDescr inputPattern) {
+        this.inputPattern = inputPattern;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -3,22 +3,14 @@
 import java.util.Collections;
 import java.util.List;
 
-public class FromDescr extends BaseDescr
+public class FromDescr extends PatternSourceDescr
     implements
-    ConditionalElementDescr {
+    ConditionalElementDescr
+    {
 
     private static final long serialVersionUID = -7321451713158332284L;
-    private PatternDescr             pattern;
     private DeclarativeInvokerDescr dataSource;
 
-    public int getLine() {
-        return this.pattern.getLine();
-    }
-
-    public void setPattern(final PatternDescr pattern) {
-        this.pattern = pattern;
-    }
-
     public DeclarativeInvokerDescr getDataSource() {
         return this.dataSource;
     }
@@ -27,10 +19,6 @@
         this.dataSource = dataSource;
     }
 
-    public PatternDescr getReturnedPattern() {
-        return this.pattern;
-    }
-
     public void addDescr(final BaseDescr baseDescr) {
         throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
     }
@@ -43,4 +31,5 @@
         throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
     }
 
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -29,6 +29,7 @@
     private ConditionalElementDescr constraint          = new AndDescr();
     private int                     leftParentCharacter  = -1;
     private int                     rightParentCharacter = -1;
+    private PatternSourceDescr      source;
 
     public PatternDescr() {
         this( null,
@@ -105,4 +106,12 @@
     public void setRightParentCharacter(final int rightParentCharacter) {
         this.rightParentCharacter = rightParentCharacter;
     }
+
+    public PatternSourceDescr getSource() {
+        return source;
+    }
+
+    public void setSource(PatternSourceDescr source) {
+        this.source = source;
+    }
 }
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDestinationDescr.java (from rev 12824, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternProcessorCeDescr.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDestinationDescr.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDestinationDescr.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2007 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.
+ *
+ * Created on Jun 25, 2007
+ */package org.drools.lang.descr;
+
+/**
+ * An interface to represent pattern destinations
+ * 
+ * @author fernandomeyer
+ */
+public interface PatternDestinationDescr {
+
+    public PatternDescr getInputPattern();
+    public void setInputPattern(PatternDescr patternDescr);
+}

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternProcessorCeDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternProcessorCeDescr.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternProcessorCeDescr.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,16 +0,0 @@
-/**
- * 
- */
-package org.drools.lang.descr;
-
-/**
- * @author fernandomeyer
- */
-
-public interface PatternProcessorCeDescr
-    extends
-    ConditionalElementDescr {
-
-    void setResultPattern(PatternDescr patternDescr);
-    void setSourcePattern(PatternDescr patternDescr);
-}

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternSourceDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternSourceDescr.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternSourceDescr.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2007 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.
+ *
+ * Created on Jun 25, 2007
+ */
+package org.drools.lang.descr;
+
+/**
+ * A common base class for all descriptor classes that represent a pattern sources
+ *  
+ * @author etirelli
+ */
+public class PatternSourceDescr extends BaseDescr {
+
+    private static final long serialVersionUID = 3687421674541038298L;
+    
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/AccumulateBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,14 +1,10 @@
 package org.drools.rule.builder;
 
-import org.drools.lang.descr.BaseDescr;
-import org.drools.rule.ConditionalElement;
+/**
+ * A markup interface for AccumulateBuilders
+ * @author etirelli
+ *
+ */
+public interface AccumulateBuilder extends RuleConditionBuilder {
 
-public interface AccumulateBuilder {
-
-    /* (non-Javadoc)
-     * @see org.drools.semantics.java.builder.ConditionalElementBuilder#build(org.drools.semantics.java.builder.BuildContext, org.drools.semantics.java.builder.BuildUtils, org.drools.semantics.java.builder.PatternBuilder, org.drools.lang.descr.BaseDescr)
-     */
-    public ConditionalElement build(RuleBuildContext context,
-                                    BaseDescr descr);
-
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/CollectBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -21,7 +21,7 @@
 import org.drools.lang.descr.PatternDescr;
 import org.drools.rule.Collect;
 import org.drools.rule.Pattern;
-import org.drools.rule.ConditionalElement;
+import org.drools.rule.RuleConditionElement;
 
 /**
  * @author etirelli
@@ -29,31 +29,32 @@
  */
 public class CollectBuilder
     implements
-    ConditionalElementBuilder {
+    RuleConditionBuilder {
 
-    public ConditionalElement build(final RuleBuildContext context,
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
-        return build(context, descr, null);
+        return build( context,
+                      descr,
+                      null );
     }
-    
-    public ConditionalElement build(final RuleBuildContext context,
+
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr,
                                     final Pattern prefixPattern) {
 
         final CollectDescr collectDescr = (CollectDescr) descr;
         final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
-        final Pattern sourcePattern = patternBuilder.build( context,
-                                                            collectDescr.getSourcePattern() );
+        final Pattern sourcePattern = (Pattern) patternBuilder.build( context,
+                                                                      collectDescr.getInputPattern() );
 
         if ( sourcePattern == null ) {
             return null;
         }
 
-        final Pattern resultPattern = patternBuilder.build( context,
-                                                            collectDescr.getResultPattern() );
-
         final String className = "collect" + context.getNextId();
         collectDescr.setClassMethodName( className );
+        
+        Pattern resultPattern = (Pattern) context.getBuildStack().peek();
 
         final Collect collect = new Collect( sourcePattern,
                                              resultPattern );

Deleted: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,38 +0,0 @@
-/*
- * Copyright 2006 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.
- */
-
-package org.drools.rule.builder;
-
-import org.drools.lang.descr.BaseDescr;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Pattern;
-
-/**
- * An interface to define classes capable of building
- * specific conditional elements.
- * 
- * @author etirelli
- */
-public interface ConditionalElementBuilder {
-
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr);    
-    
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr,
-                                    final Pattern prefixPattern);
-
-}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/Dialect.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -28,7 +28,7 @@
 
     QueryBuilder getQueryBuilder();
 
-    ConditionalElementBuilder getEvalBuilder();
+    RuleConditionBuilder getEvalBuilder();
 
     AccumulateBuilder getAccumulateBuilder();
 
@@ -42,7 +42,7 @@
 
     FromBuilder getFromBuilder();
 
-    Object getBuilder(Class clazz);
+    RuleConditionBuilder getBuilder(Class clazz);
 
     AnalysisResult analyzeExpression(final RuleBuildContext context,
                                      final BaseDescr descr,

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ForallBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -19,11 +19,11 @@
 import java.util.Iterator;
 
 import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.ForallDescr;
 import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.ForallDescr;
+import org.drools.rule.Forall;
 import org.drools.rule.Pattern;
-import org.drools.rule.ConditionalElement;
-import org.drools.rule.Forall;
+import org.drools.rule.RuleConditionElement;
 
 /**
  * @author etirelli
@@ -31,21 +31,23 @@
  */
 public class ForallBuilder
     implements
-    ConditionalElementBuilder {
+    RuleConditionBuilder {
 
-    public ConditionalElement build(final RuleBuildContext context,
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
-        return build(context, descr, null);
+        return build( context,
+                      descr,
+                      null );
     }
-    
-    public ConditionalElement build(final RuleBuildContext context,
+
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr,
                                     final Pattern prefixPattern) {
         final ForallDescr forallDescr = (ForallDescr) descr;
 
         final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
-        final Pattern basePattern = patternBuilder.build( context,
-                                                          forallDescr.getBasePattern() );
+        final Pattern basePattern = (Pattern) patternBuilder.build( context,
+                                                                    forallDescr.getBasePattern() );
 
         if ( basePattern == null ) {
             return null;
@@ -58,8 +60,8 @@
         context.getBuildStack().push( forall );
 
         for ( final Iterator it = forallDescr.getRemainingPatterns().iterator(); it.hasNext(); ) {
-            final Pattern anotherPattern = patternBuilder.build( context,
-                                                                 (PatternDescr) it.next() );
+            final Pattern anotherPattern = (Pattern) patternBuilder.build( context,
+                                                                           (PatternDescr) it.next() );
             forall.addRemainingPattern( anotherPattern );
         }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/FromBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,14 +1,11 @@
 package org.drools.rule.builder;
 
-import org.drools.lang.descr.BaseDescr;
-import org.drools.rule.ConditionalElement;
+/**
+ * A markup interface for FromBuilders
+ * 
+ * @author etirelli
+ *
+ */
+public interface FromBuilder extends RuleConditionBuilder {
 
-public interface FromBuilder {
-
-    /**
-     * @inheritDoc
-     */
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr);
-
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/GroupElementBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -21,16 +21,14 @@
 import org.drools.RuntimeDroolsException;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.ConditionalElementDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.QueryDescr;
-import org.drools.rule.Pattern;
-import org.drools.rule.ConditionalElement;
 import org.drools.rule.GroupElement;
 import org.drools.rule.GroupElementFactory;
+import org.drools.rule.Pattern;
+import org.drools.rule.RuleConditionElement;
 
 /**
  * @author etirelli
@@ -38,21 +36,23 @@
  */
 public class GroupElementBuilder
     implements
-    ConditionalElementBuilder {
-    
-    public ConditionalElement build(final RuleBuildContext context,
+    RuleConditionBuilder {
+
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
-        return build(context, descr, null);
+        return build( context,
+                      descr,
+                      null );
     }
-    
-    public ConditionalElement build(final RuleBuildContext context,
+
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr,
                                     final Pattern prefixPattern) {
         final ConditionalElementDescr cedescr = (ConditionalElementDescr) descr;
 
         final GroupElement ge = newGroupElementFor( cedescr.getClass() );
-        context.getBuildStack().push( ge );        
-        
+        context.getBuildStack().push( ge );
+
         if ( prefixPattern != null ) {
             ge.addChild( prefixPattern );
         }
@@ -63,27 +63,16 @@
             final BaseDescr child = (BaseDescr) it.next();
 
             // gets corresponding builder
-            //final ConditionalElementBuilder cebuilder = ( ConditionalElementBuilder ) utils.getBuilder( child.getClass() );
-            final Object builder = context.getDialect().getBuilder( child.getClass() );
+            final RuleConditionBuilder builder = context.getDialect().getBuilder( child.getClass() );
 
-            if ( builder instanceof ConditionalElementBuilder ) {
-                ConditionalElementBuilder ceBuilder = (ConditionalElementBuilder) builder;
-                final ConditionalElement ce = ceBuilder.build( context,
-                                                               child );
-                if ( ce != null ) {
-                    ge.addChild( ce );
-                }
-            } else if ( builder instanceof PatternBuilder ) {
-                final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( child.getClass() );
-
-                final Pattern pattern = patternBuilder.build( context,
-                                                              (PatternDescr) child );
-                // in case there is a problem with the pattern building,
+            if ( builder != null ) {
+                final RuleConditionElement element = builder.build( context,
+                                                                    child );
+                // in case there is a problem with the building,
                 // builder will return null. Ex: ClassNotFound for the pattern type
-                if ( pattern != null ) {
-                    ge.addChild( pattern );
+                if ( element != null ) {
+                    ge.addChild( element );
                 }
-
             } else {
                 throw new RuntimeDroolsException( "BUG: no builder found for descriptor class " + child.getClass() );
             }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -54,9 +54,11 @@
 import org.drools.rule.OrCompositeRestriction;
 import org.drools.rule.OrConstraint;
 import org.drools.rule.Pattern;
+import org.drools.rule.PatternSource;
 import org.drools.rule.PredicateConstraint;
 import org.drools.rule.ReturnValueConstraint;
 import org.drools.rule.ReturnValueRestriction;
+import org.drools.rule.RuleConditionElement;
 import org.drools.rule.VariableConstraint;
 import org.drools.rule.VariableRestriction;
 import org.drools.spi.Constraint;
@@ -71,11 +73,20 @@
  * 
  * @author etirelli
  */
-public class PatternBuilder {
+public class PatternBuilder
+    implements
+    RuleConditionBuilder {
 
     public PatternBuilder() {
     }
 
+    public RuleConditionElement build(RuleBuildContext context,
+                                      BaseDescr descr) {
+        return this.build( context,
+                           descr,
+                           null );
+    }
+
     /**
      * Build a pattern for the given descriptor in the current 
      * context and using the given utils object
@@ -85,9 +96,12 @@
      * @param patternDescr
      * @return
      */
-    public Pattern build(final RuleBuildContext context,
-                         final PatternDescr patternDescr) {
+    public RuleConditionElement build(RuleBuildContext context,
+                                      BaseDescr descr,
+                                      Pattern prefixPattern) {
 
+        final PatternDescr patternDescr = (PatternDescr) descr;
+
         if ( patternDescr.getObjectType() == null || patternDescr.getObjectType().equals( "" ) ) {
             context.getErrors().add( new RuleError( context.getRule(),
                                                     patternDescr,
@@ -147,6 +161,16 @@
                              object,
                              null );
         }
+        
+        if( patternDescr.getSource() != null ) {
+            // we have a pattern source, so build it
+            RuleConditionBuilder builder = context.getDialect().getBuilder( patternDescr.getSource().getClass() );
+            
+            PatternSource source = (PatternSource) builder.build( context, patternDescr.getSource() );
+            
+            pattern.setSource( source );
+        }
+        
         // poping the pattern
         context.getBuildStack().pop();
         return pattern;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/QueryBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,8 +1,6 @@
 package org.drools.rule.builder;
 
 import org.drools.RuntimeDroolsException;
-import org.drools.base.ClassFieldExtractor;
-import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
 import org.drools.base.DroolsQuery;
 import org.drools.base.FieldFactory;
@@ -10,7 +8,6 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.base.extractors.ArrayExtractor;
 import org.drools.compiler.RuleError;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.rule.LiteralConstraint;
 import org.drools.rule.Pattern;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -44,7 +44,7 @@
     public void build(final RuleBuildContext context) {
         RuleDescr ruleDescr = context.getRuleDescr();
 
-        final ConditionalElementBuilder builder = (ConditionalElementBuilder) context.getDialect().getBuilder( ruleDescr.getLhs().getClass() );
+        final RuleConditionBuilder builder = (RuleConditionBuilder) context.getDialect().getBuilder( ruleDescr.getLhs().getClass() );
         if ( builder != null ) {
             Pattern prefixPattern = null;
             if ( context.getRuleDescr() instanceof QueryDescr ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleClassBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,6 +1,5 @@
 package org.drools.rule.builder;
 
-import org.drools.lang.descr.RuleDescr;
 
 public interface RuleClassBuilder {
 

Copied: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.java (from rev 12872, labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/ConditionalElementBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/RuleConditionBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2006 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.
+ */
+
+package org.drools.rule.builder;
+
+import org.drools.lang.descr.BaseDescr;
+import org.drools.rule.Pattern;
+import org.drools.rule.RuleConditionElement;
+
+/**
+ * An interface to define classes capable of building
+ * specific conditional elements.
+ * 
+ * @author etirelli
+ */
+public interface RuleConditionBuilder {
+
+    public RuleConditionElement build(final RuleBuildContext context,
+                                    final BaseDescr descr);    
+    
+    public RuleConditionElement build(final RuleBuildContext context,
+                                    final BaseDescr descr,
+                                    final Pattern prefixPattern);
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -16,7 +16,6 @@
 
 package org.drools.rule.builder.dialect.java;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.Iterator;
@@ -24,27 +23,20 @@
 import java.util.Map;
 import java.util.TreeSet;
 
-import org.drools.base.ClassObjectType;
 import org.drools.base.accumulators.AccumulateFunction;
 import org.drools.base.accumulators.JavaAccumulatorFunctionExecutor;
-import org.drools.base.accumulators.MVELAccumulatorFunctionExecutor;
 import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.rule.Accumulate;
-import org.drools.rule.ConditionalElement;
 import org.drools.rule.Declaration;
 import org.drools.rule.Pattern;
+import org.drools.rule.RuleConditionElement;
 import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.ConditionalElementBuilder;
 import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.dialect.java.parser.JavaLocalDeclarationDescr;
-import org.drools.rule.builder.dialect.mvel.MVELDialect;
-import org.drools.spi.Accumulator;
-import org.mvel.MVEL;
 
 /**
  * A builder for the java dialect accumulate version
@@ -53,17 +45,16 @@
  */
 public class JavaAccumulateBuilder extends AbstractJavaBuilder
     implements
-    ConditionalElementBuilder,
     AccumulateBuilder {
 
-    public ConditionalElement build(final RuleBuildContext context,
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr) {
         return build( context,
                       descr,
                       null );
     }
 
-    public ConditionalElement build(final RuleBuildContext context,
+    public RuleConditionElement build(final RuleBuildContext context,
                                     final BaseDescr descr,
                                     final Pattern prefixPattern) {
 
@@ -71,16 +62,13 @@
 
         final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
 
-        final Pattern sourcePattern = patternBuilder.build( context,
-                                                            accumDescr.getSourcePattern() );
+        final Pattern sourcePattern = (Pattern) patternBuilder.build( context,
+                                                                      accumDescr.getInputPattern() );
 
         if ( sourcePattern == null ) {
             return null;
         }
 
-        final Pattern resultPattern = patternBuilder.build( context,
-                                                            accumDescr.getResultPattern() );
-
         Accumulate accumulate = null;
 
         if ( accumDescr.isExternalFunction() ) {
@@ -110,13 +98,11 @@
                                                    sourceDeclArr,
                                                    requiredGlobals );
 
-
             AccumulateFunction function = context.getConfiguration().getAccumulateFunction( accumDescr.getFunctionIdentifier() );
 
             JavaAccumulatorFunctionExecutor accumulator = new JavaAccumulatorFunctionExecutor( function );
-            
+
             accumulate = new Accumulate( sourcePattern,
-                                         resultPattern,
                                          previousDeclarations,
                                          sourceDeclArr,
                                          accumulator );
@@ -208,22 +194,10 @@
                          "true" );
             }
 
-            String resultType = null;
-            // TODO: Need to change this... 
-            if ( resultPattern.getObjectType() instanceof ClassObjectType ) {
-                resultType = ((ClassObjectType) resultPattern.getObjectType()).getClassType().getName();
-            } else {
-                resultType = resultPattern.getObjectType().getValueType().getClassType().getName();
-            }
-
-            map.put( "resultType",
-                     resultType );
-
             map.put( "hashCode",
                      new Integer( actionCode.hashCode() ) );
 
             accumulate = new Accumulate( sourcePattern,
-                                         resultPattern,
                                          declarations,
                                          sourceDeclArr );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -11,8 +11,6 @@
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.TypeResolver;
 import org.drools.commons.jci.compilers.CompilationResult;
-import org.drools.commons.jci.compilers.EclipseJavaCompiler;
-import org.drools.commons.jci.compilers.EclipseJavaCompilerSettings;
 import org.drools.commons.jci.compilers.JavaCompiler;
 import org.drools.commons.jci.compilers.JavaCompilerFactory;
 import org.drools.commons.jci.compilers.JavaCompilerSettings;
@@ -45,7 +43,6 @@
 import org.drools.rule.Rule;
 import org.drools.rule.builder.AccumulateBuilder;
 import org.drools.rule.builder.CollectBuilder;
-import org.drools.rule.builder.ConditionalElementBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.ForallBuilder;
@@ -58,11 +55,10 @@
 import org.drools.rule.builder.ReturnValueBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
 import org.drools.rule.builder.SalienceBuilder;
-import org.drools.rule.builder.dialect.java.parser.JavaLocalDeclarationDescr;
 import org.drools.rule.builder.dialect.mvel.MVELFromBuilder;
 import org.drools.rule.builder.dialect.mvel.MVELSalienceBuilder;
-import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 
 public class JavaDialect
     implements
@@ -270,8 +266,8 @@
         return this.typeFixer;
     }
 
-    public Object getBuilder(final Class clazz) {
-        return this.builders.get( clazz );
+    public RuleConditionBuilder getBuilder(final Class clazz) {
+        return (RuleConditionBuilder) this.builders.get( clazz );
     }
 
     public PatternBuilder getPatternBuilder() {
@@ -290,7 +286,7 @@
         return this.accumulate;
     }
 
-    public ConditionalElementBuilder getEvalBuilder() {
+    public RuleConditionBuilder getEvalBuilder() {
         return this.eval;
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaEvalBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -21,13 +21,13 @@
 
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.EvalDescr;
-import org.drools.rule.ConditionalElement;
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
 import org.drools.rule.Pattern;
-import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.RuleConditionElement;
 import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleConditionBuilder;
 
 /**
  * @author etirelli
@@ -35,10 +35,10 @@
  */
 public class JavaEvalBuilder extends AbstractJavaBuilder
     implements
-    ConditionalElementBuilder {
+    RuleConditionBuilder {
 
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr) {
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr) {
         return build( context,
                       descr,
                       null );
@@ -54,9 +54,9 @@
      * 
      * @return the Eval Conditional Element
      */
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr,
-                                    final Pattern prefixPattern) {
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr,
+                                      final Pattern prefixPattern) {
         // it must be an EvalDescr
         final EvalDescr evalDescr = (EvalDescr) descr;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaLexer.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -3,10 +3,15 @@
 	package org.drools.rule.builder.dialect.java.parser;
 
 
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
+import org.antlr.runtime.BaseRecognizer;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.CommonToken;
+import org.antlr.runtime.DFA;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.Lexer;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.RecognitionException;
 
 public class JavaLexer extends Lexer {
     public static final int T29=29;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/parser/JavaParser.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,15 +1,26 @@
 // $ANTLR 3.0 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/semantics/java/parser/Java.g 2007-06-19 10:28:04
 
 	package org.drools.rule.builder.dialect.java.parser;
-	import java.util.Iterator;
+	import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Stack;
 
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
+import org.antlr.runtime.BitSet;
+import org.antlr.runtime.CommonToken;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.FailedPredicateException;
+import org.antlr.runtime.MismatchedNotSetException;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.MismatchedTokenException;
+import org.antlr.runtime.MismatchedTreeNodeException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.Parser;
+import org.antlr.runtime.ParserRuleReturnScope;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.TokenStream;
 /** A Java 1.5 grammar for ANTLR v3 derived from the spec
  *
  *  This is a very close representation of the spec; the changes

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELAccumulateBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -28,11 +28,10 @@
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.PatternDescr;
 import org.drools.rule.Accumulate;
-import org.drools.rule.ConditionalElement;
 import org.drools.rule.Declaration;
 import org.drools.rule.Pattern;
+import org.drools.rule.RuleConditionElement;
 import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.ConditionalElementBuilder;
 import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.PatternBuilder;
 import org.drools.rule.builder.RuleBuildContext;
@@ -46,36 +45,31 @@
  */
 public class MVELAccumulateBuilder
     implements
-    ConditionalElementBuilder,
     AccumulateBuilder {
 
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr) {
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr) {
         return build( context,
                       descr,
                       null );
     }
 
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr,
-                                    final Pattern prefixPattern) {
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr,
+                                      final Pattern prefixPattern) {
 
         final AccumulateDescr accumDescr = (AccumulateDescr) descr;
 
         final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
 
         // create source pattern
-        final Pattern sourcePattern = patternBuilder.build( context,
-                                                            accumDescr.getSourcePattern() );
+        final Pattern sourcePattern = (Pattern) patternBuilder.build( context,
+                                                                      accumDescr.getInputPattern() );
 
         if ( sourcePattern == null ) {
             return null;
         }
 
-        // create result pattern
-        final Pattern resultPattern = patternBuilder.build( context,
-                                                            accumDescr.getResultPattern() );
-
         final Declaration[] sourceDeclArr = (Declaration[]) sourcePattern.getOuterDeclarations().values().toArray( new Declaration[0] );
 
         final DroolsMVELFactory factory = new DroolsMVELFactory( context.getDeclarationResolver().getDeclarations(),
@@ -102,7 +96,7 @@
                                                                     ((MVELDialect) context.getDialect()).getClassImportResolverFactory().getImportedClasses() );
 
             AccumulateFunction function = context.getConfiguration().getAccumulateFunction( accumDescr.getFunctionIdentifier() );
-            
+
             accumulator = new MVELAccumulatorFunctionExecutor( factory,
                                                                expression,
                                                                function );
@@ -148,7 +142,6 @@
         }
 
         final Accumulate accumulate = new Accumulate( sourcePattern,
-                                                      resultPattern,
                                                       declarations,
                                                       sourceDeclArr,
                                                       accumulator );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -4,13 +4,10 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.drools.FactHandle;
 import org.drools.base.mvel.DroolsMVELFactory;
 import org.drools.base.mvel.DroolsMVELKnowledgeHelper;
-import org.drools.base.mvel.DroolsMVELPreviousDeclarationVariable;
 import org.drools.base.mvel.MVELConsequence;
 import org.drools.compiler.RuleError;
-import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.KnowledgeHelper;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELDialect.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -27,7 +27,6 @@
 import org.drools.lang.descr.RuleDescr;
 import org.drools.rule.Package;
 import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.ConditionalElementBuilder;
 import org.drools.rule.builder.ConsequenceBuilder;
 import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.FromBuilder;
@@ -38,6 +37,7 @@
 import org.drools.rule.builder.ReturnValueBuilder;
 import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
 import org.drools.rule.builder.SalienceBuilder;
 import org.mvel.AbstractParser;
 import org.mvel.integration.impl.ClassImportResolverFactory;
@@ -238,8 +238,8 @@
         return result;
     }
 
-    public Object getBuilder(final Class clazz) {
-        return this.builders.get( clazz );
+    public RuleConditionBuilder getBuilder(final Class clazz) {
+        return (RuleConditionBuilder) this.builders.get( clazz );
     }
 
     public Map getBuilders() {
@@ -266,7 +266,7 @@
         return this.consequence;
     }
 
-    public ConditionalElementBuilder getEvalBuilder() {
+    public RuleConditionBuilder getEvalBuilder() {
         return this.eval;
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -24,13 +24,13 @@
 import org.drools.compiler.RuleError;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.EvalDescr;
-import org.drools.rule.ConditionalElement;
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
 import org.drools.rule.Pattern;
-import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.RuleConditionElement;
 import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleConditionBuilder;
 import org.mvel.MVEL;
 
 /**
@@ -39,10 +39,10 @@
  */
 public class MVELEvalBuilder
     implements
-    ConditionalElementBuilder {
+    RuleConditionBuilder {
 
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr) {
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr) {
         return build( context,
                       descr,
                       null );
@@ -58,9 +58,9 @@
      * 
      * @return the Eval Conditional Element
      */
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr,
-                                    final Pattern prefixPattern) {
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr,
+                                      final Pattern prefixPattern) {
         // it must be an EvalDescr
         final EvalDescr evalDescr = (EvalDescr) descr;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELFromBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -24,14 +24,11 @@
 import org.drools.lang.descr.AccessorDescr;
 import org.drools.lang.descr.BaseDescr;
 import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.rule.Pattern;
-import org.drools.rule.ConditionalElement;
 import org.drools.rule.From;
-import org.drools.rule.builder.RuleBuildContext;
-import org.drools.rule.builder.PatternBuilder;
-import org.drools.rule.builder.ConditionalElementBuilder;
+import org.drools.rule.Pattern;
+import org.drools.rule.RuleConditionElement;
 import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.RuleBuildContext;
 import org.drools.spi.DataProvider;
 import org.mvel.MVEL;
 import org.mvel.integration.impl.ClassImportResolverFactory;
@@ -43,28 +40,20 @@
  */
 public class MVELFromBuilder
     implements
-    ConditionalElementBuilder,
     FromBuilder {
 
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr) {
-        return build(context, descr, null);
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr) {
+        return build( context,
+                      descr,
+                      null );
     }
-    
-    public ConditionalElement build(final RuleBuildContext context,
-                                    final BaseDescr descr,
-                                    final Pattern prefixPattern) {
+
+    public RuleConditionElement build(final RuleBuildContext context,
+                                      final BaseDescr descr,
+                                      final Pattern prefixPattern) {
         final FromDescr fromDescr = (FromDescr) descr;
 
-        final PatternBuilder patternBuilder = (PatternBuilder) context.getDialect().getBuilder( PatternDescr.class );
-
-        final Pattern pattern = patternBuilder.build( context,
-                                                      fromDescr.getReturnedPattern() );
-
-        if ( pattern == null ) {
-            return null;
-        }
-
         final AccessorDescr accessor = (AccessorDescr) fromDescr.getDataSource();
         DataProvider dataProvider = null;
         try {
@@ -90,7 +79,6 @@
             return null;
         }
 
-        return new From( pattern,
-                         dataProvider );
+        return new From( dataProvider );
     }
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -27,8 +27,8 @@
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.rule.Declaration;
 import org.drools.rule.PredicateConstraint;
+import org.drools.rule.builder.PredicateBuilder;
 import org.drools.rule.builder.RuleBuildContext;
-import org.drools.rule.builder.PredicateBuilder;
 import org.mvel.MVEL;
 
 /**

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -22,15 +22,12 @@
 import java.util.Map;
 
 import org.drools.base.mvel.DroolsMVELFactory;
-import org.drools.base.mvel.MVELPredicateExpression;
 import org.drools.base.mvel.MVELReturnValueExpression;
-import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.rule.Declaration;
-import org.drools.rule.PredicateConstraint;
 import org.drools.rule.ReturnValueRestriction;
-import org.drools.rule.builder.RuleBuildContext;
 import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.RuleBuildContext;
 import org.mvel.MVEL;
 
 /**

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -3,7 +3,6 @@
 import java.io.Serializable;
 
 import org.drools.base.mvel.DroolsMVELFactory;
-import org.drools.base.mvel.MVELConsequence;
 import org.drools.base.mvel.MVELSalienceExpression;
 import org.drools.compiler.RuleError;
 import org.drools.rule.builder.RuleBuildContext;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/AccumulateHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -73,7 +73,7 @@
 
         if ( parent.getClass().getName().equals( FromDescr.class.getName() ) ) {
             final PatternDescr result = (PatternDescr) ite.previous();
-            accumulateDescr.setResultPattern( result );
+            accumulateDescr.setInputPattern( result );
 
             final AndDescr andDescr = (AndDescr) ite.previous();
             andDescr.addDescr( accumulateDescr );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/CollectHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -75,7 +75,7 @@
 
         if ( parent.getClass().getName().equals( FromDescr.class.getName() ) ) {
             final PatternDescr resultPattern = (PatternDescr) ite.previous();
-            collectDescr.setResultPattern( resultPattern );
+            collectDescr.setInputPattern( resultPattern );
 
             final AndDescr andDescr = (AndDescr) ite.previous();
             andDescr.addDescr( collectDescr );

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/EvalHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/EvalHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/EvalHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -21,13 +21,13 @@
 import java.util.ListIterator;
 
 import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.ConditionalElementDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.ForallDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -20,9 +20,9 @@
 import java.util.LinkedList;
 import java.util.ListIterator;
 
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FromHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -73,7 +73,7 @@
         Object parent = it.previous();
 
         final PatternDescr patternDescr = (PatternDescr) parent;
-        fromDescr.setPattern( patternDescr );
+        //fromDescr.setOutputPattern( patternDescr );
         parent = it.previous();
 
         final ConditionalElementDescr parentDescr = (ConditionalElementDescr) parent;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/Handler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
 
+import java.util.Set;
+
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 
-import java.util.Set;
-
 /**
  * @author mproctor
  * 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/NotHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/NotHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/NotHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -21,13 +21,13 @@
 import java.util.ListIterator;
 
 import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.ConditionalElementDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.ForallDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PatternHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -30,7 +30,7 @@
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.PatternProcessorCeDescr;
+import org.drools.lang.descr.PatternDestinationDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -108,9 +108,9 @@
         ite.previous();
         final Object parent = ite.previous();
 
-        if ( parent instanceof PatternProcessorCeDescr ) {
-            final PatternProcessorCeDescr parentDescr = (PatternProcessorCeDescr) parent;
-            parentDescr.setSourcePattern( patternDescr );
+        if ( parent instanceof PatternDestinationDescr ) {
+            final PatternDestinationDescr parentDescr = (PatternDestinationDescr) parent;
+            parentDescr.setInputPattern( patternDescr );
         } else {
             if ( config.getChild( "from" ) == null ) { 
                 final ConditionalElementDescr parentDescr = (ConditionalElementDescr) parent;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -20,9 +20,9 @@
 import java.util.LinkedList;
 import java.util.ListIterator;
 
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/QualifiedIdentifierRestrictionHandler.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -22,11 +22,10 @@
 
 import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
-import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
-
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/XmlDumper.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -24,13 +24,12 @@
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
 import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.GlobalDescr;
 import org.drools.lang.descr.ImportDescr;
@@ -39,6 +38,7 @@
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.PackageDescrDumper;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QualifiedIdentifierRestrictionDescr;
 import org.drools.lang.descr.QueryDescr;
@@ -114,12 +114,12 @@
 
     public void visitCollectDescr(final CollectDescr descr) {
         String tmpstr = new String();
-        visitPatternDescr( descr.getResultPattern() );
+        //visitPatternDescr( descr.getOutputPattern() );
 
         this.template = this.template.substring( 0,
                                                  this.template.indexOf( "</pattern>" ) );
         tmpstr += this.template + " <from> <collect> ";
-        visitPatternDescr( descr.getSourcePattern() );
+        visitPatternDescr( descr.getInputPattern() );
         tmpstr += this.template;
         this.template = tmpstr + " </collect> </from> ";
         this.template += "</pattern>";
@@ -127,11 +127,11 @@
 
     public void visitAccumulateDescr(final AccumulateDescr descr) {
         String tmpstr = new String();
-        visit( descr.getResultPattern() );
+        //visit( descr.getOutputPattern() );
         this.template = this.template.substring( 0,
                                                  this.template.indexOf( "</pattern>" ) );
         tmpstr += this.template + " <from> <accumulate> ";
-        visit( descr.getSourcePattern() );
+        visit( descr.getInputPattern() );
         tmpstr += this.template;
 
         if ( descr.isExternalFunction() ) tmpstr += "<external-function evaluator=\"" + descr.getFunctionIdentifier() + "\" expression=\"" + descr.getExpression() + "\"/>";
@@ -143,7 +143,7 @@
 
     public void visitFromDescr(final FromDescr descr) {
         String tmpstr = new String();
-        visitPatternDescr( descr.getReturnedPattern() );
+        //visitPatternDescr( descr.getOutputPattern() );
         this.template = this.template.substring( 0,
                                                  this.template.indexOf( "</pattern>" ) );
         tmpstr += this.template + " <from> <expression> ";

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-06-27 20:04:30 UTC (rev 12897)
@@ -779,27 +779,36 @@
 	@init {
 		$d = null;
 	}
-	:	(	u=lhs_exist { $d = $u.d; }
-		|	u=lhs_not { $d = $u.d; }
-		|	u=lhs_eval { $d = $u.d; }
-		|	u=lhs_pattern { $d = $u.d; } (
-		          FROM 
-		          {
-				location.setType(Location.LOCATION_LHS_FROM);
-				location.setProperty(Location.LOCATION_FROM_CONTENT, "");
-		          }
-		          ( options { k=1; } :
-		            ( ac=accumulate_statement { $ac.d.setResultPattern((PatternDescr) $u.d); $d=$ac.d; })
-		          | ( cs=collect_statement { $cs.d.setResultPattern((PatternDescr) $u.d); $d=$cs.d; }) 
-		          | ( fm=from_statement {$fm.d.setPattern((PatternDescr) $u.d); $d=$fm.d; }) 
-		          )
-		        )?
-		|	u=lhs_forall  { $d = $u.d; }
-		|	LEFT_PAREN u=lhs_or RIGHT_PAREN { $d = $u.d; }
+	:	(	( EXISTS ) => u=lhs_exist { $d = $u.d; }
+		|	( NOT ) => u=lhs_not  { $d = $u.d; }
+		|	( EVAL ) => u=lhs_eval  { $d = $u.d; }
+		|	( FORALL ) => u=lhs_forall  { $d = $u.d; }
+		|	( LEFT_PAREN ) => LEFT_PAREN u=lhs_or RIGHT_PAREN  { $d = $u.d; }
+		|	ps=pattern_source  { $d = (BaseDescr) $ps.d; }
 		) 
 		opt_semicolon
 	;
 	
+pattern_source returns [BaseDescr d]
+	@init {
+		$d = null;
+	}
+	:	
+		u=lhs_pattern { $d = $u.d; } 
+		(
+			FROM 
+		        {
+				location.setType(Location.LOCATION_LHS_FROM);
+				location.setProperty(Location.LOCATION_FROM_CONTENT, "");
+		        }
+		        ( options { k=1; } :
+		            ( ac=accumulate_statement { ((PatternDescr)$d).setSource((PatternSourceDescr) $ac.d); })
+		          | ( cs=collect_statement { ((PatternDescr)$d).setSource((PatternSourceDescr) $cs.d); }) 
+		          | ( fm=from_statement { ((PatternDescr)$d).setSource((PatternSourceDescr) $fm.d); }) 
+		        )
+		)?
+	;
+	
 lhs_exist returns [BaseDescr d]
 	@init {
 		$d = null;
@@ -811,8 +820,8 @@
 			$d.setStartCharacter( ((CommonToken)$EXISTS).getStartIndex() );
 			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_EXISTS );
 		}
-	        ( ( LEFT_PAREN pattern=lhs_or 
-	           	{ if ( $pattern.d != null ) ((ExistsDescr)$d).addDescr( $pattern.d ); }
+	        ( ( LEFT_PAREN or=lhs_or 
+	           	{ if ( $or.d != null ) ((ExistsDescr)$d).addDescr( $or.d ); }
 	           RIGHT_PAREN 
 	                { $d.setEndCharacter( ((CommonToken)$RIGHT_PAREN).getStopIndex() ); }
 	        )    
@@ -837,8 +846,8 @@
 			$d.setStartCharacter( ((CommonToken)$NOT).getStartIndex() );
 			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION_NOT );
 		}
-		( ( LEFT_PAREN pattern=lhs_or  
-	           	{ if ( $pattern.d != null ) $d.addDescr( $pattern.d ); }
+		( ( LEFT_PAREN or=lhs_or  
+	           	{ if ( $or.d != null ) $d.addDescr( $or.d ); }
 	           RIGHT_PAREN 
 	                { $d.setEndCharacter( ((CommonToken)$RIGHT_PAREN).getStopIndex() ); }
 		  )
@@ -982,9 +991,9 @@
 			$d.setStartCharacter( ((CommonToken)$ACCUMULATE).getStartIndex() );
 			location.setType( Location.LOCATION_LHS_FROM_ACCUMULATE );
 		}	
-		LEFT_PAREN pattern=lhs_pattern COMMA? 
+		LEFT_PAREN pattern=pattern_source COMMA? 
 		{
-		        $d.setSourcePattern( (PatternDescr) $pattern.d );
+		        $d.setInputPattern( (PatternDescr) $pattern.d );
 		}
 		( ( 
 			INIT 
@@ -1042,7 +1051,9 @@
 			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
 			d.setEndCharacter( ((CommonToken)$RIGHT_PAREN).getStopIndex() );
 		} 
-	; expression_chain[FromDescr from, AccessorDescr as] 
+	; 
+	
+expression_chain[FromDescr from, AccessorDescr as] 
 	@init {
   		FieldAccessDescr fa = null;
 	    	MethodAccessDescr ma = null;	
@@ -1095,9 +1106,9 @@
 			$d.setStartCharacter( ((CommonToken)$COLLECT).getStartIndex() );
 			location.setType( Location.LOCATION_LHS_FROM_COLLECT );
 		}	
-		LEFT_PAREN pattern=lhs_pattern RIGHT_PAREN
+		LEFT_PAREN pattern=pattern_source RIGHT_PAREN
 		{
-		        $d.setSourcePattern( (PatternDescr)$pattern.d );
+		        $d.setInputPattern( (PatternDescr) $pattern.d );
 			$d.setEndCharacter( ((CommonToken)$RIGHT_PAREN).getStopIndex() );
 			location.setType( Location.LOCATION_LHS_BEGIN_OF_CONDITION );
 		}
@@ -1313,17 +1324,21 @@
 	
 
 or_restr_connective[ RestrictionConnectiveDescr base ]
+	options { 
+		backtrack=true;
+	}
 	@init {
 		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
 	}
 	:
 		and_restr_connective[or] 
-		(	options {backtrack=true;}
-		:	DOUBLE_PIPE 
+		( 
+			options {backtrack=true;}
+			: DOUBLE_PIPE 
 			{
 				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
 			}
-		  and_restr_connective[or] 
+			and_restr_connective[or] 
 		)*
 	;
 	finally {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/client/modeldriven/SuggestionCompletionTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -3,10 +3,10 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import junit.framework.TestCase;
+
 import org.drools.brms.server.rules.SuggestionCompletionLoader;
 
-import junit.framework.TestCase;
-
 public class SuggestionCompletionTest extends TestCase {
     
     public void testNestedImports() {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/ActionFieldValueTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/ActionFieldValueTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/ActionFieldValueTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,10 +1,10 @@
 package org.drools.brms.modeldriven;
 
+import junit.framework.TestCase;
+
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
 import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
 
-import junit.framework.TestCase;
-
 public class ActionFieldValueTest extends TestCase {
 
     public void testFormula() {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/CompositeFieldConstraintTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/CompositeFieldConstraintTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/CompositeFieldConstraintTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,11 +1,10 @@
 package org.drools.brms.modeldriven;
 
+import junit.framework.TestCase;
+
 import org.drools.brms.client.modeldriven.brxml.CompositeFieldConstraint;
-import org.drools.brms.client.modeldriven.brxml.FactPattern;
 import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 
-import junit.framework.TestCase;
-
 public class CompositeFieldConstraintTest extends TestCase {
 
     public void testCompositeType() {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DSLSentenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DSLSentenceTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/DSLSentenceTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,9 +1,9 @@
 package org.drools.brms.modeldriven;
 
+import junit.framework.TestCase;
+
 import org.drools.brms.client.modeldriven.brxml.DSLSentence;
 
-import junit.framework.TestCase;
-
 public class DSLSentenceTest extends TestCase {
 
     public void testSentence() {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/FactPatternTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/FactPatternTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/FactPatternTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -3,8 +3,8 @@
 import junit.framework.TestCase;
 
 import org.drools.brms.client.modeldriven.brxml.CompositeFieldConstraint;
+import org.drools.brms.client.modeldriven.brxml.FactPattern;
 import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
-import org.drools.brms.client.modeldriven.brxml.FactPattern;
 
 public class FactPatternTest extends TestCase {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/RuleModelTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/RuleModelTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/modeldriven/RuleModelTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -9,13 +9,13 @@
 import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
 import org.drools.brms.client.modeldriven.brxml.CompositeFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.ConnectiveConstraint;
-import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.FactPattern;
 import org.drools.brms.client.modeldriven.brxml.IAction;
+import org.drools.brms.client.modeldriven.brxml.IPattern;
 import org.drools.brms.client.modeldriven.brxml.ISingleFieldConstraint;
-import org.drools.brms.client.modeldriven.brxml.IPattern;
 import org.drools.brms.client.modeldriven.brxml.RuleAttribute;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 
 import com.thoughtworks.xstream.XStream;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/rules/SuggestionCompletionLoaderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,13 +1,11 @@
 package org.drools.brms.server.rules;
 
 import java.util.ArrayList;
-import java.util.Collection;
 
-import org.drools.Person;
-import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-
 import junit.framework.TestCase;
 
+import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+
 public class SuggestionCompletionLoaderTest extends TestCase {    
 
     public void testSuggestionCompLoader() throws Exception {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRDRLPersistenceTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -3,20 +3,20 @@
 import junit.framework.TestCase;
 
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
+import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
 import org.drools.brms.client.modeldriven.brxml.ActionInsertFact;
-import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
 import org.drools.brms.client.modeldriven.brxml.ActionInsertLogicalFact;
+import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
 import org.drools.brms.client.modeldriven.brxml.ActionUpdateField;
-import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
 import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
 import org.drools.brms.client.modeldriven.brxml.CompositeFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.ConnectiveConstraint;
-import org.drools.brms.client.modeldriven.brxml.ISingleFieldConstraint;
-import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.DSLSentence;
 import org.drools.brms.client.modeldriven.brxml.FactPattern;
+import org.drools.brms.client.modeldriven.brxml.ISingleFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.RuleAttribute;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
+import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 
 public class BRDRLPersistenceTest extends TestCase {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRXMLPersitenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRXMLPersitenceTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/brms/server/util/BRXMLPersitenceTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -3,26 +3,23 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
 
 import junit.framework.TestCase;
 
 import org.drools.brms.client.modeldriven.SuggestionCompletionEngine;
-import org.drools.brms.client.modeldriven.brxml.ActionInsertFact;
 import org.drools.brms.client.modeldriven.brxml.ActionFieldValue;
-import org.drools.brms.client.modeldriven.brxml.ActionUpdateField;
+import org.drools.brms.client.modeldriven.brxml.ActionInsertFact;
 import org.drools.brms.client.modeldriven.brxml.ActionRetractFact;
+import org.drools.brms.client.modeldriven.brxml.ActionUpdateField;
 import org.drools.brms.client.modeldriven.brxml.CompositeFactPattern;
 import org.drools.brms.client.modeldriven.brxml.CompositeFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.ConnectiveConstraint;
-import org.drools.brms.client.modeldriven.brxml.ISingleFieldConstraint;
-import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.DSLSentence;
 import org.drools.brms.client.modeldriven.brxml.FactPattern;
+import org.drools.brms.client.modeldriven.brxml.ISingleFieldConstraint;
 import org.drools.brms.client.modeldriven.brxml.RuleAttribute;
 import org.drools.brms.client.modeldriven.brxml.RuleModel;
-import org.drools.lang.DRLParser;
+import org.drools.brms.client.modeldriven.brxml.SingleFieldConstraint;
 
 public class BRXMLPersitenceTest extends TestCase {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -35,7 +35,6 @@
 import org.drools.DroolsTestCase;
 import org.drools.FactHandle;
 import org.drools.Primitives;
-import org.drools.QueryResult;
 import org.drools.QueryResults;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
@@ -53,7 +52,6 @@
 import org.drools.facttemplates.Fact;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.ConditionalElementDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
@@ -66,18 +64,19 @@
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
 import org.drools.reteoo.ReteooRuleBase;
-import org.drools.rule.Pattern;
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
 import org.drools.rule.GroupElement;
 import org.drools.rule.LiteralConstraint;
 import org.drools.rule.Package;
+import org.drools.rule.Pattern;
 import org.drools.rule.PredicateConstraint;
 import org.drools.rule.ReturnValueConstraint;
 import org.drools.rule.Rule;
@@ -87,7 +86,6 @@
 import org.drools.spi.Activation;
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.CompiledInvoker;
-import org.drools.spi.KnowledgeHelper;
 import org.drools.spi.PropagationContext;
 import org.drools.spi.Tuple;
 import org.drools.util.LinkedList;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/AccumulateTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -4,29 +4,25 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
 import org.drools.Cheese;
 import org.drools.Cheesery;
 import org.drools.FactHandle;
 import org.drools.Person;
-import org.drools.PersonInterface;
 import org.drools.RuleBase;
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleBaseFactory;
-import org.drools.State;
 import org.drools.WorkingMemory;
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.Package;
-import org.drools.rule.Rule;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
 public class AccumulateTest extends TestCase {
     protected RuleBase getRuleBase() throws Exception {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/DslTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -6,6 +6,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.framework.TestCase;
+
 import org.drools.Cheese;
 import org.drools.Person;
 import org.drools.RuleBase;
@@ -15,8 +17,6 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.rule.Package;
 
-import junit.framework.TestCase;
-
 public class DslTest extends TestCase {
     protected RuleBase getRuleBase() throws Exception {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -6,6 +6,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
 import org.drools.Cheese;
 import org.drools.FactHandle;
 import org.drools.Person;
@@ -33,9 +36,6 @@
 import org.drools.spi.ActivationGroup;
 import org.drools.spi.AgendaGroup;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
 public class ExecutionFlowControlTest extends TestCase {
     protected RuleBase getRuleBase() throws Exception {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/FirstOrderLogicTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -7,6 +7,9 @@
 import java.util.Collection;
 import java.util.List;
 
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
 import org.drools.Cheese;
 import org.drools.Cheesery;
 import org.drools.FactHandle;
@@ -24,9 +27,6 @@
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
 public class FirstOrderLogicTest extends TestCase {
     protected RuleBase getRuleBase() throws Exception {
 
@@ -53,21 +53,21 @@
                       results );
 
         wm.insert( new Cheese( "stilton",
-                                     10 ) );
+                               10 ) );
         wm.insert( new Cheese( "stilton",
-                                     7 ) );
+                               7 ) );
         wm.insert( new Cheese( "stilton",
-                                     8 ) );
+                               8 ) );
         wm.insert( new Cheese( "brie",
-                                     5 ) );
+                               5 ) );
         wm.insert( new Cheese( "provolone",
-                                     150 ) );
+                               150 ) );
         wm.insert( new Cheese( "provolone",
-                                     20 ) );
+                               20 ) );
         wm.insert( new Person( "Bob",
-                                     "stilton" ) );
+                               "stilton" ) );
         wm.insert( new Person( "Mark",
-                                     "provolone" ) );
+                               "provolone" ) );
 
         wm.fireAllRules();
 
@@ -120,7 +120,7 @@
         final int index = 1;
         cheese[index].setPrice( 9 );
         wm.update( cheeseHandles[index],
-                         cheese[index] );
+                   cheese[index] );
         wm.fireAllRules();
 
         Assert.assertEquals( ++fireCount,
@@ -133,7 +133,7 @@
         // ---------------- 3rd scenario
         bob.setLikes( "brie" );
         wm.update( bobHandle,
-                         bob );
+                   bob );
         wm.fireAllRules();
 
         Assert.assertEquals( fireCount,
@@ -173,7 +173,7 @@
         assertEquals( 1,
                       list.size() );
     }
-    
+
     public void testNot() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "not_rule_test.drl" ) ) );
@@ -209,8 +209,7 @@
         Assert.assertTrue( list.contains( new Integer( 7 ) ) );
         Assert.assertTrue( list.contains( new Integer( 8 ) ) );
     }
-    
-    
+
     public void testNotWithBindings() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "not_with_bindings_rule_test.drl" ) ) );
@@ -250,8 +249,8 @@
 
         assertEquals( 1,
                       list.size() );
-    }    
-    
+    }
+
     public void testExists() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "exists_rule_test.drl" ) ) );
@@ -332,7 +331,6 @@
         assertEquals( 1,
                       list.size() );
     }
-    
 
     public void testForall() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
@@ -361,21 +359,21 @@
                       list.size() );
 
         workingMemory.insert( new Cheese( bob.getLikes(),
-                                                10 ) );
+                                          10 ) );
         workingMemory.fireAllRules();
 
         assertEquals( 1,
                       list.size() );
     }
-    
+
     public void testRemoveIdentitiesSubNetwork() throws Exception {
         final PackageBuilder builder = new PackageBuilder();
         builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_removeIdentitiesSubNetwork.drl" ) ) );
         final Package pkg = builder.getPackage();
-        
+
         final RuleBaseConfiguration config = new RuleBaseConfiguration();
         config.setRemoveIdentities( true );
-        final RuleBase ruleBase = getRuleBase(config);
+        final RuleBase ruleBase = getRuleBase( config );
         ruleBase.addPackage( pkg );
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
@@ -383,45 +381,94 @@
         workingMemory.setGlobal( "results",
                                  list );
 
-        final Person bob = new Person( "bob", "stilton" );
+        final Person bob = new Person( "bob",
+                                       "stilton" );
         workingMemory.insert( bob );
 
-        final Person mark = new Person( "mark", "stilton" );
+        final Person mark = new Person( "mark",
+                                        "stilton" );
         workingMemory.insert( mark );
 
         final Cheese stilton1 = new Cheese( "stilton",
-                                           6 );
+                                            6 );
         final FactHandle stilton1Handle = workingMemory.insert( stilton1 );
         final Cheese stilton2 = new Cheese( "stilton",
-                                           7 );
+                                            7 );
         final FactHandle stilton2Handle = workingMemory.insert( stilton2 );
 
         workingMemory.fireAllRules();
         assertEquals( 0,
                       list.size() );
-        
+
         workingMemory.retract( stilton1Handle );
-        
+
         workingMemory.fireAllRules();
         assertEquals( 1,
                       list.size() );
-        assertEquals( mark, list.get( 0 ));
-        
+        assertEquals( mark,
+                      list.get( 0 ) );
+
         workingMemory.retract( stilton2Handle );
-        
+
         workingMemory.fireAllRules();
         assertEquals( 2,
                       list.size() );
-        assertEquals( bob, list.get( 1 ));
-    }    
-    
+        assertEquals( bob,
+                      list.get( 1 ) );
+    }
+
+    public void testCollectWithNestedFromWithParams() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_CollectWithNestedFrom.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+        final List results = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 results );
+
+        final Person bob = new Person( "bob",
+                                       "stilton" );
+
+        Cheesery cheesery = new Cheesery();
+        cheesery.addCheese( new Cheese( "stilton",
+                                        10 ) );
+        cheesery.addCheese( new Cheese( "brie",
+                                        20 ) );
+        cheesery.addCheese( new Cheese( "muzzarela",
+                                        8 ) );
+        cheesery.addCheese( new Cheese( "stilton",
+                                        5 ) );
+        cheesery.addCheese( new Cheese( "provolone",
+                                        1 ) );
+
+        workingMemory.insert( bob );
+        workingMemory.insert( cheesery );
+
+        workingMemory.fireAllRules();
+
+        assertEquals( 1,
+                      results.size() );
+        List cheeses = (List) results.get( 0 );
+        assertEquals( 2,
+                      cheeses.size() );
+        assertEquals( bob.getLikes(),
+                      ((Cheese) cheeses.get( 0 )).getType() );
+        assertEquals( bob.getLikes(),
+                      ((Cheese) cheeses.get( 1 )).getType() );
+
+    }
+
     private RuleBase loadRuleBase(final Reader reader) throws IOException,
                                                       DroolsParserException,
                                                       Exception {
         final DrlParser parser = new DrlParser();
         final PackageDescr packageDescr = parser.parse( reader );
         if ( parser.hasErrors() ) {
-            System.out.println(parser.getErrors());
+            System.out.println( parser.getErrors() );
             Assert.fail( "Error messages in parser, need to sort this our (or else collect error messages)" );
         }
         // pre build the package
@@ -435,5 +482,5 @@
         // load up the rulebase
         return ruleBase;
     }
-    
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MVELTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -8,6 +8,9 @@
 import java.util.HashMap;
 import java.util.List;
 
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
 import org.drools.Cheese;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
@@ -15,14 +18,10 @@
 import org.drools.compiler.DrlParser;
 import org.drools.compiler.DroolsParserException;
 import org.drools.compiler.PackageBuilder;
-import org.drools.integrationtests.helloworld.Message;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.rule.Package;
 import org.mvel.MVEL;
 
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
 public class MVELTest extends TestCase {
     public void testHelloWorld() throws Exception {                   
         // read in the source

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -21,7 +21,6 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.ObjectInput;
-import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
 import java.io.Reader;
@@ -37,7 +36,6 @@
 
 import org.acme.insurance.Driver;
 import org.acme.insurance.Policy;
-import org.drools.InsertedObject;
 import org.drools.Cell;
 import org.drools.Cheese;
 import org.drools.Cheesery;
@@ -46,6 +44,7 @@
 import org.drools.FromTestClass;
 import org.drools.Guess;
 import org.drools.IndexedNumber;
+import org.drools.InsertedObject;
 import org.drools.Order;
 import org.drools.OrderItem;
 import org.drools.Person;
@@ -79,8 +78,8 @@
 import org.drools.event.BeforeActivationFiredEvent;
 import org.drools.event.DefaultWorkingMemoryEventListener;
 import org.drools.event.ObjectInsertedEvent;
-import org.drools.event.ObjectUpdatedEvent;
 import org.drools.event.ObjectRetractedEvent;
+import org.drools.event.ObjectUpdatedEvent;
 import org.drools.event.WorkingMemoryEventListener;
 import org.drools.facttemplates.Fact;
 import org.drools.facttemplates.FactTemplate;
@@ -2924,5 +2923,4 @@
     }
     
     
-    
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -22,8 +22,8 @@
 import org.drools.compiler.PackageBuilder;
 import org.drools.event.DefaultWorkingMemoryEventListener;
 import org.drools.event.ObjectInsertedEvent;
+import org.drools.event.ObjectRetractedEvent;
 import org.drools.event.ObjectUpdatedEvent;
-import org.drools.event.ObjectRetractedEvent;
 import org.drools.event.WorkingMemoryEventListener;
 import org.drools.rule.Package;
 import org.drools.util.ObjectHashMap;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -129,7 +129,8 @@
         assertNull( rule.getLhs() );
         assertNotNull( rule.getConsequence() );
 
-        assertFalse( this.parser.getErrorMessages().toString(), this.parser.hasErrors() );
+        assertFalse( this.parser.getErrorMessages().toString(),
+                     this.parser.hasErrors() );
     }
 
     public void testKeywordCollisions() throws Exception {
@@ -472,8 +473,9 @@
 
     public void testChunkWithoutParens() throws Exception {
         String input = "( foo )";
-        paren_chunk_return ret = parse( input ).paren_chunk( );
-        final String chunk = input.substring( ((CommonToken)ret.start).getStartIndex(), ((CommonToken)ret.stop).getStopIndex()+1 );
+        paren_chunk_return ret = parse( input ).paren_chunk();
+        final String chunk = input.substring( ((CommonToken) ret.start).getStartIndex(),
+                                              ((CommonToken) ret.stop).getStopIndex() + 1 );
 
         assertEquals( "( foo )",
                       chunk );
@@ -483,8 +485,9 @@
 
     public void testChunkWithParens() throws Exception {
         String input = "(fnord())";
-        paren_chunk_return ret = parse( input ).paren_chunk( );
-        final String chunk = input.substring( ((CommonToken)ret.start).getStartIndex(), ((CommonToken)ret.stop).getStopIndex()+1 );
+        paren_chunk_return ret = parse( input ).paren_chunk();
+        final String chunk = input.substring( ((CommonToken) ret.start).getStartIndex(),
+                                              ((CommonToken) ret.stop).getStopIndex() + 1 );
 
         assertEqualsIgnoreWhitespace( "(fnord())",
                                       chunk );
@@ -494,8 +497,9 @@
 
     public void testChunkWithParensAndQuotedString() throws Exception {
         String input = "( fnord( \"cheese\" ) )";
-        paren_chunk_return ret = parse( input ).paren_chunk( );
-        final String chunk = input.substring( ((CommonToken)ret.start).getStartIndex(), ((CommonToken)ret.stop).getStopIndex()+1 );
+        paren_chunk_return ret = parse( input ).paren_chunk();
+        final String chunk = input.substring( ((CommonToken) ret.start).getStartIndex(),
+                                              ((CommonToken) ret.stop).getStopIndex() + 1 );
 
         assertEqualsIgnoreWhitespace( "( fnord( \"cheese\" ) )",
                                       chunk );
@@ -505,8 +509,9 @@
 
     public void testChunkWithRandomCharac5ters() throws Exception {
         String input = "( %*9dkj)";
-        paren_chunk_return ret = parse( input ).paren_chunk( );
-        final String chunk = input.substring( ((CommonToken)ret.start).getStartIndex(), ((CommonToken)ret.stop).getStopIndex()+1 );
+        paren_chunk_return ret = parse( input ).paren_chunk();
+        final String chunk = input.substring( ((CommonToken) ret.start).getStartIndex(),
+                                              ((CommonToken) ret.stop).getStopIndex() + 1 );
 
         assertEqualsIgnoreWhitespace( "( %*9dkj)",
                                       chunk );
@@ -537,7 +542,8 @@
     public void testSimpleMethodCallWithFrom() throws Exception {
 
         final RuleDescr rule = parseResource( "test_SimpleMethodCallWithFrom.drl" ).rule();
-        final FromDescr from = (FromDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final FromDescr from = (FromDescr) pattern.getSource();
         final AccessorDescr method = (AccessorDescr) from.getDataSource();
 
         assertFalse( this.parser.getErrorMessages().toString(),
@@ -550,7 +556,8 @@
     public void testSimpleFunctionCallWithFrom() throws Exception {
 
         final RuleDescr rule = parseResource( "test_SimpleFunctionCallWithFrom.drl" ).rule();
-        final FromDescr from = (FromDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final FromDescr from = (FromDescr) pattern.getSource();
         final AccessorDescr func = (AccessorDescr) from.getDataSource();
 
         assertFalse( this.parser.getErrorMessages().toString(),
@@ -563,7 +570,8 @@
     public void testSimpleAccessorWithFrom() throws Exception {
 
         final RuleDescr rule = parseResource( "test_SimpleAccessorWithFrom.drl" ).rule();
-        final FromDescr from = (FromDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final FromDescr from = (FromDescr) pattern.getSource();
         final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
 
         assertFalse( this.parser.getErrorMessages().toString(),
@@ -578,7 +586,8 @@
     public void testSimpleAccessorAndArgWithFrom() throws Exception {
 
         final RuleDescr rule = parseResource( "test_SimpleAccessorArgWithFrom.drl" ).rule();
-        final FromDescr from = (FromDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final FromDescr from = (FromDescr) pattern.getSource();
         final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
 
         assertFalse( this.parser.getErrorMessages().toString(),
@@ -592,7 +601,8 @@
 
     public void testComplexChainedAcessor() throws Exception {
         final RuleDescr rule = parseResource( "test_ComplexChainedCallWithFrom.drl" ).rule();
-        final FromDescr from = (FromDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final FromDescr from = (FromDescr) pattern.getSource();
         final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
 
         assertFalse( this.parser.getErrorMessages().toString(),
@@ -930,7 +940,7 @@
 
         assertFalse( this.parser.hasErrors() );
         final String rhs = (String) ((RuleDescr) this.parser.getPackageDescr().getRules().get( 0 )).getConsequence();
-        String expected = "  \t//woot\n  \tfirst\n  \t\n  \t//\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \n"; 
+        String expected = "  \t//woot\n  \tfirst\n  \t\n  \t//\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \n";
         assertEquals( expected,
                       rhs );
     }
@@ -2141,8 +2151,6 @@
         assertFalse( this.parser.hasErrors() );
     }
 
-
-
     public void testInvalidSyntax_Catches() throws Exception {
         parseResource( "invalid_syntax.drl" ).compilation_unit();
         assertTrue( this.parser.hasErrors() );
@@ -2162,7 +2170,8 @@
 
     public void testPackageAttributes() throws Exception {
         parseResource( "package_attributes.drl" ).compilation_unit();
-        assertFalse( this.parser.getErrorMessages().toString(), this.parser.hasErrors() );
+        assertFalse( this.parser.getErrorMessages().toString(),
+                     this.parser.hasErrors() );
 
         PackageDescr pkg = this.parser.getPackageDescr();
         AttributeDescr at = (AttributeDescr) pkg.getAttributes().get( 0 );
@@ -2324,7 +2333,8 @@
         assertEquals( 1,
                       rule.getLhs().getDescrs().size() );
 
-        final AccumulateDescr accum = (AccumulateDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
         assertEqualsIgnoreWhitespace( "int x = 0 ;",
                                       accum.getInitCode() );
         assertEqualsIgnoreWhitespace( "x++;",
@@ -2334,8 +2344,8 @@
                                       accum.getResultCode() );
 
         assertFalse( accum.isExternalFunction() );
-        
-        final PatternDescr pattern = (PatternDescr) accum.getSourcePattern();
+
+        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
         assertEquals( "Person",
                       pattern.getObjectType() );
     }
@@ -2354,9 +2364,10 @@
         assertEquals( 1,
                       rule.getLhs().getDescrs().size() );
 
-        final AccumulateDescr accum = (AccumulateDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
         assertEqualsIgnoreWhitespace( "$counter",
-                                      accum.getResultPattern().getIdentifier() );
+                                      outPattern.getIdentifier() );
         assertEqualsIgnoreWhitespace( "int x = 0 ;",
                                       accum.getInitCode() );
         assertEqualsIgnoreWhitespace( "x++;",
@@ -2364,7 +2375,7 @@
         assertEqualsIgnoreWhitespace( "new Integer(x)",
                                       accum.getResultCode() );
 
-        final PatternDescr pattern = (PatternDescr) accum.getSourcePattern();
+        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
         assertEquals( "Person",
                       pattern.getObjectType() );
     }
@@ -2386,9 +2397,10 @@
         assertEquals( 1,
                       rule.getLhs().getDescrs().size() );
 
-        final CollectDescr collect = (CollectDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final CollectDescr collect = (CollectDescr) outPattern.getSource();
 
-        final PatternDescr pattern = (PatternDescr) collect.getSourcePattern();
+        final PatternDescr pattern = (PatternDescr) collect.getInputPattern();
         assertEquals( "Person",
                       pattern.getObjectType() );
     }
@@ -2619,13 +2631,13 @@
                       fld.getFieldName() );
         assertEquals( 1,
                       fld.getRestrictions().size() );
-        
+
         RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fld.getRestrictions().get( 0 );
         assertEquals( RestrictionConnectiveDescr.OR,
                       or.getConnective() );
         assertEquals( 2,
                       or.getRestrictions().size() );
-        
+
         lit = (LiteralRestrictionDescr) or.getRestrictions().get( 0 );
         assertEquals( "==",
                       lit.getEvaluator() );
@@ -2732,7 +2744,7 @@
         final TokenStream tokenStream = new CommonTokenStream( lexer );
         final DRLParser parser = new DRLParser( tokenStream );
 
-        PatternDescr pattern = (PatternDescr) parser.fact(null);
+        PatternDescr pattern = (PatternDescr) parser.fact( null );
         assertFalse( parser.getErrorMessages().toString(),
                      parser.hasErrors() );
 
@@ -2753,7 +2765,7 @@
         final TokenStream tokenStream = new CommonTokenStream( lexer );
         final DRLParser parser = new DRLParser( tokenStream );
 
-        PatternDescr pattern = (PatternDescr) parser.fact(null);
+        PatternDescr pattern = (PatternDescr) parser.fact( null );
         assertFalse( parser.getErrorMessages().toString(),
                      parser.hasErrors() );
 
@@ -2777,7 +2789,7 @@
         final TokenStream tokenStream = new CommonTokenStream( lexer );
         final DRLParser parser = new DRLParser( tokenStream );
 
-        PatternDescr pattern = (PatternDescr) parser.fact(null);
+        PatternDescr pattern = (PatternDescr) parser.fact( null );
         assertFalse( parser.getErrorMessages().toString(),
                      parser.hasErrors() );
 
@@ -2840,7 +2852,7 @@
         final TokenStream tokenStream = new CommonTokenStream( lexer );
         final DRLParser parser = new DRLParser( tokenStream );
 
-        PatternDescr pattern = (PatternDescr) parser.fact(null);
+        PatternDescr pattern = (PatternDescr) parser.fact( null );
         assertFalse( parser.getErrorMessages().toString(),
                      parser.hasErrors() );
 
@@ -2904,7 +2916,7 @@
         final TokenStream tokenStream = new CommonTokenStream( lexer );
         final DRLParser parser = new DRLParser( tokenStream );
 
-        PatternDescr pattern = (PatternDescr) parser.fact(null);
+        PatternDescr pattern = (PatternDescr) parser.fact( null );
         assertFalse( parser.getErrorMessages().toString(),
                      parser.hasErrors() );
 
@@ -2979,7 +2991,7 @@
     }
 
     public void testRestrictionConnectives() throws Exception {
-        
+
         // the bellow expression must generate the following tree:
         //
         //                       AND
@@ -2998,48 +3010,47 @@
         final TokenStream tokenStream = new CommonTokenStream( lexer );
         final DRLParser parser = new DRLParser( tokenStream );
 
-        PatternDescr pattern = (PatternDescr) parser.fact(null);
+        PatternDescr pattern = (PatternDescr) parser.fact( null );
         assertFalse( parser.getErrorMessages().toString(),
                      parser.hasErrors() );
 
         assertEquals( 1,
                       pattern.getDescrs().size() );
-        
+
         OrDescr orConstr = (OrDescr) pattern.getDescrs().get( 0 );
-        
+
         assertEquals( 3,
                       orConstr.getDescrs().size() );
-        
+
         AndDescr andConstr1 = (AndDescr) orConstr.getDescrs().get( 0 );
-        
+
         FieldConstraintDescr fcd = (FieldConstraintDescr) andConstr1.getDescrs().get( 0 );
         assertEquals( "age",
                       fcd.getFieldName() );
-        RestrictionConnectiveDescr or =  (RestrictionConnectiveDescr) fcd.getRestriction().getRestrictions().get( 0 );
-        RestrictionConnectiveDescr and1 =  (RestrictionConnectiveDescr) or.getRestrictions().get( 0 );
-        RestrictionConnectiveDescr and2 =  (RestrictionConnectiveDescr) or.getRestrictions().get( 1 );
-        
+        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fcd.getRestriction().getRestrictions().get( 0 );
+        RestrictionConnectiveDescr and1 = (RestrictionConnectiveDescr) or.getRestrictions().get( 0 );
+        RestrictionConnectiveDescr and2 = (RestrictionConnectiveDescr) or.getRestrictions().get( 1 );
+
         assertEquals( ">",
                       ((LiteralRestrictionDescr) and1.getRestrictions().get( 0 )).getEvaluator() );
         assertEquals( "60",
                       ((LiteralRestrictionDescr) and1.getRestrictions().get( 0 )).getText() );
-        
+
         assertEquals( "<",
                       ((LiteralRestrictionDescr) and1.getRestrictions().get( 1 )).getEvaluator() );
         assertEquals( "70",
                       ((LiteralRestrictionDescr) and1.getRestrictions().get( 1 )).getText() );
-        
+
         assertEquals( ">",
                       ((LiteralRestrictionDescr) and2.getRestrictions().get( 0 )).getEvaluator() );
         assertEquals( "50",
                       ((LiteralRestrictionDescr) and2.getRestrictions().get( 0 )).getText() );
-        
+
         assertEquals( "<",
                       ((LiteralRestrictionDescr) and2.getRestrictions().get( 1 )).getEvaluator() );
         assertEquals( "55",
                       ((LiteralRestrictionDescr) and2.getRestrictions().get( 1 )).getText() );
-        
-        
+
         fcd = (FieldConstraintDescr) andConstr1.getDescrs().get( 1 );
         assertEquals( "hair",
                       fcd.getFieldName() );
@@ -3069,8 +3080,7 @@
                       ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
         assertEquals( "pink",
                       ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        
-        
+
         AndDescr andConstr3 = (AndDescr) orConstr.getDescrs().get( 2 );
         assertEquals( 2,
                       andConstr3.getDescrs().size() );
@@ -3084,7 +3094,7 @@
                       ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
 
         OrDescr orConstr2 = (OrDescr) andConstr3.getDescrs().get( 1 );
-        
+
         fcd = (FieldConstraintDescr) orConstr2.getDescrs().get( 0 );
         assertEquals( "hair",
                       fcd.getFieldName() );
@@ -3103,7 +3113,6 @@
         assertEquals( "blue",
                       ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
 
-        
     }
 
     public void testNotContains() throws Exception {
@@ -3115,7 +3124,8 @@
         final DRLParser parser = new DRLParser( tokenStream );
         parser.setLineOffset( descrs.getLine() );
         parser.normal_lhs_block( descrs );
-        assertFalse( parser.getErrorMessages().toString(), parser.hasErrors() );
+        assertFalse( parser.getErrorMessages().toString(),
+                     parser.hasErrors() );
 
         assertEquals( 2,
                       descrs.getDescrs().size() );
@@ -3138,7 +3148,8 @@
         final DRLParser parser = new DRLParser( tokenStream );
         parser.setLineOffset( descrs.getLine() );
         parser.normal_lhs_block( descrs );
-        assertFalse( parser.getErrorMessages().toString(), parser.hasErrors() );
+        assertFalse( parser.getErrorMessages().toString(),
+                     parser.hasErrors() );
 
         assertEquals( 1,
                       descrs.getDescrs().size() );
@@ -3151,7 +3162,7 @@
         assertEquals( "[abc]*",
                       restr.getText() );
     }
-    
+
     public void testSemicolon() throws Exception {
         parseResource( "semicolon.drl" );
 
@@ -3163,11 +3174,11 @@
         final PackageDescr pkg = this.parser.getPackageDescr();
         assertEquals( "org.drools",
                       pkg.getName() );
-        assertEquals( 1, 
+        assertEquals( 1,
                       pkg.getGlobals().size() );
         assertEquals( 3,
                       pkg.getRules().size() );
-        
+
         final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 );
         assertEquals( 2,
                       rule1.getLhs().getDescrs().size() );
@@ -3194,7 +3205,7 @@
                       pkg.getName() );
         assertEquals( 1,
                       pkg.getRules().size() );
-        
+
         final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 );
         assertEquals( 1,
                       rule1.getLhs().getDescrs().size() );
@@ -3218,7 +3229,8 @@
         assertEquals( 1,
                       rule.getLhs().getDescrs().size() );
 
-        final AccumulateDescr accum = (AccumulateDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final AccumulateDescr accum = (AccumulateDescr) out.getSource();
         assertEqualsIgnoreWhitespace( "int x = 0 ;",
                                       accum.getInitCode() );
         assertEqualsIgnoreWhitespace( "x++;",
@@ -3229,7 +3241,7 @@
                                       accum.getResultCode() );
         assertFalse( accum.isExternalFunction() );
 
-        final PatternDescr pattern = (PatternDescr) accum.getSourcePattern();
+        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
         assertEquals( "Person",
                       pattern.getObjectType() );
     }
@@ -3252,18 +3264,81 @@
         assertEquals( 1,
                       rule.getLhs().getDescrs().size() );
 
-        final AccumulateDescr accum = (AccumulateDescr) rule.getLhs().getDescrs().get( 0 );
+        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final AccumulateDescr accum = (AccumulateDescr) out.getSource();
         assertEqualsIgnoreWhitespace( "$age",
                                       accum.getExpression() );
         assertEqualsIgnoreWhitespace( "average",
                                       accum.getFunctionIdentifier() );
         assertTrue( accum.isExternalFunction() );
 
-        final PatternDescr pattern = (PatternDescr) accum.getSourcePattern();
+        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
         assertEquals( "Person",
                       pattern.getObjectType() );
     }
 
+    public void testCollectWithNestedFrom() throws Exception {
+        final DRLParser parser = parseResource( "collect_with_nested_from.drl" );
+        parser.compilation_unit();
+
+        if ( parser.hasErrors() ) {
+            System.err.println( parser.getErrorMessages() );
+        }
+
+        assertFalse( parser.hasErrors() );
+
+        final PackageDescr pack = parser.getPackageDescr();
+        assertEquals( 1,
+                      pack.getRules().size() );
+        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
+        assertEquals( 1,
+                      rule.getLhs().getDescrs().size() );
+
+        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final CollectDescr collect = (CollectDescr) out.getSource();
+
+        PatternDescr person = (PatternDescr) collect.getInputPattern();
+        assertEquals( "Person",
+                      person.getObjectType() );
+
+        final CollectDescr collect2 = (CollectDescr) person.getSource();
+
+        final PatternDescr people = collect2.getInputPattern();
+        assertEquals( "People",
+                      people.getObjectType() );
+    }
+
+    public void testAccumulateWithNestedFrom() throws Exception {
+        final DRLParser parser = parseResource( "accumulate_with_nested_from.drl" );
+        parser.compilation_unit();
+
+        if ( parser.hasErrors() ) {
+            System.err.println( parser.getErrorMessages() );
+        }
+
+        assertFalse( parser.hasErrors() );
+
+        final PackageDescr pack = parser.getPackageDescr();
+        assertEquals( 1,
+                      pack.getRules().size() );
+        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
+        assertEquals( 1,
+                      rule.getLhs().getDescrs().size() );
+
+        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        final AccumulateDescr accumulate = (AccumulateDescr) out.getSource();
+
+        PatternDescr person = (PatternDescr) accumulate.getInputPattern();
+        assertEquals( "Person",
+                      person.getObjectType() );
+
+        final CollectDescr collect2 = (CollectDescr) person.getSource();
+
+        final PatternDescr people = collect2.getInputPattern();
+        assertEquals( "People",
+                      people.getObjectType() );
+    }
+
     private DRLParser parse(final String text) throws Exception {
         this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
         return this.parser;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/JavaAccumulateBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -2,6 +2,8 @@
 
 import java.util.Set;
 
+import junit.framework.TestCase;
+
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageBuilderConfiguration;
@@ -10,15 +12,10 @@
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.RuleDescr;
-import org.drools.reteoo.InitialFactHandle;
-import org.drools.reteoo.ReteTuple;
 import org.drools.rule.Accumulate;
-import org.drools.rule.ConditionalElement;
 import org.drools.rule.builder.Dialect;
 import org.drools.rule.builder.RuleBuildContext;
 
-import junit.framework.TestCase;
-
 public class JavaAccumulateBuilderTest extends TestCase {
 
     private JavaAccumulateBuilder builder;
@@ -39,11 +36,8 @@
         FieldBindingDescr price = new FieldBindingDescr( "price", "$price" );
         PatternDescr cheeseDescr = new PatternDescr( "org.drools.Cheese" );
         cheeseDescr.addConstraint( price );
-        accumDescr.setSourcePattern( cheeseDescr );
+        accumDescr.setInputPattern( cheeseDescr );
         
-        PatternDescr totalDescr = new PatternDescr( "java.lang.Integer", "$total" );
-        accumDescr.setResultPattern( totalDescr );
-        
         accumDescr.setInitCode( "int x = 0;" );
         accumDescr.setActionCode( "x += $price;" );
         accumDescr.setResultCode( "new Integer( x )" );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/KnowledgeHelperFixerTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -16,8 +16,6 @@
  * limitations under the License.
  */
 
-import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
-
 import junit.framework.TestCase;
 
 public class KnowledgeHelperFixerTest extends TestCase {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/java/RuleBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -25,7 +25,6 @@
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
-import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassTypeResolver;
 import org.drools.base.TypeResolver;
 import org.drools.compiler.DialectRegistry;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELConsequenceBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -9,9 +9,7 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
-import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
-import org.drools.base.ClassTypeResolver;
 import org.drools.base.DefaultKnowledgeHelper;
 import org.drools.common.AgendaItem;
 import org.drools.common.InternalFactHandle;
@@ -20,14 +18,11 @@
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.reteoo.ReteTuple;
-import org.drools.rule.Pattern;
 import org.drools.rule.Declaration;
 import org.drools.rule.Package;
-import org.drools.rule.builder.RuleBuildContext;
-import org.drools.rule.builder.dialect.java.JavaDialect;
-import org.drools.spi.PatternExtractor;
-import org.drools.spi.DeclarationScopeResolver;
+import org.drools.rule.Pattern;
 import org.drools.spi.ObjectType;
+import org.drools.spi.PatternExtractor;
 
 public class MVELConsequenceBuilderTest extends TestCase {
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELEvalBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -9,10 +9,8 @@
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
-import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
-import org.drools.base.ClassTypeResolver;
 import org.drools.common.InternalFactHandle;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
@@ -20,14 +18,10 @@
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.reteoo.ReteTuple;
-import org.drools.rule.Pattern;
 import org.drools.rule.Declaration;
 import org.drools.rule.EvalCondition;
 import org.drools.rule.Package;
-import org.drools.rule.builder.RuleBuildContext;
-import org.drools.rule.builder.dialect.java.JavaDialect;
-import org.drools.rule.builder.dialect.mvel.MVELEvalBuilder;
-import org.drools.spi.DeclarationScopeResolver;
+import org.drools.rule.Pattern;
 import org.drools.spi.FieldExtractor;
 
 public class MVELEvalBuilderTest extends TestCase {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzerTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELExprAnalyzerTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,12 +1,7 @@
 package org.drools.rule.builder.dialect.mvel;
 
-import java.util.List;
-import java.util.Set;
-
 import junit.framework.TestCase;
 
-import org.antlr.runtime.RecognitionException;
-
 public class MVELExprAnalyzerTest extends TestCase {
 
     private MVELExprAnalyzer analyzer;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELPredicateBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -10,10 +10,8 @@
 import org.drools.Cheese;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
-import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
-import org.drools.base.ClassTypeResolver;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.compiler.DialectRegistry;
@@ -22,15 +20,11 @@
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.reteoo.ReteTuple;
-import org.drools.rule.Pattern;
 import org.drools.rule.Declaration;
 import org.drools.rule.Package;
+import org.drools.rule.Pattern;
 import org.drools.rule.PredicateConstraint;
 import org.drools.rule.PredicateConstraint.PredicateContextEntry;
-import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
-import org.drools.rule.builder.dialect.java.JavaDialect;
-import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
-import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
 import org.drools.spi.FieldExtractor;
 
 public class MVELPredicateBuilderTest extends TestCase {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELReturnValueBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -10,10 +10,8 @@
 import org.drools.Cheese;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
-import org.drools.base.ClassFieldExtractor;
 import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
-import org.drools.base.ClassTypeResolver;
 import org.drools.base.ValueType;
 import org.drools.base.evaluators.Operator;
 import org.drools.common.InternalFactHandle;
@@ -24,17 +22,11 @@
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.reteoo.ReteTuple;
-import org.drools.rule.Pattern;
 import org.drools.rule.Declaration;
 import org.drools.rule.Package;
+import org.drools.rule.Pattern;
 import org.drools.rule.ReturnValueRestriction;
 import org.drools.rule.PredicateConstraint.PredicateContextEntry;
-import org.drools.rule.builder.RuleBuildContext;
-import org.drools.rule.builder.dialect.java.DeclarationTypeFixer;
-import org.drools.rule.builder.dialect.java.JavaDialect;
-import org.drools.rule.builder.dialect.java.JavaExprAnalyzer;
-import org.drools.rule.builder.dialect.java.KnowledgeHelperFixer;
-import org.drools.spi.DeclarationScopeResolver;
 import org.drools.spi.FieldExtractor;
 
 public class MVELReturnValueBuilderTest extends TestCase {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/rule/builder/dialect/mvel/MVELSalienceBuilderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,24 +1,15 @@
 package org.drools.rule.builder.dialect.mvel;
 
-import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 
 import junit.framework.TestCase;
 
-import org.drools.Cheese;
 import org.drools.Person;
 import org.drools.RuleBase;
 import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
-import org.drools.base.ClassFieldExtractorCache;
 import org.drools.base.ClassObjectType;
-import org.drools.base.ClassTypeResolver;
-import org.drools.base.DefaultKnowledgeHelper;
-import org.drools.base.mvel.DroolsMVELFactory;
-import org.drools.base.mvel.MVELSalienceExpression;
-import org.drools.common.AgendaItem;
 import org.drools.common.InternalFactHandle;
 import org.drools.compiler.DialectRegistry;
 import org.drools.compiler.PackageBuilder;
@@ -29,10 +20,8 @@
 import org.drools.rule.Package;
 import org.drools.rule.Pattern;
 import org.drools.rule.builder.SalienceBuilder;
-import org.drools.rule.builder.dialect.java.JavaDialect;
 import org.drools.spi.ObjectType;
 import org.drools.spi.PatternExtractor;
-import org.mvel.MVEL;
 
 public class MVELSalienceBuilderTest extends TestCase {
     public void testSimpleExpression() {        

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/XmlPackageReaderTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -58,10 +58,10 @@
         AccessorDescr accessordescriptor =  (AccessorDescr) from.getDataSource();
         assertEquals( accessordescriptor.getVariableName(), "cheesery" );
         
-        PatternDescr patterndescr = from.getReturnedPattern();
+        //PatternDescr patterndescr = from.getOutputPattern();
         
-        assertEquals( patterndescr.getObjectType(), "Cheese" );
-        assertEquals( patterndescr.getIdentifier(), "cheese" );
+//        assertEquals( patterndescr.getObjectType(), "Cheese" );
+//        assertEquals( patterndescr.getIdentifier(), "cheese" );
         
     }
 
@@ -82,14 +82,14 @@
         assertEquals( "new Integer( total ) );",
                       accumulatedescr.getResultCode() );
 
-        PatternDescr sourcePattern = accumulatedescr.getSourcePattern();
-        PatternDescr resultPattern = accumulatedescr.getResultPattern();
+        PatternDescr sourcePattern = accumulatedescr.getInputPattern();
+//        PatternDescr resultPattern = accumulatedescr.getOutputPattern();
 
         assertNotNull( sourcePattern );
-        assertNotNull( resultPattern );
+//        assertNotNull( resultPattern );
 
-        assertEquals( "Cheese",
-                      resultPattern.getObjectType() );
+//        assertEquals( "Cheese",
+//                      resultPattern.getObjectType() );
         assertEquals( "Person",
                       sourcePattern.getObjectType() );
 
@@ -159,11 +159,11 @@
 
         CollectDescr collectDescr = (CollectDescr) objectCollect;
 
-        PatternDescr sourcePattern = collectDescr.getResultPattern();
-        PatternDescr resultPattern = collectDescr.getSourcePattern();
+        //PatternDescr sourcePattern = collectDescr.getOutputPattern();
+        PatternDescr resultPattern = collectDescr.getInputPattern();
 
-        assertEquals( sourcePattern.getObjectType(),
-                      "Cheese" );
+        //assertEquals( sourcePattern.getObjectType(),
+        //              "Cheese" );
         assertEquals( resultPattern.getObjectType(),
                       "Person" );
 
@@ -180,7 +180,7 @@
         assertEquals( literalDesc.getText(),
                       "pink" );
 
-        fieldContraintObject = sourcePattern.getConstraint().getDescrs().get( 0 );
+        //fieldContraintObject = sourcePattern.getConstraint().getDescrs().get( 0 );
         assertTrue( fieldContraintObject instanceof FieldConstraintDescr );
         fieldconstraintdescr = (FieldConstraintDescr) fieldContraintObject;
         assertEquals( fieldconstraintdescr.getFieldName(),

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectWithNestedFrom.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectWithNestedFrom.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CollectWithNestedFrom.drl	2007-06-27 20:04:30 UTC (rev 12897)
@@ -0,0 +1,14 @@
+package org.drools;
+
+import java.util.ArrayList;
+ 
+global java.util.List results;
+
+rule "test collect with nested from"
+	when
+		$cheesery : Cheesery()
+	    $person : Person( $likes : likes )
+		$list : ArrayList() from collect( Cheese( type == $likes ) from $cheesery.getCheeses() )
+	then
+		results.add( $list );
+end

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_nested_from.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_nested_from.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_nested_from.drl	2007-06-27 20:04:30 UTC (rev 12897)
@@ -0,0 +1,8 @@
+rule "AccumulateParserTest"
+when
+     #bellow statement makes no sense, but is useful to test parsing recursiveness
+     $personList : ArrayList() from accumulate( Person( $age : age > 21 || < 10 ) from collect( People() from $town.getPeople() ),
+                                                max( $age ) );
+then
+end
+


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_nested_from.drl
___________________________________________________________________
Name: svn:executable
   + *

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/collect_with_nested_from.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/collect_with_nested_from.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/collect_with_nested_from.drl	2007-06-27 20:04:30 UTC (rev 12897)
@@ -0,0 +1,7 @@
+rule "CollectParserTest"
+when
+     #bellow statement makes no sense, but is useful to test parsing recursiveness
+     $personList : ArrayList() from collect( $p : Person( age > 21 || age < 10 ) from collect( People() from $town.getPeople() ) );
+then
+end
+


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/collect_with_nested_from.drl
___________________________________________________________________
Name: svn:executable
   + *

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleBetaConstraints.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -55,8 +55,16 @@
 
     public SingleBetaConstraints(final BetaNodeFieldConstraint constraint,
                                  final RuleBaseConfiguration conf) {
+        this( constraint,
+              conf,
+              false );
+    }
+
+    public SingleBetaConstraints(final BetaNodeFieldConstraint constraint,
+                                 final RuleBaseConfiguration conf,
+                                 final boolean disableIndex) {
         this.conf = conf;
-        if ( !conf.isIndexLeftBetaMemory() && !conf.isIndexRightBetaMemory() ) {
+        if ( (disableIndex) || (!conf.isIndexLeftBetaMemory() && !conf.isIndexRightBetaMemory()) ) {
             this.indexed = false;
         } else {
             final int depth = conf.getCompositeKeyDepth();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -44,6 +44,7 @@
 
     private static final long                serialVersionUID = -4081578178269297948L;
 
+    private final boolean                    unwrapRightObject;
     private final Accumulate                 accumulate;
     private final AlphaNodeFieldConstraint[] resultConstraints;
     private final BetaConstraints            resultBinder;
@@ -70,7 +71,8 @@
               new AlphaNodeFieldConstraint[0],
               EmptyBetaConstraints.getInstance(),
               EmptyBetaConstraints.getInstance(),
-              accumulate );
+              accumulate,
+              false );
     }
 
     public AccumulateNode(final int id,
@@ -79,7 +81,8 @@
                           final AlphaNodeFieldConstraint[] resultConstraints,
                           final BetaConstraints sourceBinder,
                           final BetaConstraints resultBinder,
-                          final Accumulate accumulate) {
+                          final Accumulate accumulate,
+                          final boolean unwrapRightObject ) {
         super( id,
                leftInput,
                rightInput,
@@ -87,6 +90,7 @@
         this.resultBinder = resultBinder;
         this.resultConstraints = resultConstraints;
         this.accumulate = accumulate;
+        this.unwrapRightObject = unwrapRightObject;
     }
 
     /**
@@ -133,8 +137,12 @@
                                           leftTuple );
 
         for ( FactEntry entry = (FactEntry) it.next(); entry != null; entry = (FactEntry) it.next() ) {
-            final InternalFactHandle handle = entry.getFactHandle();
+            InternalFactHandle handle = entry.getFactHandle();
             if ( this.constraints.isAllowedCachedLeft( handle.getObject() ) ) {
+                if( this.unwrapRightObject ) {
+                    // if there is a subnetwork, handle must be unwrapped
+                    handle = ((ReteTuple) handle.getObject()).getLastHandle(); 
+                }
                 this.accumulate.accumulate( accContext,
                                             leftTuple,
                                             handle,
@@ -282,7 +290,7 @@
 
     public void modifyTuple(final boolean isAssert,
                             final ReteTuple leftTuple,
-                            final InternalFactHandle handle,
+                            InternalFactHandle handle,
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory) {
 
@@ -301,6 +309,11 @@
             accresult.handle = null;
         }
 
+        if( this.unwrapRightObject ) {
+            // if there is a subnetwork, handle must be unwrapped
+            handle = ((ReteTuple) handle.getObject()).getLastHandle(); 
+        }
+        
         if ( context.getType() == PropagationContext.ASSERTION ) {
             // assertion
             if ( accresult.context == null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -46,6 +46,7 @@
     private final Collect                    collect;
     private final AlphaNodeFieldConstraint[] resultConstraints;
     private final BetaConstraints            resultsBinder;
+    private final boolean                    unwrapRightObject;
 
     /**
      * Constructor.
@@ -69,7 +70,8 @@
               new AlphaNodeFieldConstraint[0],
               EmptyBetaConstraints.getInstance(),
               EmptyBetaConstraints.getInstance(),
-              collect );
+              collect,
+              false );
     }
 
     /**
@@ -96,7 +98,8 @@
                        final AlphaNodeFieldConstraint[] resultConstraints,
                        final BetaConstraints sourceBinder,
                        final BetaConstraints resultsBinder,
-                       final Collect collect) {
+                       final Collect collect,
+                       final boolean unwrapRight ) {
         super( id,
                leftInput,
                rightInput,
@@ -104,6 +107,7 @@
         this.resultsBinder = resultsBinder;
         this.resultConstraints = resultConstraints;
         this.collect = collect;
+        this.unwrapRightObject = unwrapRight;
     }
 
     /**
@@ -141,8 +145,11 @@
                                           leftTuple );
 
         for ( FactEntry entry = (FactEntry) it.next(); entry != null; entry = (FactEntry) it.next() ) {
-            final InternalFactHandle handle = entry.getFactHandle();
+            InternalFactHandle handle = entry.getFactHandle();
             if ( this.constraints.isAllowedCachedLeft( handle.getObject() ) ) {
+                if( this.unwrapRightObject ) {
+                    handle = ((ReteTuple) handle.getObject()).getLastHandle(); 
+                }
                 result.add( handle.getObject() );
             }
         }
@@ -268,7 +275,7 @@
      * @param workingMemory
      */
     public void modifyTuple(final ReteTuple leftTuple,
-                            final InternalFactHandle handle,
+                            InternalFactHandle handle,
                             final PropagationContext context,
                             final InternalWorkingMemory workingMemory) {
 
@@ -284,6 +291,11 @@
                                              workingMemory );
             result.propagated = false;
         }
+        
+        // if there is a subnetwork, we need to unwrapp the object from inside the tuple
+        if( this.unwrapRightObject ) {
+            handle = ((ReteTuple) handle.getObject()).getLastHandle(); 
+        }
 
         if ( context.getType() == PropagationContext.ASSERTION ) {
             ((Collection) result.handle.getObject()).add( handle.getObject() );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -19,8 +19,6 @@
 import java.io.Serializable;
 
 import org.drools.RuleBaseConfiguration;
-import org.drools.base.ShadowProxy;
-import org.drools.base.ShadowProxyHelper;
 import org.drools.common.BaseNode;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/AccumulateBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -21,7 +21,10 @@
 import java.util.List;
 
 import org.drools.common.BetaConstraints;
+import org.drools.common.TupleStartEqualsConstraint;
 import org.drools.reteoo.AccumulateNode;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.RightInputAdapterNode;
 import org.drools.reteoo.TupleSource;
 import org.drools.rule.Accumulate;
 import org.drools.rule.Pattern;
@@ -45,54 +48,59 @@
                       final BuildUtils utils,
                       final RuleConditionElement rce) {
         final Accumulate accumulate = (Accumulate) rce;
+        boolean existSubNetwort = false;
 
+        final List resultBetaConstraints = context.getBetaconstraints();
+        final List resultAlphaConstraints = context.getAlphaConstraints();
+
         final Pattern sourcePattern = accumulate.getSourcePattern();
 
         // get builder for the pattern
         final ReteooComponentBuilder builder = utils.getBuilderFor( sourcePattern );
 
+        // save tuple source for later if needed
+        final TupleSource tupleSource = context.getTupleSource();
+        
         // builds the source pattern
         builder.build( context,
                        utils,
                        sourcePattern );
 
-        final Pattern pattern = accumulate.getResultPattern();
-        // adjusting target pattern offset to be the same as the source pattern
-        pattern.setOffset( context.getCurrentPatternOffset() - 1 );
+        // if object source is null, then we need to adapt tuple source into a subnetwork
+        if ( context.getObjectSource() == null ) {
 
-        final List constraints = pattern.getConstraints();
+            // attach right input adapter node to convert tuple source into an object source
+            context.setObjectSource( (ObjectSource) utils.attachNode( context,
+                                                                      new RightInputAdapterNode( context.getNextId(),
+                                                                                                 context.getTupleSource() ) ) );
 
-        final List betaConstraints = new ArrayList();
-        final List alphaConstraints = new ArrayList();
+            // restore tuple source from before the start of the sub network
+            context.setTupleSource( tupleSource );
 
-        for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
-            final Object object = it.next();
-            // Check if its a declaration
-            if ( object instanceof Declaration ) {
-                continue;
-            }
-
-            final AlphaNodeFieldConstraint fieldConstraint = (AlphaNodeFieldConstraint) object;
-            if ( fieldConstraint instanceof LiteralConstraint ) {
-                alphaConstraints.add( fieldConstraint );
-            } else {
-                utils.checkUnboundDeclarations( context,
-                                                fieldConstraint.getRequiredDeclarations() );
-                betaConstraints.add( fieldConstraint );
-            }
+            // create a tuple start equals constraint and set it in the context
+            final TupleStartEqualsConstraint constraint = TupleStartEqualsConstraint.getInstance();
+            final List betaConstraints = new ArrayList();
+            betaConstraints.add( constraint );
+            context.setBetaconstraints( betaConstraints );
+            existSubNetwort = true;
         }
-
+        
         final BetaConstraints resultsBinder = utils.createBetaNodeConstraint( context,
-                                                                              betaConstraints );
+                                                                              resultBetaConstraints,
+                                                                              false );
+        final BetaConstraints sourceBinder = utils.createBetaNodeConstraint( context,
+                                                                             context.getBetaconstraints(),
+                                                                             false );
 
         context.setTupleSource( (TupleSource) utils.attachNode( context,
                                                                 new AccumulateNode( context.getNextId(),
                                                                                     context.getTupleSource(),
                                                                                     context.getObjectSource(),
-                                                                                    (AlphaNodeFieldConstraint[]) alphaConstraints.toArray( new AlphaNodeFieldConstraint[alphaConstraints.size()] ),
-                                                                                    context.getBetaconstraints(),
+                                                                                    (AlphaNodeFieldConstraint[]) resultAlphaConstraints.toArray( new AlphaNodeFieldConstraint[resultAlphaConstraints.size()] ),
+                                                                                    sourceBinder,
                                                                                     resultsBinder,
-                                                                                    accumulate ) ) );
+                                                                                    accumulate,
+                                                                                    existSubNetwort ) ) );
         // source pattern was bound, so nulling context
         context.setObjectSource( null );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildContext.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -17,6 +17,7 @@
 package org.drools.reteoo.builder;
 
 import java.util.LinkedList;
+import java.util.List;
 import java.util.ListIterator;
 
 import org.drools.common.BetaConstraints;
@@ -48,10 +49,10 @@
     private int                       currentPatternOffset;
 
     // rule base to add rules to
-    private InternalRuleBase            rulebase;
+    private InternalRuleBase          rulebase;
 
     // working memories attached to the given rulebase
-    private InternalWorkingMemory[]     workingMemories;
+    private InternalWorkingMemory[]   workingMemories;
 
     // id generator
     private ReteooBuilder.IdGenerator idGenerator;
@@ -60,8 +61,11 @@
     private LinkedList                buildstack;
 
     // beta constraints from the last pattern attached
-    BetaConstraints                   betaconstraints;
+    private List                      betaconstraints;
 
+    // alpha constraints from the last pattern attached
+    private List                      alphaConstraints;
+
     public BuildContext(final InternalRuleBase rulebase,
                         final ReteooBuilder.IdGenerator idGenerator) {
         this.rulebase = rulebase;
@@ -91,9 +95,9 @@
         this.currentPatternOffset = currentPatternIndex;
         this.syncObjectTypesWithPatternOffset();
     }
-    
+
     public void syncObjectTypesWithPatternOffset() {
-        while( this.objectType.size() > this.currentPatternOffset ) {
+        while ( this.objectType.size() > this.currentPatternOffset ) {
             this.objectType.removeLast();
         }
     }
@@ -217,15 +221,26 @@
     /**
      * @return the betaconstraints
      */
-    public BetaConstraints getBetaconstraints() {
+    public List getBetaconstraints() {
         return this.betaconstraints;
     }
 
     /**
      * @param betaconstraints the betaconstraints to set
      */
-    public void setBetaconstraints(final BetaConstraints betaconstraints) {
+    public void setBetaconstraints(final List betaconstraints) {
         this.betaconstraints = betaconstraints;
     }
 
+    /**
+     * @return
+     */
+    public List getAlphaConstraints() {
+        return alphaConstraints;
+    }
+
+    public void setAlphaConstraints(List alphaConstraints) {
+        this.alphaConstraints = alphaConstraints;
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/BuildUtils.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -161,7 +161,8 @@
      * @return
      */
     public BetaConstraints createBetaNodeConstraint(final BuildContext context,
-                                                    final List list) {
+                                                    final List list,
+                                                    final boolean disableIndexing ) {
         BetaConstraints constraints;
         switch ( list.size() ) {
             case 0 :
@@ -169,7 +170,8 @@
                 break;
             case 1 :
                 constraints = new SingleBetaConstraints( (BetaNodeFieldConstraint) list.get( 0 ),
-                                                         context.getRuleBase().getConfiguration() );
+                                                         context.getRuleBase().getConfiguration(),
+                                                         disableIndexing );
                 break;
             case 2 :
                 constraints = new DoubleBetaConstraints( (BetaNodeFieldConstraint[]) list.toArray( new BetaNodeFieldConstraint[list.size()] ),

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/CollectBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -17,16 +17,16 @@
 package org.drools.reteoo.builder;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.drools.common.BetaConstraints;
+import org.drools.common.TupleStartEqualsConstraint;
 import org.drools.reteoo.CollectNode;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.RightInputAdapterNode;
 import org.drools.reteoo.TupleSource;
 import org.drools.rule.Collect;
 import org.drools.rule.Pattern;
-import org.drools.rule.Declaration;
-import org.drools.rule.LiteralConstraint;
 import org.drools.rule.RuleConditionElement;
 import org.drools.spi.AlphaNodeFieldConstraint;
 
@@ -45,55 +45,56 @@
                       final BuildUtils utils,
                       final RuleConditionElement rce) {
 
+        boolean existSubNetwort = false;
         final Collect collect = (Collect) rce;
 
+        final List resultBetaConstraints = context.getBetaconstraints();
+        final List resultAlphaConstraints = context.getAlphaConstraints();
+
         final Pattern sourcePattern = collect.getSourcePattern();
 
         // get builder for the pattern
         final ReteooComponentBuilder builder = utils.getBuilderFor( sourcePattern );
 
+        // save tuple source for later if needed
+        final TupleSource tupleSource = context.getTupleSource();
+        
         // builds the source pattern
         builder.build( context,
                        utils,
                        sourcePattern );
 
-        final Pattern pattern = collect.getResultPattern();
-        // adjusting target pattern offset to be the same as the source pattern
-        pattern.setOffset( context.getCurrentPatternOffset() - 1 );
+        // if object source is null, then we need to adapt tuple source into a subnetwork
+        if ( context.getObjectSource() == null ) {
 
-        final List constraints = pattern.getConstraints();
+            // attach right input adapter node to convert tuple source into an object source
+            context.setObjectSource( (ObjectSource) utils.attachNode( context,
+                                                                      new RightInputAdapterNode( context.getNextId(),
+                                                                                                 context.getTupleSource() ) ) );
 
-        final List betaConstraints = new ArrayList();
-        final List alphaConstraints = new ArrayList();
+            // restore tuple source from before the start of the sub network
+            context.setTupleSource( tupleSource );
 
-        for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
-            final Object object = it.next();
-            // Check if its a declaration
-            if ( object instanceof Declaration ) {
-                continue;
-            }
-
-            final AlphaNodeFieldConstraint fieldConstraint = (AlphaNodeFieldConstraint) object;
-            if ( fieldConstraint instanceof LiteralConstraint ) {
-                alphaConstraints.add( fieldConstraint );
-            } else {
-                utils.checkUnboundDeclarations( context,
-                                                fieldConstraint.getRequiredDeclarations() );
-                betaConstraints.add( fieldConstraint );
-            }
+            // create a tuple start equals constraint and set it in the context
+            final TupleStartEqualsConstraint constraint = TupleStartEqualsConstraint.getInstance();
+            final List betaConstraints = new ArrayList();
+            betaConstraints.add( constraint );
+            context.setBetaconstraints( betaConstraints );
+            existSubNetwort = true;
         }
-
-        final BetaConstraints resultsBinder = utils.createBetaNodeConstraint( context,
-                                                                              betaConstraints );
-
+        
+        BetaConstraints binder = utils.createBetaNodeConstraint( context, context.getBetaconstraints(), false );
+        BetaConstraints resultBinder = utils.createBetaNodeConstraint( context, resultBetaConstraints, false );
+        
         context.setTupleSource( (TupleSource) utils.attachNode( context,
                                                                 new CollectNode( context.getNextId(),
                                                                                  context.getTupleSource(),
                                                                                  context.getObjectSource(),
-                                                                                 (AlphaNodeFieldConstraint[]) alphaConstraints.toArray( new AlphaNodeFieldConstraint[alphaConstraints.size()] ),
-                                                                                 context.getBetaconstraints(),
-                                                                                 resultsBinder,
-                                                                                 collect ) ) );
+                                                                                 (AlphaNodeFieldConstraint[]) resultAlphaConstraints.toArray( new AlphaNodeFieldConstraint[resultAlphaConstraints.size()] ),
+                                                                                 binder, // source binder
+                                                                                 resultBinder,
+                                                                                 collect,
+                                                                                 existSubNetwort ) ) );
         // source pattern was bound, so nulling context
         context.setObjectSource( null );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/FromBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -16,17 +16,10 @@
 
 package org.drools.reteoo.builder;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
 import org.drools.common.BetaConstraints;
 import org.drools.reteoo.FromNode;
 import org.drools.reteoo.TupleSource;
-import org.drools.rule.Pattern;
-import org.drools.rule.Declaration;
 import org.drools.rule.From;
-import org.drools.rule.LiteralConstraint;
 import org.drools.rule.RuleConditionElement;
 import org.drools.spi.AlphaNodeFieldConstraint;
 
@@ -46,44 +39,16 @@
                       final RuleConditionElement rce) {
         final From from = (From) rce;
 
-        final Pattern pattern = from.getPattern();
-
-        // setting and incrementing pattern offset as appropriate
-        pattern.setOffset( context.getCurrentPatternOffset() );
-        context.incrementCurrentPatternOffset();
-
-        final List constraints = pattern.getConstraints();
-
-        final List betaConstraints = new ArrayList();
-        final List alphaConstraints = new ArrayList();
-
-        for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
-            final Object object = it.next();
-
-            // Check if its a declaration
-            if ( object instanceof Declaration ) {
-                continue;
-            }
-
-            final AlphaNodeFieldConstraint fieldConstraint = (AlphaNodeFieldConstraint) object;
-            if ( fieldConstraint instanceof LiteralConstraint ) {
-                alphaConstraints.add( fieldConstraint );
-            } else {
-                utils.checkUnboundDeclarations( context,
-                                                fieldConstraint.getRequiredDeclarations() );
-                betaConstraints.add( fieldConstraint );
-            }
-        }
-
-        final BetaConstraints binder = utils.createBetaNodeConstraint( context,
-                                                                       betaConstraints );
-
+        BetaConstraints betaConstraints = utils.createBetaNodeConstraint( context, context.getBetaconstraints(), true );
+        
         context.setTupleSource( (TupleSource) utils.attachNode( context,
                                                                 new FromNode( context.getNextId(),
                                                                               from.getDataProvider(),
                                                                               context.getTupleSource(),
-                                                                              (AlphaNodeFieldConstraint[]) alphaConstraints.toArray( new AlphaNodeFieldConstraint[alphaConstraints.size()] ),
-                                                                              binder ) ) );
+                                                                              (AlphaNodeFieldConstraint[]) context.getAlphaConstraints().toArray( new AlphaNodeFieldConstraint[context.getAlphaConstraints().size()] ),
+                                                                              betaConstraints ) ) );
+        context.setAlphaConstraints( null );
+        context.setBetaconstraints( null );
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/GroupElementBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -23,6 +23,7 @@
 import java.util.Map;
 
 import org.drools.RuntimeDroolsException;
+import org.drools.common.BetaConstraints;
 import org.drools.common.TupleStartEqualsConstraint;
 import org.drools.reteoo.ExistsNode;
 import org.drools.reteoo.JoinNode;
@@ -47,13 +48,13 @@
 
     public GroupElementBuilder() {
         this.geBuilders.put( GroupElement.AND,
-                        new AndBuilder() );
+                             new AndBuilder() );
         this.geBuilders.put( GroupElement.OR,
-                        new OrBuilder() );
+                             new OrBuilder() );
         this.geBuilders.put( GroupElement.NOT,
-                        new NotBuilder() );
+                             new NotBuilder() );
         this.geBuilders.put( GroupElement.EXISTS,
-                        new ExistsBuilder() );
+                             new ExistsBuilder() );
     }
 
     /**
@@ -125,11 +126,14 @@
                 // if there was a previous tuple source, then a join node is needed
                 if ( context.getObjectSource() != null && context.getTupleSource() != null ) {
                     // so, create the tuple source and clean up the constraints and object source
+                    final BetaConstraints betaConstraints = utils.createBetaNodeConstraint( context,
+                                                                                            context.getBetaconstraints(),
+                                                                                            false );
                     context.setTupleSource( (TupleSource) utils.attachNode( context,
                                                                             new JoinNode( context.getNextId(),
                                                                                           context.getTupleSource(),
                                                                                           context.getObjectSource(),
-                                                                                          context.getBetaconstraints() ) ) );
+                                                                                          betaConstraints ) ) );
                     context.setBetaconstraints( null );
                     context.setObjectSource( null );
                 }
@@ -220,11 +224,13 @@
                 final TupleStartEqualsConstraint constraint = TupleStartEqualsConstraint.getInstance();
                 final List predicates = new ArrayList();
                 predicates.add( constraint );
-                context.setBetaconstraints( utils.createBetaNodeConstraint( context,
-                                                                            predicates ) );
+                context.setBetaconstraints( predicates );
 
             }
 
+            final BetaConstraints betaConstraints = utils.createBetaNodeConstraint( context,
+                                                                                    context.getBetaconstraints(),
+                                                                                    false );
             // then attach the NOT node. It will work both as a simple not node
             // or as subnetwork join node as the context was set appropriatelly
             // in each case
@@ -232,7 +238,7 @@
                                                                     new NotNode( context.getNextId(),
                                                                                  context.getTupleSource(),
                                                                                  context.getObjectSource(),
-                                                                                 context.getBetaconstraints() ) ) );
+                                                                                 betaConstraints ) ) );
             context.setBetaconstraints( null );
             context.setObjectSource( null );
 
@@ -293,11 +299,14 @@
                 final TupleStartEqualsConstraint constraint = TupleStartEqualsConstraint.getInstance();
                 final List predicates = new ArrayList();
                 predicates.add( constraint );
-                context.setBetaconstraints( utils.createBetaNodeConstraint( context,
-                                                                            predicates ) );
+                context.setBetaconstraints( predicates );
 
             }
 
+            final BetaConstraints betaConstraints = utils.createBetaNodeConstraint( context,
+                                                                                    context.getBetaconstraints(),
+                                                                                    false );
+
             // then attach the EXISTS node. It will work both as a simple exists node
             // or as subnetwork join node as the context was set appropriatelly
             // in each case
@@ -305,7 +314,7 @@
                                                                     new ExistsNode( context.getNextId(),
                                                                                     context.getTupleSource(),
                                                                                     context.getObjectSource(),
-                                                                                    context.getBetaconstraints() ) ) );
+                                                                                    betaConstraints ) ) );
             context.setBetaconstraints( null );
             context.setObjectSource( null );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/builder/PatternBuilder.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -16,12 +16,11 @@
 
 package org.drools.reteoo.builder;
 
-import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.drools.base.ClassObjectType;
-import org.drools.common.BetaConstraints;
 import org.drools.common.InstanceNotEqualsConstraint;
 import org.drools.reteoo.AlphaNode;
 import org.drools.reteoo.ObjectSource;
@@ -29,6 +28,7 @@
 import org.drools.rule.Declaration;
 import org.drools.rule.InvalidPatternException;
 import org.drools.rule.Pattern;
+import org.drools.rule.PatternSource;
 import org.drools.rule.RuleConditionElement;
 import org.drools.spi.AlphaNodeFieldConstraint;
 import org.drools.spi.Constraint;
@@ -51,47 +51,62 @@
 
         final Pattern pattern = (Pattern) rce;
 
-        context.setBetaconstraints( this.attachPattern( context,
-                                                       utils,
-                                                       pattern ) );
+        this.attachPattern( context,
+                            utils,
+                            pattern );
 
     }
 
-    private BetaConstraints attachPattern(final BuildContext context,
-                                         final BuildUtils utils,
-                                         final Pattern pattern) throws InvalidPatternException {
+    private void attachPattern(final BuildContext context,
+                               final BuildUtils utils,
+                               final Pattern pattern) throws InvalidPatternException {
 
         // Set pattern offset to the appropriate value
         pattern.setOffset( context.getCurrentPatternOffset() );
 
         context.incrementCurrentPatternOffset();
 
-        // Attach alpha nodes
-        final List predicates = attachAlphaNodes( context,
-                                                  utils,
-                                                  pattern );
+        final List alphaConstraints = new LinkedList();
+        final List betaConstraints = new LinkedList();
 
+        this.createConstraints( context,
+                                utils,
+                                pattern,
+                                alphaConstraints,
+                                betaConstraints );
+
         // Create BetaConstraints object
-        final BetaConstraints binder = utils.createBetaNodeConstraint( context,
-                                                                       predicates );
+        context.setBetaconstraints( betaConstraints );
 
-        return binder;
+        if ( pattern.getSource() == null ) {
+            // pattern is selected from working memory, so 
+            // Attach alpha nodes
+            attachAlphaNodes( context,
+                              utils,
+                              pattern,
+                              alphaConstraints );
+
+        } else {
+            context.setAlphaConstraints( alphaConstraints );
+            
+            PatternSource source = pattern.getSource();
+
+            ReteooComponentBuilder builder = utils.getBuilderFor( source );
+
+            builder.build( context,
+                           utils,
+                           source );
+        }
     }
 
-    public List attachAlphaNodes(final BuildContext context,
-                                 final BuildUtils utils,
-                                 final Pattern pattern) throws InvalidPatternException {
+    private void createConstraints(BuildContext context,
+                                   BuildUtils utils,
+                                   Pattern pattern,
+                                   List alphaConstraints,
+                                   List betaConstraints) {
 
         final List constraints = pattern.getConstraints();
 
-        context.setObjectSource( (ObjectSource) utils.attachNode( context,
-                                                                  new ObjectTypeNode( context.getNextId(),
-                                                                                      pattern.getObjectType(),
-                                                                                      context.getRuleBase().getRete(),
-                                                                                      context.getRuleBase().getConfiguration().getAlphaNodeHashingThreshold() ) ) );
-
-        final List betaConstraints = new ArrayList();
-
         // check if cross products for identity patterns should be disabled
         checkRemoveIdentities( context,
                                pattern,
@@ -114,23 +129,39 @@
                     isAlphaConstraint = false;
                 }
             }
-                        
-            
+
             if ( isAlphaConstraint ) {
-                context.setObjectSource( (ObjectSource) utils.attachNode( context,
-                                                                          new AlphaNode( context.getNextId(),
-                                                                                         (AlphaNodeFieldConstraint) constraint,
-                                                                                         context.getObjectSource(),
-                                                                                         context.getRuleBase().getConfiguration().isAlphaMemory(),
-                                                                                         context.getRuleBase().getConfiguration().getAlphaNodeHashingThreshold() )  ) );
+                alphaConstraints.add( constraint );
             } else {
                 utils.checkUnboundDeclarations( context,
                                                 constraint.getRequiredDeclarations() );
                 betaConstraints.add( constraint );
             }
         }
+    }
 
-        return betaConstraints;
+    public void attachAlphaNodes(final BuildContext context,
+                                 final BuildUtils utils,
+                                 final Pattern pattern,
+                                 List alphaConstraints) throws InvalidPatternException {
+
+        context.setObjectSource( (ObjectSource) utils.attachNode( context,
+                                                                  new ObjectTypeNode( context.getNextId(),
+                                                                                      pattern.getObjectType(),
+                                                                                      context.getRuleBase().getRete(),
+                                                                                      context.getRuleBase().getConfiguration().getAlphaNodeHashingThreshold() ) ) );
+
+        for ( final Iterator it = alphaConstraints.iterator(); it.hasNext(); ) {
+            final AlphaNodeFieldConstraint constraint = (AlphaNodeFieldConstraint) it.next();
+
+            context.setObjectSource( (ObjectSource) utils.attachNode( context,
+                                                                      new AlphaNode( context.getNextId(),
+                                                                                     (AlphaNodeFieldConstraint) constraint,
+                                                                                     context.getObjectSource(),
+                                                                                     context.getRuleBase().getConfiguration().isAlphaMemory(),
+                                                                                     context.getRuleBase().getConfiguration().getAlphaNodeHashingThreshold() ) ) );
+        }
+
     }
 
     /**
@@ -164,6 +195,6 @@
      */
     public boolean requiresLeftActivation(final BuildUtils utils,
                                           final RuleConditionElement rce) {
-        return false;
+        return ((Pattern)rce).getSource() != null;
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -16,6 +16,7 @@
 
 package org.drools.rule;
 
+import java.util.Collections;
 import java.util.Map;
 
 import org.drools.RuntimeDroolsException;
@@ -27,46 +28,41 @@
 /**
  * A class to represent the Accumulate CE
  */
-public class Accumulate extends ConditionalElement {
+public class Accumulate extends ConditionalElement
+    implements PatternSource  
+    {
 
     private static final long serialVersionUID = 4608000398919355806L;
 
     private Accumulator       accumulator;
     private Pattern           sourcePattern;
-    private Pattern           resultPattern;
     private Declaration[]     requiredDeclarations;
     private Declaration[]     innerDeclarations;
 
-    public Accumulate(final Pattern sourcePattern,
-                      final Pattern resultPattern) {
+    public Accumulate(final Pattern sourcePattern) {
 
         this( sourcePattern,
-              resultPattern,
               new Declaration[0],
               new Declaration[0],
               null );
     }
 
     public Accumulate(final Pattern sourcePattern,
-                      final Pattern resultPattern,
                       final Declaration[] requiredDeclarations,
                       final Declaration[] innerDeclarations) {
 
         this( sourcePattern,
-              resultPattern,
               requiredDeclarations,
               innerDeclarations,
               null );
     }
 
     public Accumulate(final Pattern sourcePattern,
-                      final Pattern resultPattern,
                       final Declaration[] requiredDeclarations,
                       final Declaration[] innerDeclarations,
                       final Accumulator accumulator) {
 
         this.sourcePattern = sourcePattern;
-        this.resultPattern = resultPattern;
         this.requiredDeclarations = requiredDeclarations;
         this.innerDeclarations = innerDeclarations;
         this.accumulator = accumulator;
@@ -189,16 +185,11 @@
 
     public Object clone() {
         return new Accumulate( this.sourcePattern,
-                               this.resultPattern,
                                this.requiredDeclarations,
                                this.innerDeclarations,
                                this.accumulator );
     }
 
-    public Pattern getResultPattern() {
-        return this.resultPattern;
-    }
-
     public Pattern getSourcePattern() {
         return this.sourcePattern;
     }
@@ -208,7 +199,7 @@
     }
 
     public Map getOuterDeclarations() {
-        return this.resultPattern.getOuterDeclarations();
+        return Collections.EMPTY_MAP;
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Collect.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Collect.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Collect.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -17,6 +17,7 @@
 package org.drools.rule;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 
 import org.drools.RuntimeDroolsException;
@@ -26,12 +27,14 @@
  * @author etirelli
  *
  */
-public class Collect extends ConditionalElement {
+public class Collect extends ConditionalElement
+    implements
+    PatternSource {
 
     private static final long serialVersionUID = 6064290134136990287L;
 
-    private Pattern            sourcePattern;
-    private Pattern            resultPattern;
+    private Pattern           sourcePattern;
+    private Pattern           resultPattern;
 
     public Collect(final Pattern sourcePattern,
                    final Pattern resultPattern) {
@@ -75,7 +78,7 @@
     }
 
     public Map getOuterDeclarations() {
-        return this.resultPattern.getOuterDeclarations();
+        return Collections.EMPTY_MAP;
     }
 
     /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/From.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -1,30 +1,24 @@
 package org.drools.rule;
 
 import java.io.Serializable;
+import java.util.Collections;
 import java.util.Map;
 
 import org.drools.spi.DataProvider;
 
 public class From extends ConditionalElement
     implements
-    Serializable {
+    Serializable,
+    PatternSource {
 
     private static final long serialVersionUID = -2640290731776949513L;
 
-    private Pattern            pattern;
-
     private DataProvider      dataProvider;
 
-    public From(final Pattern pattern,
-                final DataProvider dataProvider) {
-        this.pattern = pattern;
+    public From(final DataProvider dataProvider) {
         this.dataProvider = dataProvider;
     }
 
-    public Pattern getPattern() {
-        return this.pattern;
-    }
-
     public DataProvider getDataProvider() {
         return this.dataProvider;
     }
@@ -35,18 +29,18 @@
     }
 
     public Map getInnerDeclarations() {
-        return this.pattern.getInnerDeclarations();
+        return Collections.EMPTY_MAP;
     }
 
     public Map getOuterDeclarations() {
-        return this.pattern.getOuterDeclarations();
+        return Collections.EMPTY_MAP;
     }
 
     /**
      * @inheritDoc
      */
     public Declaration resolveDeclaration(final String identifier) {
-        return (Declaration) this.pattern.getInnerDeclarations().get( identifier );
+        return null;
     }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Pattern.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Pattern.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Pattern.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -40,6 +40,7 @@
     final Declaration         declaration;
     private Map               declarations;
     private final int         index;
+    private PatternSource     source;
 
     // this is the offset of the related fact inside a tuple. i.e:
     // the position of the related fact inside the tuple; 
@@ -104,6 +105,14 @@
         return this.objectType;
     }
 
+    public PatternSource getSource() {
+        return source;
+    }
+
+    public void setSource(PatternSource source) {
+        this.source = source;
+    }
+
     public List getConstraints() {
         return Collections.unmodifiableList( this.constraints );
     }
@@ -184,6 +193,7 @@
         result = PRIME * result + this.index;
         result = PRIME * result + ((this.objectType == null) ? 0 : this.objectType.hashCode());
         result = PRIME * result + this.offset;
+        result = PRIME * result + ((this.source == null) ? 0 : this.source.hashCode());
         return result;
     }
 
@@ -220,7 +230,7 @@
         if ( this.offset != other.offset ) {
             return false;
         }
-        return true;
+        return ( this.source == null ) ? other.source == null : this.source.equals( other.source ); 
     }
 
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PatternSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PatternSource.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PatternSource.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2007 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.
+ *
+ * Created on Jun 25, 2007
+ */
+package org.drools.rule;
+
+/**
+ * A markup interface for pattern source elements
+ * 
+ * @author etirelli
+ */
+public interface PatternSource extends RuleConditionElement {
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2007-06-27 18:57:31 UTC (rev 12896)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2007-06-27 20:04:30 UTC (rev 12897)
@@ -77,7 +77,6 @@
         final Pattern resultPattern = new Pattern( 1,
                                                 resultObjType );
         this.accumulate = new Accumulate( sourcePattern,
-                                          resultPattern,
                                           new Declaration[0],
                                           new Declaration[0],
                                           this.accumulator );




More information about the jboss-svn-commits mailing list