[jboss-svn-commits] JBL Code SVN: r20351 - in labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main: java/org/drools/lang and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jun 5 23:00:24 EDT 2008


Author: porcelli
Date: 2008-06-05 23:00:23 -0400 (Thu, 05 Jun 2008)
New Revision: 20351

Added:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DroolsParserExceptionFactory.java
Modified:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g
Log:
Improvements on error messages.

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2008-06-06 02:47:12 UTC (rev 20350)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/compiler/DrlParser.java	2008-06-06 03:00:23 UTC (rev 20351)
@@ -185,9 +185,7 @@
             } else {
             	return null;
             }
-        } catch ( final RecognitionException e ) {
-            throw new DroolsParserException( e );
-        } catch ( Exception e ) {
+        }  catch ( Exception e ) {
             throw new DroolsParserException( "Unknown error while parsing. This is a bug. Please contact the Development team.", e);
         }
     }
@@ -195,10 +193,10 @@
     /** Convert the antlr exceptions to drools parser exceptions */
     private void makeErrorList(final DRLParser parser) {
         for ( final Iterator iter = parser.getErrors().iterator(); iter.hasNext(); ) {
-            final RecognitionException recogErr = (RecognitionException) iter.next();
-            final ParserError err = new ParserError( parser.createErrorMessage( recogErr ),
-                                                     recogErr.line,
-                                                     recogErr.charPositionInLine );
+            final DroolsParserException recogErr = (DroolsParserException) iter.next();
+            final ParserError err = new ParserError( recogErr.getMessage(),
+                                                     recogErr.getLineNumber(),
+                                                     recogErr.getColumn() );
             this.results.add( err );
         }
     }

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-06-06 02:47:12 UTC (rev 20350)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-06-06 03:00:23 UTC (rev 20351)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-06-05 13:52:36
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-06-05 22:50:44
 
 	package org.drools.lang;
 
@@ -159,10 +159,10 @@
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:17: ( ' ' | '\\t' | '\\f' | EOL )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:17: ( ' ' | '\\t' | '\\f' | EOL )+
             int cnt1=0;
             loop1:
             do {
@@ -194,28 +194,28 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:19: ' '
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:19: '\\t'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:19: '\\t'
             	    {
             	    match('\t'); if (failed) return ;
 
             	    }
             	    break;
             	case 3 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:19: '\\f'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:19: '\\f'
             	    {
             	    match('\f'); if (failed) return ;
 
             	    }
             	    break;
             	case 4 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:19: EOL
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:996:19: EOL
             	    {
             	    mEOL(); if (failed) return ;
 
@@ -248,10 +248,10 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1002:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -270,13 +270,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1000:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1003:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -284,14 +284,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1001:25: '\\r'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1002:25: '\\n'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1005:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -313,10 +313,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:4: ( '-' )? ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -325,7 +325,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:5: '-'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -334,7 +334,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -348,7 +348,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -379,10 +379,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -391,7 +391,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:5: '-'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -400,7 +400,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -414,7 +414,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -432,7 +432,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:26: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -446,7 +446,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:27: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -477,7 +477,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -490,19 +490,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1014:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1017:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -518,14 +518,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:15: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:32: ~ ( '\\\\' | '\"' )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -555,13 +555,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -577,14 +577,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:16: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:33: ~ ( '\\\\' | '\\'' )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -625,8 +625,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1020:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1020:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023: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();
@@ -651,7 +651,7 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1024:5: ( '\\\\' ( '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 )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:5: ( '\\\\' ( '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);
 
@@ -723,7 +723,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1022: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("1025: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;
                 }
@@ -732,13 +732,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1022: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("1025: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 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1024: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' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027: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)<='}') ) {
@@ -756,14 +756,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:9: UnicodeEscape
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:9: OctalEscape
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1032:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -780,7 +780,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -814,7 +814,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1032:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1035:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -822,31 +822,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1032:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1035:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
 
                 throw nvae;
             }
             switch (alt12) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:14: ( '0' .. '3' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:15: '0' .. '3'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:14: ( '0' .. '3' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:36: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:37: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:36: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -856,18 +856,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -877,11 +877,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1036:9: '\\\\' ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1036:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1036:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -901,8 +901,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -923,10 +923,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:2: ( ( 'true' | 'false' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:2: ( ( 'true' | 'false' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:4: ( 'true' | 'false' )
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -939,13 +939,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1045:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1048:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:5: 'true'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -953,7 +953,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:12: 'false'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -977,8 +977,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:6: ( 'null' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:8: 'null'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:6: ( 'null' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -996,8 +996,8 @@
     public final void mTHEN() throws RecognitionException {
         try {
             int _type = THEN;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:2: ( 'then' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:4: 'then'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:2: ( 'then' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:4: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1015,8 +1015,8 @@
     public final void mEND() throws RecognitionException {
         try {
             int _type = END;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:5: ( 'end' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:7: 'end'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:5: ( 'end' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:7: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1034,8 +1034,8 @@
     public final void mGRAVE_ACCENT() throws RecognitionException {
         try {
             int _type = GRAVE_ACCENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:2: ( '`' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:4: '`'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:2: ( '`' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:4: '`'
             {
             match('`'); if (failed) return ;
 
@@ -1052,8 +1052,8 @@
     public final void mSEMICOLON() throws RecognitionException {
         try {
             int _type = SEMICOLON;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:2: ( ';' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:4: ';'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:2: ( ';' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:4: ';'
             {
             match(';'); if (failed) return ;
 
@@ -1070,8 +1070,8 @@
     public final void mDOT_STAR() throws RecognitionException {
         try {
             int _type = DOT_STAR;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:2: ( '.*' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:4: '.*'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:2: ( '.*' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:4: '.*'
             {
             match(".*"); if (failed) return ;
 
@@ -1089,8 +1089,8 @@
     public final void mCOLON() throws RecognitionException {
         try {
             int _type = COLON;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1071:2: ( ':' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1071:4: ':'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:2: ( ':' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:4: ':'
             {
             match(':'); if (failed) return ;
 
@@ -1107,8 +1107,8 @@
     public final void mEQUAL() throws RecognitionException {
         try {
             int _type = EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:2: ( '==' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:4: '=='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1078:2: ( '==' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1078:4: '=='
             {
             match("=="); if (failed) return ;
 
@@ -1126,8 +1126,8 @@
     public final void mNOT_EQUAL() throws RecognitionException {
         try {
             int _type = NOT_EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1080:2: ( '!=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1080:4: '!='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:2: ( '!=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:4: '!='
             {
             match("!="); if (failed) return ;
 
@@ -1145,8 +1145,8 @@
     public final void mGREATER() throws RecognitionException {
         try {
             int _type = GREATER;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:2: ( '>' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:4: '>'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1086:2: ( '>' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1086:4: '>'
             {
             match('>'); if (failed) return ;
 
@@ -1163,8 +1163,8 @@
     public final void mGREATER_EQUAL() throws RecognitionException {
         try {
             int _type = GREATER_EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1088:2: ( '>=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1088:4: '>='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1090:2: ( '>=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1090:4: '>='
             {
             match(">="); if (failed) return ;
 
@@ -1182,8 +1182,8 @@
     public final void mLESS() throws RecognitionException {
         try {
             int _type = LESS;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1092:2: ( '<' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1092:4: '<'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:2: ( '<' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:4: '<'
             {
             match('<'); if (failed) return ;
 
@@ -1200,8 +1200,8 @@
     public final void mLESS_EQUAL() throws RecognitionException {
         try {
             int _type = LESS_EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1096:2: ( '<=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1096:4: '<='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:2: ( '<=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:4: '<='
             {
             match("<="); if (failed) return ;
 
@@ -1219,8 +1219,8 @@
     public final void mARROW() throws RecognitionException {
         try {
             int _type = ARROW;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1100:2: ( '->' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1100:4: '->'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:2: ( '->' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:4: '->'
             {
             match("->"); if (failed) return ;
 
@@ -1238,8 +1238,8 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1104:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1104:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106: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();
@@ -1252,7 +1252,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1104:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1301,8 +1301,8 @@
     public final void mLEFT_PAREN() throws RecognitionException {
         try {
             int _type = LEFT_PAREN;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1108:9: ( '(' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1108:11: '('
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1110:9: ( '(' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1110:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1319,8 +1319,8 @@
     public final void mRIGHT_PAREN() throws RecognitionException {
         try {
             int _type = RIGHT_PAREN;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:9: ( ')' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:11: ')'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:9: ( ')' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -1337,8 +1337,8 @@
     public final void mLEFT_SQUARE() throws RecognitionException {
         try {
             int _type = LEFT_SQUARE;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1116:9: ( '[' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1116:11: '['
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1118:9: ( '[' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1118:11: '['
             {
             match('['); if (failed) return ;
 
@@ -1355,8 +1355,8 @@
     public final void mRIGHT_SQUARE() throws RecognitionException {
         try {
             int _type = RIGHT_SQUARE;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120:9: ( ']' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120:11: ']'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:9: ( ']' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -1373,8 +1373,8 @@
     public final void mLEFT_CURLY() throws RecognitionException {
         try {
             int _type = LEFT_CURLY;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1124:9: ( '{' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1124:11: '{'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:9: ( '{' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -1391,8 +1391,8 @@
     public final void mRIGHT_CURLY() throws RecognitionException {
         try {
             int _type = RIGHT_CURLY;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1128:9: ( '}' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1128:11: '}'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:9: ( '}' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -1409,8 +1409,8 @@
     public final void mCOMMA() throws RecognitionException {
         try {
             int _type = COMMA;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:7: ( ',' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:9: ','
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:7: ( ',' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:9: ','
             {
             match(','); if (failed) return ;
 
@@ -1427,8 +1427,8 @@
     public final void mDOT() throws RecognitionException {
         try {
             int _type = DOT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1134:5: ( '.' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1134:7: '.'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:5: ( '.' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -1445,8 +1445,8 @@
     public final void mDOUBLE_AMPER() throws RecognitionException {
         try {
             int _type = DOUBLE_AMPER;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:2: ( '&&' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:4: '&&'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1140:2: ( '&&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1140:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -1464,8 +1464,8 @@
     public final void mDOUBLE_PIPE() throws RecognitionException {
         try {
             int _type = DOUBLE_PIPE;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1142:2: ( '||' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1142:4: '||'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1144:2: ( '||' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1144:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -1483,11 +1483,11 @@
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:4: '#' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:8: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -1506,7 +1506,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:35: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1536,12 +1536,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:4: '//' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -1560,7 +1560,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:36: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1590,12 +1590,12 @@
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -1620,7 +1620,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157:35: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1651,7 +1651,7 @@
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1161:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
             // /Users/porcelli/Documents/dev/drools/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)=='|' ) {
@@ -1925,8 +1925,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:14: ( '\\r\\n' )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:16: '\\r\\n'
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:14: ( '\\r\\n' )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-06-06 02:47:12 UTC (rev 20350)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-06-06 03:00:23 UTC (rev 20351)
@@ -1,8 +1,8 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-06-05 13:52:35
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-06-05 23:49:53
 
 	package org.drools.lang;
 	
-	import java.util.Iterator;
+	import org.drools.compiler.DroolsParserException;
 
 
 import org.antlr.runtime.*;
@@ -158,145 +158,116 @@
     public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
 
 
-    	private List errors = new ArrayList();
+    	private Stack<Map<Integer, String>> paraphrases = new Stack<Map<Integer, String>>();
+    	private List<DroolsParserException> errors = new ArrayList<DroolsParserException>();
+    	private DroolsParserExceptionFactory errorMessageFactory = new DroolsParserExceptionFactory(tokenNames, paraphrases);
     	private String source = "unknown";
-    	private int lineOffset = 0;
 
-    	private boolean validateLT(int LTNumber, String text){
-    		if (null == input) return false;
-    		if (null == input.LT(LTNumber)) return false;
-    		if (null == input.LT(LTNumber).getText()) return false;
-
+    	private boolean validateLT(int LTNumber, String text) {
+    		if (null == input)
+    			return false;
+    		if (null == input.LT(LTNumber))
+    			return false;
+    		if (null == input.LT(LTNumber).getText())
+    			return false;
+    	
     		String text2Validate = input.LT(LTNumber).getText();
     		return text2Validate.equalsIgnoreCase(text);
     	}
-
-    	private boolean validateIdentifierKey(String text){
+    	
+    	private boolean validateIdentifierKey(String text) {
     		return validateLT(1, text);
     	}
     	
-        void checkTrailingSemicolon(String text, int line) {
-        	if (text.trim().endsWith( ";" ) ) {
-        		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
-        	}
-        }
-
-        private String safeSubstring( String text, int start, int end ) {
-            return text.substring( Math.min( start, text.length() ), Math.min( Math.max( start, end ), text.length() ) );
-        }
+    	void checkTrailingSemicolon(String text, Token token) {
+    		if (text.trim().endsWith(";")) {
+    			errors.add(errorMessageFactory
+    					.createTrailingSemicolonException(((DroolsToken) token)
+    							.getLine(), ((DroolsToken) token)
+    							.getCharPositionInLine(), ((DroolsToken) token)
+    							.getStopIndex()));
+    		}
+    	}
     	
-    	private int offset(int line) {
-    		return line + lineOffset;
+    	private String safeSubstring(String text, int start, int end) {
+    		return text.substring(Math.min(start, text.length()), Math.min(Math
+    				.max(start, end), text.length()));
     	}
+    	
+    	public void reportError(RecognitionException ex) {
+    		// if we've already reported an error and have not matched a token
+    		// yet successfully, don't report any errors.
+    		if (errorRecovery) {
+    			return;
+    		}
+    		errorRecovery = true;
+    	
+    		errors.add(errorMessageFactory.createDroolsException(ex));
+    	}
+    	
+    	/** return the raw DroolsParserException errors */
+    	public List<DroolsParserException> getErrors() {
+    		return errors;
+    	}
+    	
+    	/** Return a list of pretty strings summarising the errors */
+    	public List<String> getErrorMessages() {
+    		List<String> messages = new ArrayList<String>(errors.size());
+    	
+    		for (DroolsParserException activeException : errors) {
+    			messages.add(activeException.getMessage());
+    		}
+    	
+    		return messages;
+    	}
+    	
+    	/** return true if any parser errors were accumulated */
+    	public boolean hasErrors() {
+    		return !errors.isEmpty();
+    	}
 
     	/**
-    	 * This will set the offset to record when reparsing. Normally is zero of course 
+    	 * Method that adds a paraphrase type into paraphrases stack.
+    	 * 
+    	 * @param type
+    	 *            paraphrase type
     	 */
-    	public void setLineOffset(int i) {
-    	 	this.lineOffset = i;
+    	private void pushParaphrases(int type) {
+    		Map<Integer, String> activeMap = new HashMap<Integer, String>();
+    		activeMap.put(type, "");
+    		paraphrases.push(activeMap);
     	}
-    	
-    	public void reportError(RecognitionException ex) {
-    	        // if we've already reported an error and have not matched a token
-                    // yet successfully, don't report any errors.
-                    if ( errorRecovery ) {
-                            return;
-                    }
-                    errorRecovery = true;
 
-    		ex.line = offset(ex.line); //add the offset if there is one
-    		errors.add( ex ); 
+    	/**
+    	 * Method that sets paraphrase value for a type into paraphrases stack.
+    	 * 
+    	 * @param type
+    	 *            paraphrase type
+    	 * @param value
+    	 *            paraphrase value
+    	 */
+    	private void setParaphrasesValue(int type, String value) {
+    		paraphrases.peek().put(type, value);
     	}
-         	
-     	/** return the raw RecognitionException errors */
-     	public List getErrors() {
-     		return errors;
-     	}
-     	
-     	/** Return a list of pretty strings summarising the errors */
-     	public List getErrorMessages() {
-     		List messages = new ArrayList();
-    	for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
-     	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
-     	     	}
-     	     	return messages;
-     	}
-     	
-     	/** return true if any parser errors were accumulated */
-     	public boolean hasErrors() {
-    	return ! errors.isEmpty();
-     	}
-     	
-     	/** This will take a RecognitionException, and create a sensible error message out of it */
-     	public String createErrorMessage(RecognitionException e)
-        {
-    	StringBuffer message = new StringBuffer();		
-                message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
-                if ( e instanceof MismatchedTokenException ) {
-                        MismatchedTokenException mte = (MismatchedTokenException)e;
-                        if( mte.expecting >=0 && mte.expecting < tokenNames.length ) {
-                            message.append("mismatched token: "+
-                                                           e.token+
-                                                           "; expecting type "+
-                                                           tokenNames[mte.expecting]);
-                        } else {
-                            message.append("mismatched token: "+
-                                                           e.token+
-                                                           ";");
-                        }
-                }
-                else if ( e instanceof MismatchedTreeNodeException ) {
-                        MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
-                        if( mtne.expecting >=0 && mtne.expecting < tokenNames.length ) {
-                            message.append("mismatched tree node: "+
-                                                           mtne.toString() +
-                                                           "; expecting type "+
-                                                           tokenNames[mtne.expecting]);
-                        } else {
-                            message.append("mismatched tree node: "+
-                                                           mtne.toString() +
-                                                           ";");
-                        }
-                }
-                else if ( e instanceof NoViableAltException ) {
-                        NoViableAltException nvae = (NoViableAltException)e;
-    		message.append( "Unexpected token '" + e.token.getText() + "'" );
-                        /*
-                        message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
-                                                           " state "+nvae.stateNumber+
-                                                           " (decision="+nvae.decisionNumber+
-                                                           ") no viable alt; token="+
-                                                           e.token);
-                                                           */
-                }
-                else if ( e instanceof EarlyExitException ) {
-                        EarlyExitException eee = (EarlyExitException)e;
-                        message.append("required (...)+ loop (decision="+
-                                                           eee.decisionNumber+
-                                                           ") did not match anything; token="+
-                                                           e.token);
-                }
-                else if ( e instanceof MismatchedSetException ) {
-                        MismatchedSetException mse = (MismatchedSetException)e;
-                        message.append("mismatched token '"+
-                                                           e.token+
-                                                           "' expecting set "+mse.expecting);
-                }
-                else if ( e instanceof MismatchedNotSetException ) {
-                        MismatchedNotSetException mse = (MismatchedNotSetException)e;
-                        message.append("mismatched token '"+
-                                                           e.token+
-                                                           "' expecting set "+mse.expecting);
-                }
-                else if ( e instanceof FailedPredicateException ) {
-                        FailedPredicateException fpe = (FailedPredicateException)e;
-                        message.append("rule "+fpe.ruleName+" failed predicate: {"+
-                                                           fpe.predicateText+"}?");
-                } else if (e instanceof GeneralParseException) {
-    		message.append(" " + e.getMessage());
+
+    	/**
+    	 * Helper method that creates a string from a token list.
+    	 * 
+    	 * @param tokenList
+    	 *            token list
+    	 * @return string
+    	 */
+    	private String buildStringFromTokens(List<Token> tokenList) {
+    		StringBuilder sb = new StringBuilder();
+    		if (null != tokenList) {
+    			for (Token activeToken : tokenList) {
+    				if (null != activeToken) {
+    					sb.append(activeToken.getText());
+    				}
+    			}
+    		}
+    		return sb.toString();
     	}
-               	return message.toString();
-        }
 
 
     public static class compilation_unit_return extends ParserRuleReturnScope {
@@ -305,7 +276,7 @@
     };
 
     // $ANTLR start compilation_unit
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:242:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
     public final compilation_unit_return compilation_unit() throws RecognitionException {
         compilation_unit_return retval = new compilation_unit_return();
         retval.start = input.LT(1);
@@ -323,17 +294,17 @@
         RewriteRuleSubtreeStream stream_package_statement=new RewriteRuleSubtreeStream(adaptor,"rule package_statement");
         RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: ( package_statement )? ( statement )* EOF
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:243:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:243:4: ( package_statement )? ( statement )* EOF
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: ( package_statement )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:243:4: ( package_statement )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
             if ( (LA1_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(valida!
 teIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords!
 .TEMPLATE))||((validateLT(1, "import") && validateLT(2, "function") )&
&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {
                 int LA1_1 = input.LA(2);
 
-                if ( (LA1_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(D!
 roolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {
+                if ( (LA1_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(D!
 roolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))))) {
                     int LA1_6 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
@@ -343,7 +314,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: package_statement
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:243:4: package_statement
                     {
                     pushFollow(FOLLOW_package_statement_in_compilation_unit400);
                     package_statement1=package_statement();
@@ -356,20 +327,20 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:3: ( statement )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:244:3: ( statement )*
             loop2:
             do {
                 int alt2=2;
                 int LA2_0 = input.LA(1);
 
-                if ( (LA2_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES!
 ))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
+                if ( (LA2_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(v!
 alidateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
                     alt2=1;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:3: statement
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:244:3: statement
             	    {
             	    pushFollow(FOLLOW_statement_in_compilation_unit405);
             	    statement2=statement();
@@ -401,20 +372,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 275:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            // 246:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_COMPILATION_UNIT, "VT_COMPILATION_UNIT"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:28: ( package_statement )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:28: ( package_statement )?
                 if ( stream_package_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_package_statement.next());
 
                 }
                 stream_package_statement.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:47: ( statement )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:47: ( statement )*
                 while ( stream_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_statement.next());
 
@@ -458,7 +429,7 @@
     };
 
     // $ANTLR start package_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:1: package_statement : package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:254:1: package_statement : package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) ;
     public final package_statement_return package_statement() throws RecognitionException {
         package_statement_return retval = new package_statement_return();
         retval.start = input.LT(1);
@@ -475,21 +446,22 @@
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_package_key=new RewriteRuleSubtreeStream(adaptor,"rule package_key");
         RewriteRuleSubtreeStream stream_package_id=new RewriteRuleSubtreeStream(adaptor,"rule package_id");
+         pushParaphrases(DroolsParaphareseTypes.PACKAGE); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:4: package_key package_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:4: package_key package_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_package_key_in_package_statement450);
+            pushFollow(FOLLOW_package_key_in_package_statement461);
             package_key4=package_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_package_key.add(package_key4.getTree());
-            pushFollow(FOLLOW_package_id_in_package_statement452);
+            pushFollow(FOLLOW_package_id_in_package_statement463);
             package_id5=package_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_package_id.add(package_id5.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:27: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:27: ( SEMICOLON )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -498,10 +470,10 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:27: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:27: SEMICOLON
                     {
                     SEMICOLON6=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement454); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement465); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON6);
 
 
@@ -522,9 +494,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 285:3: -> ^( package_key package_id )
+            // 258:3: -> ^( package_key package_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:6: ^( package_key package_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:258:6: ^( package_key package_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_package_key.nextNode(), root_1);
@@ -546,6 +518,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -563,32 +538,32 @@
     };
 
     // $ANTLR start package_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:1: package_id : ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:261:1: package_id : id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
     public final package_id_return package_id() throws RecognitionException {
         package_id_return retval = new package_id_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID7=null;
-        Token DOT8=null;
-        Token ID9=null;
+        Token id=null;
+        List list_id=null;
 
-        Object ID7_tree=null;
-        Object DOT8_tree=null;
-        Object ID9_tree=null;
+        Object id_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:2: ( ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:4: ID ( DOT ID )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:2: (id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:4: id+= ID (id+= DOT id+= ID )*
             {
-            ID7=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_id476); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID7);
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_package_id489); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:7: ( DOT ID )*
+            if (list_id==null) list_id=new ArrayList();
+            list_id.add(id);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:11: (id+= DOT id+= ID )*
             loop4:
             do {
                 int alt4=2;
@@ -601,17 +576,23 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:13: id+= DOT id+= ID
             	    {
-            	    DOT8=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_package_id480); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT8);
+            	    id=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_package_id495); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(id);
 
-            	    ID9=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_package_id482); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_ID.add(ID9);
+            	    if (list_id==null) list_id=new ArrayList();
+            	    list_id.add(id);
 
+            	    id=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_package_id499); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(id);
 
+            	    if (list_id==null) list_id=new ArrayList();
+            	    list_id.add(id);
+
+
             	    }
             	    break;
 
@@ -620,6 +601,9 @@
                 }
             } while (true);
 
+            if ( backtracking==0 ) {
+              	setParaphrasesValue(DroolsParaphareseTypes.PACKAGE, buildStringFromTokens(list_id));	
+            }
 
             // AST REWRITE
             // elements: ID
@@ -632,9 +616,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 290:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            // 264:3: -> ^( VT_PACKAGE_ID ( ID )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:290:6: ^( VT_PACKAGE_ID ( ID )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:264:6: ^( VT_PACKAGE_ID ( ID )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PACKAGE_ID, "VT_PACKAGE_ID"), root_1);
@@ -680,51 +664,51 @@
     };
 
     // $ANTLR start statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:267:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );
     public final statement_return statement() throws RecognitionException {
         statement_return retval = new statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        rule_attribute_return rule_attribute10 = null;
+        rule_attribute_return rule_attribute7 = null;
 
-        function_import_statement_return function_import_statement11 = null;
+        function_import_statement_return function_import_statement8 = null;
 
-        import_statement_return import_statement12 = null;
+        import_statement_return import_statement9 = null;
 
-        global_return global13 = null;
+        global_return global10 = null;
 
-        function_return function14 = null;
+        function_return function11 = null;
 
-        template_return template15 = null;
+        template_return template12 = null;
 
-        rule_return rule16 = null;
+        rule_return rule13 = null;
 
-        query_return query17 = null;
+        query_return query14 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:2: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:268:2: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query )
             int alt5=8;
             alt5 = dfa5.predict(input);
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:4: rule_attribute
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:268:4: rule_attribute
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_rule_attribute_in_statement507);
-                    rule_attribute10=rule_attribute();
+                    pushFollow(FOLLOW_rule_attribute_in_statement527);
+                    rule_attribute7=rule_attribute();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, rule_attribute10.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, rule_attribute7.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:3: {...}? => function_import_statement
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:269:3: {...}? => function_import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -732,89 +716,89 @@
                         if (backtracking>0) {failed=true; return retval;}
                         throw new FailedPredicateException(input, "statement", "(validateLT(1, \"import\") && validateLT(2, \"function\") )");
                     }
-                    pushFollow(FOLLOW_function_import_statement_in_statement514);
-                    function_import_statement11=function_import_statement();
+                    pushFollow(FOLLOW_function_import_statement_in_statement534);
+                    function_import_statement8=function_import_statement();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, function_import_statement11.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, function_import_statement8.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:4: import_statement
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:270:4: import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_import_statement_in_statement520);
-                    import_statement12=import_statement();
+                    pushFollow(FOLLOW_import_statement_in_statement540);
+                    import_statement9=import_statement();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, import_statement12.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, import_statement9.getTree());
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297:4: global
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: global
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_global_in_statement526);
-                    global13=global();
+                    pushFollow(FOLLOW_global_in_statement546);
+                    global10=global();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, global13.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, global10.getTree());
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:4: function
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: function
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_function_in_statement532);
-                    function14=function();
+                    pushFollow(FOLLOW_function_in_statement552);
+                    function11=function();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, function14.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, function11.getTree());
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:4: template
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:4: template
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_template_in_statement537);
-                    template15=template();
+                    pushFollow(FOLLOW_template_in_statement557);
+                    template12=template();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, template15.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, template12.getTree());
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:4: rule
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:4: rule
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_rule_in_statement542);
-                    rule16=rule();
+                    pushFollow(FOLLOW_rule_in_statement562);
+                    rule13=rule();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, rule16.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, rule13.getTree());
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:4: query
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:4: query
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_query_in_statement547);
-                    query17=query();
+                    pushFollow(FOLLOW_query_in_statement567);
+                    query14=query();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, query17.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, query14.getTree());
 
                     }
                     break;
@@ -843,38 +827,39 @@
     };
 
     // $ANTLR start import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:1: import_statement : import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:278:1: import_statement : import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) ;
     public final import_statement_return import_statement() throws RecognitionException {
         import_statement_return retval = new import_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token SEMICOLON20=null;
-        import_key_return import_key18 = null;
+        Token SEMICOLON17=null;
+        import_key_return import_key15 = null;
 
-        import_name_return import_name19 = null;
+        import_name_return import_name16 = null;
 
 
-        Object SEMICOLON20_tree=null;
+        Object SEMICOLON17_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_import_key=new RewriteRuleSubtreeStream(adaptor,"rule import_key");
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
+         pushParaphrases(DroolsParaphareseTypes.IMPORT); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:2: ( import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:4: import_key import_name ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:2: ( import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:4: import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_import_key_in_import_statement558);
-            import_key18=import_key();
+            pushFollow(FOLLOW_import_key_in_import_statement589);
+            import_key15=import_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_import_key.add(import_key18.getTree());
-            pushFollow(FOLLOW_import_name_in_import_statement560);
-            import_name19=import_name();
+            if ( backtracking==0 ) stream_import_key.add(import_key15.getTree());
+            pushFollow(FOLLOW_import_name_in_import_statement591);
+            import_name16=import_name(DroolsParaphareseTypes.IMPORT);
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_import_name.add(import_name19.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:27: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_import_name.add(import_name16.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:58: ( SEMICOLON )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -883,11 +868,11 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:27: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:58: SEMICOLON
                     {
-                    SEMICOLON20=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement562); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON20);
+                    SEMICOLON17=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement594); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON17);
 
 
                     }
@@ -897,7 +882,7 @@
 
 
             // AST REWRITE
-            // elements: import_key, import_name
+            // elements: import_name, import_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -907,9 +892,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 306:3: -> ^( import_key import_name )
+            // 282:3: -> ^( import_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:6: ^( import_key import_name )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:282:6: ^( import_key import_name )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_import_key.nextNode(), root_1);
@@ -931,6 +916,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -948,46 +936,47 @@
     };
 
     // $ANTLR start function_import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:1: function_import_statement : imp= import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:1: function_import_statement : imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
     public final function_import_statement_return function_import_statement() throws RecognitionException {
         function_import_statement_return retval = new function_import_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token SEMICOLON23=null;
+        Token SEMICOLON20=null;
         import_key_return imp = null;
 
-        function_key_return function_key21 = null;
+        function_key_return function_key18 = null;
 
-        import_name_return import_name22 = null;
+        import_name_return import_name19 = null;
 
 
-        Object SEMICOLON23_tree=null;
+        Object SEMICOLON20_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_import_key=new RewriteRuleSubtreeStream(adaptor,"rule import_key");
         RewriteRuleSubtreeStream stream_function_key=new RewriteRuleSubtreeStream(adaptor,"rule function_key");
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
+         pushParaphrases(DroolsParaphareseTypes.FUNCTION_IMPORT); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:2: (imp= import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:4: imp= import_key function_key import_name ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:2: (imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:4: imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_import_key_in_function_import_statement586);
+            pushFollow(FOLLOW_import_key_in_function_import_statement629);
             imp=import_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_key.add(imp.getTree());
-            pushFollow(FOLLOW_function_key_in_function_import_statement588);
-            function_key21=function_key();
+            pushFollow(FOLLOW_function_key_in_function_import_statement631);
+            function_key18=function_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_function_key.add(function_key21.getTree());
-            pushFollow(FOLLOW_import_name_in_function_import_statement590);
-            import_name22=import_name();
+            if ( backtracking==0 ) stream_function_key.add(function_key18.getTree());
+            pushFollow(FOLLOW_import_name_in_function_import_statement633);
+            import_name19=import_name(DroolsParaphareseTypes.FUNCTION_IMPORT);
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_import_name.add(import_name22.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:44: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_import_name.add(import_name19.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:84: ( SEMICOLON )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -996,11 +985,11 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:44: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:84: SEMICOLON
                     {
-                    SEMICOLON23=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement592); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON23);
+                    SEMICOLON20=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement636); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON20);
 
 
                     }
@@ -1020,9 +1009,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 311:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+            // 289:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FUNCTION_IMPORT, ((Token)imp.start)), root_1);
@@ -1045,6 +1034,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -1062,35 +1054,33 @@
     };
 
     // $ANTLR start import_name
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:1: import_name : ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
-    public final import_name_return import_name() throws RecognitionException {
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:292:1: import_name[int importType] : id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    public final import_name_return import_name(int importType) throws RecognitionException {
         import_name_return retval = new import_name_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID24=null;
-        Token DOT25=null;
-        Token ID26=null;
-        Token DOT_STAR27=null;
+        Token id=null;
+        List list_id=null;
 
-        Object ID24_tree=null;
-        Object DOT25_tree=null;
-        Object ID26_tree=null;
-        Object DOT_STAR27_tree=null;
+        Object id_tree=null;
         RewriteRuleTokenStream stream_DOT_STAR=new RewriteRuleTokenStream(adaptor,"token DOT_STAR");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:2: ( ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:4: ID ( DOT ID )* ( DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:2: (id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:4: id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )?
             {
-            ID24=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_name617); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID24);
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_import_name665); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:7: ( DOT ID )*
+            if (list_id==null) list_id=new ArrayList();
+            list_id.add(id);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:11: (id+= DOT id+= ID )*
             loop8:
             do {
                 int alt8=2;
@@ -1103,17 +1093,23 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:13: id+= DOT id+= ID
             	    {
-            	    DOT25=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_import_name621); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT25);
+            	    id=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_import_name671); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(id);
 
-            	    ID26=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_import_name623); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_ID.add(ID26);
+            	    if (list_id==null) list_id=new ArrayList();
+            	    list_id.add(id);
 
+            	    id=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_import_name675); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(id);
 
+            	    if (list_id==null) list_id=new ArrayList();
+            	    list_id.add(id);
+
+
             	    }
             	    break;
 
@@ -1122,7 +1118,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:19: ( DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:33: (id+= DOT_STAR )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1131,21 +1127,27 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:19: DOT_STAR
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:33: id+= DOT_STAR
                     {
-                    DOT_STAR27=(Token)input.LT(1);
-                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name628); if (failed) return retval;
-                    if ( backtracking==0 ) stream_DOT_STAR.add(DOT_STAR27);
+                    id=(Token)input.LT(1);
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name682); if (failed) return retval;
+                    if ( backtracking==0 ) stream_DOT_STAR.add(id);
 
+                    if (list_id==null) list_id=new ArrayList();
+                    list_id.add(id);
 
+
                     }
                     break;
 
             }
 
+            if ( backtracking==0 ) {
+              	setParaphrasesValue(importType, buildStringFromTokens(list_id));	
+            }
 
             // AST REWRITE
-            // elements: ID, DOT_STAR
+            // elements: DOT_STAR, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1155,9 +1157,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 316:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            // 295:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:316:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_IMPORT_ID, "VT_IMPORT_ID"), root_1);
@@ -1170,7 +1172,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:316:25: ( DOT_STAR )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:25: ( DOT_STAR )?
                 if ( stream_DOT_STAR.hasNext() ) {
                     adaptor.addChild(root_1, stream_DOT_STAR.next());
 
@@ -1209,46 +1211,47 @@
     };
 
     // $ANTLR start global
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
     public final global_return global() throws RecognitionException {
         global_return retval = new global_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token SEMICOLON31=null;
-        global_key_return global_key28 = null;
+        Token SEMICOLON24=null;
+        global_key_return global_key21 = null;
 
-        data_type_return data_type29 = null;
+        data_type_return data_type22 = null;
 
-        global_id_return global_id30 = null;
+        global_id_return global_id23 = null;
 
 
-        Object SEMICOLON31_tree=null;
+        Object SEMICOLON24_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         RewriteRuleSubtreeStream stream_global_id=new RewriteRuleSubtreeStream(adaptor,"rule global_id");
         RewriteRuleSubtreeStream stream_global_key=new RewriteRuleSubtreeStream(adaptor,"rule global_key");
+         pushParaphrases(DroolsParaphareseTypes.GLOBAL); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:4: global_key data_type global_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:4: global_key data_type global_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_global_key_in_global654);
-            global_key28=global_key();
+            pushFollow(FOLLOW_global_key_in_global722);
+            global_key21=global_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_global_key.add(global_key28.getTree());
-            pushFollow(FOLLOW_data_type_in_global656);
-            data_type29=data_type();
+            if ( backtracking==0 ) stream_global_key.add(global_key21.getTree());
+            pushFollow(FOLLOW_data_type_in_global724);
+            data_type22=data_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_data_type.add(data_type29.getTree());
-            pushFollow(FOLLOW_global_id_in_global658);
-            global_id30=global_id();
+            if ( backtracking==0 ) stream_data_type.add(data_type22.getTree());
+            pushFollow(FOLLOW_global_id_in_global726);
+            global_id23=global_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_global_id.add(global_id30.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:35: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_global_id.add(global_id23.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:35: ( SEMICOLON )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1257,11 +1260,11 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:35: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:35: SEMICOLON
                     {
-                    SEMICOLON31=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global660); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON31);
+                    SEMICOLON24=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global728); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON24);
 
 
                     }
@@ -1271,7 +1274,7 @@
 
 
             // AST REWRITE
-            // elements: global_key, global_id, data_type
+            // elements: data_type, global_id, global_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1281,9 +1284,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 321:3: -> ^( global_key data_type global_id )
+            // 302:3: -> ^( global_key data_type global_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:6: ^( global_key data_type global_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:302:6: ^( global_key data_type global_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_global_key.nextNode(), root_1);
@@ -1306,6 +1309,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -1323,7 +1329,7 @@
     };
 
     // $ANTLR start global_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:1: global_id : id= ID -> VT_GLOBAL_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:1: global_id : id= ID -> VT_GLOBAL_ID[$id] ;
     public final global_id_return global_id() throws RecognitionException {
         global_id_return retval = new global_id_return();
         retval.start = input.LT(1);
@@ -1336,13 +1342,16 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:325:2: (id= ID -> VT_GLOBAL_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:325:4: id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:2: (id= ID -> VT_GLOBAL_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_id686); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_id754); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
+            if ( backtracking==0 ) {
+              	setParaphrasesValue(DroolsParaphareseTypes.GLOBAL, id.getText());	
+            }
 
             // AST REWRITE
             // elements: 
@@ -1355,7 +1364,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 326:3: -> VT_GLOBAL_ID[$id]
+            // 308:3: -> VT_GLOBAL_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_GLOBAL_ID, id));
 
@@ -1388,22 +1397,22 @@
     };
 
     // $ANTLR start function
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:1: function : function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:1: function : function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) ;
     public final function_return function() throws RecognitionException {
         function_return retval = new function_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        function_key_return function_key32 = null;
+        function_key_return function_key25 = null;
 
-        data_type_return data_type33 = null;
+        data_type_return data_type26 = null;
 
-        function_id_return function_id34 = null;
+        function_id_return function_id27 = null;
 
-        parameters_return parameters35 = null;
+        parameters_return parameters28 = null;
 
-        curly_chunk_return curly_chunk36 = null;
+        curly_chunk_return curly_chunk29 = null;
 
 
         RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
@@ -1411,16 +1420,17 @@
         RewriteRuleSubtreeStream stream_curly_chunk=new RewriteRuleSubtreeStream(adaptor,"rule curly_chunk");
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         RewriteRuleSubtreeStream stream_function_id=new RewriteRuleSubtreeStream(adaptor,"rule function_id");
+         pushParaphrases(DroolsParaphareseTypes.FUNCTION); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:4: function_key ( data_type )? function_id parameters curly_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:4: function_key ( data_type )? function_id parameters curly_chunk
             {
-            pushFollow(FOLLOW_function_key_in_function704);
-            function_key32=function_key();
+            pushFollow(FOLLOW_function_key_in_function786);
+            function_key25=function_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_function_key.add(function_key32.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:17: ( data_type )?
+            if ( backtracking==0 ) stream_function_key.add(function_key25.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:17: ( data_type )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1433,37 +1443,37 @@
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:17: data_type
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:17: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_function706);
-                    data_type33=data_type();
+                    pushFollow(FOLLOW_data_type_in_function788);
+                    data_type26=data_type();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_data_type.add(data_type33.getTree());
+                    if ( backtracking==0 ) stream_data_type.add(data_type26.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_function_id_in_function709);
-            function_id34=function_id();
+            pushFollow(FOLLOW_function_id_in_function791);
+            function_id27=function_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_function_id.add(function_id34.getTree());
-            pushFollow(FOLLOW_parameters_in_function711);
-            parameters35=parameters();
+            if ( backtracking==0 ) stream_function_id.add(function_id27.getTree());
+            pushFollow(FOLLOW_parameters_in_function793);
+            parameters28=parameters();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_parameters.add(parameters35.getTree());
-            pushFollow(FOLLOW_curly_chunk_in_function713);
-            curly_chunk36=curly_chunk();
+            if ( backtracking==0 ) stream_parameters.add(parameters28.getTree());
+            pushFollow(FOLLOW_curly_chunk_in_function795);
+            curly_chunk29=curly_chunk();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk36.getTree());
+            if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk29.getTree());
 
             // AST REWRITE
-            // elements: parameters, curly_chunk, data_type, function_id, function_key
+            // elements: curly_chunk, parameters, function_id, data_type, function_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1473,14 +1483,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 331:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            // 315:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:331:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_function_key.nextNode(), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:331:21: ( data_type )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:21: ( data_type )?
                 if ( stream_data_type.hasNext() ) {
                     adaptor.addChild(root_1, stream_data_type.next());
 
@@ -1505,6 +1515,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -1522,7 +1535,7 @@
     };
 
     // $ANTLR start function_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:1: function_id : id= ID -> VT_FUNCTION_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:318:1: function_id : id= ID -> VT_FUNCTION_ID[$id] ;
     public final function_id_return function_id() throws RecognitionException {
         function_id_return retval = new function_id_return();
         retval.start = input.LT(1);
@@ -1535,13 +1548,16 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:2: (id= ID -> VT_FUNCTION_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:4: id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:2: (id= ID -> VT_FUNCTION_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_id743); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_id825); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
+            if ( backtracking==0 ) {
+              	setParaphrasesValue(DroolsParaphareseTypes.FUNCTION, id.getText());	
+            }
 
             // AST REWRITE
             // elements: 
@@ -1554,7 +1570,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 336:3: -> VT_FUNCTION_ID[$id]
+            // 321:3: -> VT_FUNCTION_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_FUNCTION_ID, id));
 
@@ -1587,74 +1603,75 @@
     };
 
     // $ANTLR start query
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) ;
     public final query_return query() throws RecognitionException {
         query_return retval = new query_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token END41=null;
-        Token SEMICOLON42=null;
-        query_key_return query_key37 = null;
+        Token END34=null;
+        Token SEMICOLON35=null;
+        query_key_return query_key30 = null;
 
-        query_id_return query_id38 = null;
+        query_id_return query_id31 = null;
 
-        parameters_return parameters39 = null;
+        parameters_return parameters32 = null;
 
-        normal_lhs_block_return normal_lhs_block40 = null;
+        normal_lhs_block_return normal_lhs_block33 = null;
 
 
-        Object END41_tree=null;
-        Object SEMICOLON42_tree=null;
+        Object END34_tree=null;
+        Object SEMICOLON35_tree=null;
         RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
         RewriteRuleSubtreeStream stream_query_key=new RewriteRuleSubtreeStream(adaptor,"rule query_key");
         RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
         RewriteRuleSubtreeStream stream_query_id=new RewriteRuleSubtreeStream(adaptor,"rule query_id");
+         pushParaphrases(DroolsParaphareseTypes.QUERY); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_query_key_in_query761);
-            query_key37=query_key();
+            pushFollow(FOLLOW_query_key_in_query857);
+            query_key30=query_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_query_key.add(query_key37.getTree());
-            pushFollow(FOLLOW_query_id_in_query763);
-            query_id38=query_id();
+            if ( backtracking==0 ) stream_query_key.add(query_key30.getTree());
+            pushFollow(FOLLOW_query_id_in_query859);
+            query_id31=query_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_query_id.add(query_id38.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:23: ( parameters )?
+            if ( backtracking==0 ) stream_query_id.add(query_id31.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:23: ( parameters )?
             int alt12=2;
             alt12 = dfa12.predict(input);
             switch (alt12) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:23: parameters
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:23: parameters
                     {
-                    pushFollow(FOLLOW_parameters_in_query765);
-                    parameters39=parameters();
+                    pushFollow(FOLLOW_parameters_in_query861);
+                    parameters32=parameters();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_parameters.add(parameters39.getTree());
+                    if ( backtracking==0 ) stream_parameters.add(parameters32.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_normal_lhs_block_in_query768);
-            normal_lhs_block40=normal_lhs_block();
+            pushFollow(FOLLOW_normal_lhs_block_in_query864);
+            normal_lhs_block33=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block40.getTree());
-            END41=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_query770); if (failed) return retval;
-            if ( backtracking==0 ) stream_END.add(END41);
+            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block33.getTree());
+            END34=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_query866); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END34);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:56: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:56: ( SEMICOLON )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1663,11 +1680,11 @@
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:56: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:56: SEMICOLON
                     {
-                    SEMICOLON42=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query772); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON42);
+                    SEMICOLON35=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query868); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON35);
 
 
                     }
@@ -1677,7 +1694,7 @@
 
 
             // AST REWRITE
-            // elements: parameters, normal_lhs_block, query_key, END, query_id
+            // elements: normal_lhs_block, query_id, END, query_key, parameters
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1687,15 +1704,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 341:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
+            // 328:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_query_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_query_id.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:27: ( parameters )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:27: ( parameters )?
                 if ( stream_parameters.hasNext() ) {
                     adaptor.addChild(root_1, stream_parameters.next());
 
@@ -1719,6 +1736,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -1736,21 +1756,21 @@
     };
 
     // $ANTLR start query_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:331:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );
     public final query_id_return query_id() throws RecognitionException {
         query_id_return retval = new query_id_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token value=null;
+        Token id=null;
 
-        Object value_tree=null;
+        Object id_tree=null;
         RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:2: (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -1763,18 +1783,21 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("344:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );", 14, 0, input);
+                    new NoViableAltException("331:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
 
                 throw nvae;
             }
             switch (alt14) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:5: id= ID
                     {
-                    value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_query_id804); if (failed) return retval;
-                    if ( backtracking==0 ) stream_ID.add(value);
+                    id=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_query_id900); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(id);
 
+                    if ( backtracking==0 ) {
+                      	setParaphrasesValue(DroolsParaphareseTypes.QUERY, id.getText());	
+                    }
 
                     // AST REWRITE
                     // elements: 
@@ -1787,9 +1810,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 345:14: -> VT_QUERY_ID[$value]
+                    // 333:67: -> VT_QUERY_ID[$id]
                     {
-                        adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, value));
+                        adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
                     }
 
@@ -1798,12 +1821,15 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:5: id= STRING
                     {
-                    value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_query_id817); if (failed) return retval;
-                    if ( backtracking==0 ) stream_STRING.add(value);
+                    id=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_query_id916); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(id);
 
+                    if ( backtracking==0 ) {
+                      	setParaphrasesValue(DroolsParaphareseTypes.QUERY, id.getText());	
+                    }
 
                     // AST REWRITE
                     // elements: 
@@ -1816,9 +1842,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 346:18: -> VT_QUERY_ID[$value]
+                    // 335:67: -> VT_QUERY_ID[$id]
                     {
-                        adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, value));
+                        adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
                     }
 
@@ -1851,37 +1877,37 @@
     };
 
     // $ANTLR start parameters
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:338:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
     public final parameters_return parameters() throws RecognitionException {
         parameters_return retval = new parameters_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN43=null;
-        Token COMMA45=null;
-        Token RIGHT_PAREN47=null;
-        param_definition_return param_definition44 = null;
+        Token LEFT_PAREN36=null;
+        Token COMMA38=null;
+        Token RIGHT_PAREN40=null;
+        param_definition_return param_definition37 = null;
 
-        param_definition_return param_definition46 = null;
+        param_definition_return param_definition39 = null;
 
 
-        Object LEFT_PAREN43_tree=null;
-        Object COMMA45_tree=null;
-        Object RIGHT_PAREN47_tree=null;
+        Object LEFT_PAREN36_tree=null;
+        Object COMMA38_tree=null;
+        Object RIGHT_PAREN40_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_param_definition=new RewriteRuleSubtreeStream(adaptor,"rule param_definition");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
             {
-            LEFT_PAREN43=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters833); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN43);
+            LEFT_PAREN36=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters935); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN36);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:4: ( param_definition ( COMMA param_definition )* )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:4: ( param_definition ( COMMA param_definition )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -1890,14 +1916,14 @@
             }
             switch (alt16) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:6: param_definition ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:6: param_definition ( COMMA param_definition )*
                     {
-                    pushFollow(FOLLOW_param_definition_in_parameters840);
-                    param_definition44=param_definition();
+                    pushFollow(FOLLOW_param_definition_in_parameters942);
+                    param_definition37=param_definition();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_param_definition.add(param_definition44.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:23: ( COMMA param_definition )*
+                    if ( backtracking==0 ) stream_param_definition.add(param_definition37.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:23: ( COMMA param_definition )*
                     loop15:
                     do {
                         int alt15=2;
@@ -1910,17 +1936,17 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:24: COMMA param_definition
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:24: COMMA param_definition
                     	    {
-                    	    COMMA45=(Token)input.LT(1);
-                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters843); if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_COMMA.add(COMMA45);
+                    	    COMMA38=(Token)input.LT(1);
+                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters945); if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_COMMA.add(COMMA38);
 
-                    	    pushFollow(FOLLOW_param_definition_in_parameters845);
-                    	    param_definition46=param_definition();
+                    	    pushFollow(FOLLOW_param_definition_in_parameters947);
+                    	    param_definition39=param_definition();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_param_definition.add(param_definition46.getTree());
+                    	    if ( backtracking==0 ) stream_param_definition.add(param_definition39.getTree());
 
                     	    }
                     	    break;
@@ -1936,13 +1962,13 @@
 
             }
 
-            RIGHT_PAREN47=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters854); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN47);
+            RIGHT_PAREN40=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters956); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN40);
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, param_definition
+            // elements: param_definition, RIGHT_PAREN
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1952,14 +1978,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 353:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+            // 342:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:353:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:342:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PARAM_LIST, "VT_PARAM_LIST"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:353:22: ( param_definition )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:342:22: ( param_definition )*
                 while ( stream_param_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_param_definition.next());
 
@@ -1999,48 +2025,48 @@
     };
 
     // $ANTLR start param_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:1: param_definition : ( data_type )? argument ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:1: param_definition : ( data_type )? argument ;
     public final param_definition_return param_definition() throws RecognitionException {
         param_definition_return retval = new param_definition_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        data_type_return data_type48 = null;
+        data_type_return data_type41 = null;
 
-        argument_return argument49 = null;
+        argument_return argument42 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:2: ( ( data_type )? argument )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: ( data_type )? argument
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:4: ( data_type )? argument
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:4: ( data_type )?
             int alt17=2;
             alt17 = dfa17.predict(input);
             switch (alt17) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: data_type
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:4: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_param_definition878);
-                    data_type48=data_type();
+                    pushFollow(FOLLOW_data_type_in_param_definition980);
+                    data_type41=data_type();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, data_type48.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, data_type41.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_argument_in_param_definition881);
-            argument49=argument();
+            pushFollow(FOLLOW_argument_in_param_definition983);
+            argument42=argument();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, argument49.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, argument42.getTree());
 
             }
 
@@ -2067,32 +2093,32 @@
     };
 
     // $ANTLR start argument
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:1: argument : ID ( dimension_definition )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:1: argument : ID ( dimension_definition )* ;
     public final argument_return argument() throws RecognitionException {
         argument_return retval = new argument_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID50=null;
-        dimension_definition_return dimension_definition51 = null;
+        Token ID43=null;
+        dimension_definition_return dimension_definition44 = null;
 
 
-        Object ID50_tree=null;
+        Object ID43_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:2: ( ID ( dimension_definition )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:4: ID ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:4: ID ( dimension_definition )*
             {
             root_0 = (Object)adaptor.nil();
 
-            ID50=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument892); if (failed) return retval;
+            ID43=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_argument994); if (failed) return retval;
             if ( backtracking==0 ) {
-            ID50_tree = (Object)adaptor.create(ID50);
-            adaptor.addChild(root_0, ID50_tree);
+            ID43_tree = (Object)adaptor.create(ID43);
+            adaptor.addChild(root_0, ID43_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:7: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:7: ( dimension_definition )*
             loop18:
             do {
                 int alt18=2;
@@ -2105,13 +2131,13 @@
 
                 switch (alt18) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:7: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:7: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_argument894);
-            	    dimension_definition51=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_argument996);
+            	    dimension_definition44=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, dimension_definition51.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, dimension_definition44.getTree());
 
             	    }
             	    break;
@@ -2147,46 +2173,47 @@
     };
 
     // $ANTLR start template
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
     public final template_return template() throws RecognitionException {
         template_return retval = new template_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token SEMICOLON54=null;
-        Token END56=null;
-        Token SEMICOLON57=null;
-        template_key_return template_key52 = null;
+        Token SEMICOLON47=null;
+        Token END49=null;
+        Token SEMICOLON50=null;
+        template_key_return template_key45 = null;
 
-        template_id_return template_id53 = null;
+        template_id_return template_id46 = null;
 
-        template_slot_return template_slot55 = null;
+        template_slot_return template_slot48 = null;
 
 
-        Object SEMICOLON54_tree=null;
-        Object END56_tree=null;
-        Object SEMICOLON57_tree=null;
+        Object SEMICOLON47_tree=null;
+        Object END49_tree=null;
+        Object SEMICOLON50_tree=null;
         RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_template_id=new RewriteRuleSubtreeStream(adaptor,"rule template_id");
         RewriteRuleSubtreeStream stream_template_slot=new RewriteRuleSubtreeStream(adaptor,"rule template_slot");
         RewriteRuleSubtreeStream stream_template_key=new RewriteRuleSubtreeStream(adaptor,"rule template_key");
+         pushParaphrases(DroolsParaphareseTypes.TEMPLATE); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_template_key_in_template907);
-            template_key52=template_key();
+            pushFollow(FOLLOW_template_key_in_template1020);
+            template_key45=template_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_template_key.add(template_key52.getTree());
-            pushFollow(FOLLOW_template_id_in_template909);
-            template_id53=template_id();
+            if ( backtracking==0 ) stream_template_key.add(template_key45.getTree());
+            pushFollow(FOLLOW_template_id_in_template1022);
+            template_id46=template_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_template_id.add(template_id53.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:29: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_template_id.add(template_id46.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:29: ( SEMICOLON )?
             int alt19=2;
             int LA19_0 = input.LA(1);
 
@@ -2195,11 +2222,11 @@
             }
             switch (alt19) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:29: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:29: SEMICOLON
                     {
-                    SEMICOLON54=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template911); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON54);
+                    SEMICOLON47=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1024); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON47);
 
 
                     }
@@ -2207,7 +2234,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: ( template_slot )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:3: ( template_slot )+
             int cnt20=0;
             loop20:
             do {
@@ -2221,13 +2248,13 @@
 
                 switch (alt20) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: template_slot
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:3: template_slot
             	    {
-            	    pushFollow(FOLLOW_template_slot_in_template916);
-            	    template_slot55=template_slot();
+            	    pushFollow(FOLLOW_template_slot_in_template1029);
+            	    template_slot48=template_slot();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_template_slot.add(template_slot55.getTree());
+            	    if ( backtracking==0 ) stream_template_slot.add(template_slot48.getTree());
 
             	    }
             	    break;
@@ -2242,11 +2269,11 @@
                 cnt20++;
             } while (true);
 
-            END56=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_template921); if (failed) return retval;
-            if ( backtracking==0 ) stream_END.add(END56);
+            END49=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_template1034); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END49);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:7: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:359:7: ( SEMICOLON )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -2255,11 +2282,11 @@
             }
             switch (alt21) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:7: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:359:7: SEMICOLON
                     {
-                    SEMICOLON57=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template923); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON57);
+                    SEMICOLON50=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1036); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON50);
 
 
                     }
@@ -2269,7 +2296,7 @@
 
 
             // AST REWRITE
-            // elements: template_id, template_slot, template_key, END
+            // elements: template_key, template_slot, template_id, END
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2279,9 +2306,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 369:3: -> ^( template_key template_id ( template_slot )+ END )
+            // 360:3: -> ^( template_key template_id ( template_slot )+ END )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:369:6: ^( template_key template_id ( template_slot )+ END )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:6: ^( template_key template_id ( template_slot )+ END )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_template_key.nextNode(), root_1);
@@ -2312,6 +2339,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -2329,21 +2359,21 @@
     };
 
     // $ANTLR start template_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );
     public final template_id_return template_id() throws RecognitionException {
         template_id_return retval = new template_id_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token value=null;
+        Token id=null;
 
-        Object value_tree=null;
+        Object id_tree=null;
         RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:2: (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:364:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
             int alt22=2;
             int LA22_0 = input.LA(1);
 
@@ -2356,18 +2386,21 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("372:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );", 22, 0, input);
+                    new NoViableAltException("363:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 22, 0, input);
 
                 throw nvae;
             }
             switch (alt22) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:364:5: id= ID
                     {
-                    value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_template_id953); if (failed) return retval;
-                    if ( backtracking==0 ) stream_ID.add(value);
+                    id=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_template_id1066); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(id);
 
+                    if ( backtracking==0 ) {
+                      	setParaphrasesValue(DroolsParaphareseTypes.TEMPLATE, id.getText());	
+                    }
 
                     // AST REWRITE
                     // elements: 
@@ -2380,9 +2413,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 373:14: -> VT_TEMPLATE_ID[$value]
+                    // 365:70: -> VT_TEMPLATE_ID[$id]
                     {
-                        adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, value));
+                        adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
                     }
 
@@ -2391,12 +2424,15 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:5: id= STRING
                     {
-                    value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_template_id966); if (failed) return retval;
-                    if ( backtracking==0 ) stream_STRING.add(value);
+                    id=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_template_id1082); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(id);
 
+                    if ( backtracking==0 ) {
+                      	setParaphrasesValue(DroolsParaphareseTypes.TEMPLATE, id.getText());	
+                    }
 
                     // AST REWRITE
                     // elements: 
@@ -2409,9 +2445,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 374:18: -> VT_TEMPLATE_ID[$value]
+                    // 367:70: -> VT_TEMPLATE_ID[$id]
                     {
-                        adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, value));
+                        adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
                     }
 
@@ -2444,38 +2480,38 @@
     };
 
     // $ANTLR start template_slot
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:370:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
     public final template_slot_return template_slot() throws RecognitionException {
         template_slot_return retval = new template_slot_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token SEMICOLON60=null;
-        data_type_return data_type58 = null;
+        Token SEMICOLON53=null;
+        data_type_return data_type51 = null;
 
-        slot_id_return slot_id59 = null;
+        slot_id_return slot_id52 = null;
 
 
-        Object SEMICOLON60_tree=null;
+        Object SEMICOLON53_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_slot_id=new RewriteRuleSubtreeStream(adaptor,"rule slot_id");
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:5: data_type slot_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:5: data_type slot_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_data_type_in_template_slot983);
-            data_type58=data_type();
+            pushFollow(FOLLOW_data_type_in_template_slot1102);
+            data_type51=data_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_data_type.add(data_type58.getTree());
-            pushFollow(FOLLOW_slot_id_in_template_slot985);
-            slot_id59=slot_id();
+            if ( backtracking==0 ) stream_data_type.add(data_type51.getTree());
+            pushFollow(FOLLOW_slot_id_in_template_slot1104);
+            slot_id52=slot_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_slot_id.add(slot_id59.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:23: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_slot_id.add(slot_id52.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:23: ( SEMICOLON )?
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -2484,11 +2520,11 @@
             }
             switch (alt23) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:23: SEMICOLON
                     {
-                    SEMICOLON60=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot987); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON60);
+                    SEMICOLON53=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot1106); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON53);
 
 
                     }
@@ -2508,9 +2544,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 379:3: -> ^( VT_SLOT data_type slot_id )
+            // 372:3: -> ^( VT_SLOT data_type slot_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:6: ^( VT_SLOT data_type slot_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:6: ^( VT_SLOT data_type slot_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_SLOT, "VT_SLOT"), root_1);
@@ -2550,7 +2586,7 @@
     };
 
     // $ANTLR start slot_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:1: slot_id : id= ID -> VT_SLOT_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:1: slot_id : id= ID -> VT_SLOT_ID[$id] ;
     public final slot_id_return slot_id() throws RecognitionException {
         slot_id_return retval = new slot_id_return();
         retval.start = input.LT(1);
@@ -2563,11 +2599,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:9: (id= ID -> VT_SLOT_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:11: id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:9: (id= ID -> VT_SLOT_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:11: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_slot_id1012); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_slot_id1131); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -2582,7 +2618,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 383:3: -> VT_SLOT_ID[$id]
+            // 376:3: -> VT_SLOT_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SLOT_ID, id));
 
@@ -2615,22 +2651,22 @@
     };
 
     // $ANTLR start rule
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:1: rule : rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:1: rule : rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) ;
     public final rule_return rule() throws RecognitionException {
         rule_return retval = new rule_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        rule_key_return rule_key61 = null;
+        rule_key_return rule_key54 = null;
 
-        rule_id_return rule_id62 = null;
+        rule_id_return rule_id55 = null;
 
-        rule_attributes_return rule_attributes63 = null;
+        rule_attributes_return rule_attributes56 = null;
 
-        when_part_return when_part64 = null;
+        when_part_return when_part57 = null;
 
-        rhs_chunk_return rhs_chunk65 = null;
+        rhs_chunk_return rhs_chunk58 = null;
 
 
         RewriteRuleSubtreeStream stream_rule_key=new RewriteRuleSubtreeStream(adaptor,"rule rule_key");
@@ -2638,39 +2674,40 @@
         RewriteRuleSubtreeStream stream_when_part=new RewriteRuleSubtreeStream(adaptor,"rule when_part");
         RewriteRuleSubtreeStream stream_rule_attributes=new RewriteRuleSubtreeStream(adaptor,"rule rule_attributes");
         RewriteRuleSubtreeStream stream_rhs_chunk=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk");
+         pushParaphrases(DroolsParaphareseTypes.RULE); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:2: ( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:2: ( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
             {
-            pushFollow(FOLLOW_rule_key_in_rule1030);
-            rule_key61=rule_key();
+            pushFollow(FOLLOW_rule_key_in_rule1160);
+            rule_key54=rule_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rule_key.add(rule_key61.getTree());
-            pushFollow(FOLLOW_rule_id_in_rule1032);
-            rule_id62=rule_id();
+            if ( backtracking==0 ) stream_rule_key.add(rule_key54.getTree());
+            pushFollow(FOLLOW_rule_id_in_rule1162);
+            rule_id55=rule_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rule_id.add(rule_id62.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:21: ( rule_attributes )?
+            if ( backtracking==0 ) stream_rule_id.add(rule_id55.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:21: ( rule_attributes )?
             int alt24=2;
             alt24 = dfa24.predict(input);
             switch (alt24) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:21: rule_attributes
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:21: rule_attributes
                     {
-                    pushFollow(FOLLOW_rule_attributes_in_rule1034);
-                    rule_attributes63=rule_attributes();
+                    pushFollow(FOLLOW_rule_attributes_in_rule1164);
+                    rule_attributes56=rule_attributes();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_rule_attributes.add(rule_attributes63.getTree());
+                    if ( backtracking==0 ) stream_rule_attributes.add(rule_attributes56.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:38: ( when_part )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:38: ( when_part )?
             int alt25=2;
             int LA25_0 = input.LA(1);
 
@@ -2679,27 +2716,27 @@
             }
             switch (alt25) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:38: when_part
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:38: when_part
                     {
-                    pushFollow(FOLLOW_when_part_in_rule1037);
-                    when_part64=when_part();
+                    pushFollow(FOLLOW_when_part_in_rule1167);
+                    when_part57=when_part();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_when_part.add(when_part64.getTree());
+                    if ( backtracking==0 ) stream_when_part.add(when_part57.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_rhs_chunk_in_rule1040);
-            rhs_chunk65=rhs_chunk();
+            pushFollow(FOLLOW_rhs_chunk_in_rule1170);
+            rhs_chunk58=rhs_chunk();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk65.getTree());
+            if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk58.getTree());
 
             // AST REWRITE
-            // elements: rule_attributes, rule_id, rule_key, rhs_chunk, when_part
+            // elements: when_part, rhs_chunk, rule_id, rule_key, rule_attributes
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2709,21 +2746,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 388:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+            // 383:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_rule_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_rule_id.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:25: ( rule_attributes )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:25: ( rule_attributes )?
                 if ( stream_rule_attributes.hasNext() ) {
                     adaptor.addChild(root_1, stream_rule_attributes.next());
 
                 }
                 stream_rule_attributes.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:42: ( when_part )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:42: ( when_part )?
                 if ( stream_when_part.hasNext() ) {
                     adaptor.addChild(root_1, stream_when_part.next());
 
@@ -2746,6 +2783,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -2763,33 +2803,33 @@
     };
 
     // $ANTLR start when_part
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:1: when_part : when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:1: when_part : when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block ;
     public final when_part_return when_part() throws RecognitionException {
         when_part_return retval = new when_part_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COLON67=null;
-        when_key_return when_key66 = null;
+        Token COLON60=null;
+        when_key_return when_key59 = null;
 
-        normal_lhs_block_return normal_lhs_block68 = null;
+        normal_lhs_block_return normal_lhs_block61 = null;
 
 
-        Object COLON67_tree=null;
+        Object COLON60_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
         RewriteRuleSubtreeStream stream_when_key=new RewriteRuleSubtreeStream(adaptor,"rule when_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:4: when_key ( COLON )? normal_lhs_block
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:4: when_key ( COLON )? normal_lhs_block
             {
-            pushFollow(FOLLOW_when_key_in_when_part1069);
-            when_key66=when_key();
+            pushFollow(FOLLOW_when_key_in_when_part1199);
+            when_key59=when_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_when_key.add(when_key66.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:13: ( COLON )?
+            if ( backtracking==0 ) stream_when_key.add(when_key59.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:13: ( COLON )?
             int alt26=2;
             int LA26_0 = input.LA(1);
 
@@ -2798,11 +2838,11 @@
             }
             switch (alt26) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:13: COLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:13: COLON
                     {
-                    COLON67=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_when_part1071); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COLON.add(COLON67);
+                    COLON60=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_when_part1201); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON60);
 
 
                     }
@@ -2810,14 +2850,14 @@
 
             }
 
-            pushFollow(FOLLOW_normal_lhs_block_in_when_part1074);
-            normal_lhs_block68=normal_lhs_block();
+            pushFollow(FOLLOW_normal_lhs_block_in_when_part1204);
+            normal_lhs_block61=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block68.getTree());
+            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block61.getTree());
 
             // AST REWRITE
-            // elements: normal_lhs_block, when_key
+            // elements: when_key, normal_lhs_block
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2827,7 +2867,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 393:2: -> when_key normal_lhs_block
+            // 388:2: -> when_key normal_lhs_block
             {
                 adaptor.addChild(root_0, stream_when_key.next());
                 adaptor.addChild(root_0, stream_normal_lhs_block.next());
@@ -2861,21 +2901,21 @@
     };
 
     // $ANTLR start rule_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );
     public final rule_id_return rule_id() throws RecognitionException {
         rule_id_return retval = new rule_id_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token value=null;
+        Token id=null;
 
-        Object value_tree=null;
+        Object id_tree=null;
         RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:2: (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -2888,18 +2928,21 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("396:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );", 27, 0, input);
+                    new NoViableAltException("391:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 27, 0, input);
 
                 throw nvae;
             }
             switch (alt27) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:5: id= ID
                     {
-                    value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_rule_id1095); if (failed) return retval;
-                    if ( backtracking==0 ) stream_ID.add(value);
+                    id=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_rule_id1225); if (failed) return retval;
+                    if ( backtracking==0 ) stream_ID.add(id);
 
+                    if ( backtracking==0 ) {
+                      	setParaphrasesValue(DroolsParaphareseTypes.RULE, id.getText());	
+                    }
 
                     // AST REWRITE
                     // elements: 
@@ -2912,9 +2955,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 397:14: -> VT_RULE_ID[$value]
+                    // 393:66: -> VT_RULE_ID[$id]
                     {
-                        adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, value));
+                        adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
                     }
 
@@ -2923,12 +2966,15 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:394:5: id= STRING
                     {
-                    value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_id1108); if (failed) return retval;
-                    if ( backtracking==0 ) stream_STRING.add(value);
+                    id=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_rule_id1241); if (failed) return retval;
+                    if ( backtracking==0 ) stream_STRING.add(id);
 
+                    if ( backtracking==0 ) {
+                      	setParaphrasesValue(DroolsParaphareseTypes.RULE, id.getText());	
+                    }
 
                     // AST REWRITE
                     // elements: 
@@ -2941,9 +2987,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 398:18: -> VT_RULE_ID[$value]
+                    // 395:66: -> VT_RULE_ID[$id]
                     {
-                        adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, value));
+                        adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
                     }
 
@@ -2976,33 +3022,33 @@
     };
 
     // $ANTLR start rule_attributes
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
     public final rule_attributes_return rule_attributes() throws RecognitionException {
         rule_attributes_return retval = new rule_attributes_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COLON70=null;
-        Token COMMA72=null;
+        Token COLON63=null;
+        Token COMMA65=null;
         rule_attribute_return attr = null;
 
-        attributes_key_return attributes_key69 = null;
+        attributes_key_return attributes_key62 = null;
 
-        rule_attribute_return rule_attribute71 = null;
+        rule_attribute_return rule_attribute64 = null;
 
 
-        Object COLON70_tree=null;
-        Object COMMA72_tree=null;
+        Object COLON63_tree=null;
+        Object COMMA65_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleSubtreeStream stream_attributes_key=new RewriteRuleSubtreeStream(adaptor,"rule attributes_key");
         RewriteRuleSubtreeStream stream_rule_attribute=new RewriteRuleSubtreeStream(adaptor,"rule rule_attribute");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:4: ( attributes_key COLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:4: ( attributes_key COLON )?
             int alt28=2;
             int LA28_0 = input.LA(1);
 
@@ -3015,16 +3061,16 @@
             }
             switch (alt28) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:6: attributes_key COLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:6: attributes_key COLON
                     {
-                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1126);
-                    attributes_key69=attributes_key();
+                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1262);
+                    attributes_key62=attributes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key69.getTree());
-                    COLON70=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1128); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COLON.add(COLON70);
+                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key62.getTree());
+                    COLON63=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1264); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON63);
 
 
                     }
@@ -3032,21 +3078,21 @@
 
             }
 
-            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1133);
-            rule_attribute71=rule_attribute();
+            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1269);
+            rule_attribute64=rule_attribute();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute71.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:45: ( ( COMMA )? attr= rule_attribute )*
+            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute64.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:45: ( ( COMMA )? attr= rule_attribute )*
             loop30:
             do {
                 int alt30=2;
                 alt30 = dfa30.predict(input);
                 switch (alt30) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:47: ( COMMA )? attr= rule_attribute
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:47: ( COMMA )? attr= rule_attribute
             	    {
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:47: ( COMMA )?
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:47: ( COMMA )?
             	    int alt29=2;
             	    int LA29_0 = input.LA(1);
 
@@ -3055,11 +3101,11 @@
             	    }
             	    switch (alt29) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:47: COMMA
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:47: COMMA
             	            {
-            	            COMMA72=(Token)input.LT(1);
-            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1137); if (failed) return retval;
-            	            if ( backtracking==0 ) stream_COMMA.add(COMMA72);
+            	            COMMA65=(Token)input.LT(1);
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1273); if (failed) return retval;
+            	            if ( backtracking==0 ) stream_COMMA.add(COMMA65);
 
 
             	            }
@@ -3067,7 +3113,7 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1142);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1278);
             	    attr=rule_attribute();
             	    _fsp--;
             	    if (failed) return retval;
@@ -3083,7 +3129,7 @@
 
 
             // AST REWRITE
-            // elements: attributes_key, rule_attribute
+            // elements: rule_attribute, attributes_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3093,14 +3139,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 403:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            // 400:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:403:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_RULE_ATTRIBUTES, "VT_RULE_ATTRIBUTES"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:403:27: ( attributes_key )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:27: ( attributes_key )?
                 if ( stream_attributes_key.hasNext() ) {
                     adaptor.addChild(root_1, stream_attributes_key.next());
 
@@ -3147,41 +3193,42 @@
     };
 
     // $ANTLR start rule_attribute
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
     public final rule_attribute_return rule_attribute() throws RecognitionException {
         rule_attribute_return retval = new rule_attribute_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        salience_return salience73 = null;
+        salience_return salience66 = null;
 
-        no_loop_return no_loop74 = null;
+        no_loop_return no_loop67 = null;
 
-        agenda_group_return agenda_group75 = null;
+        agenda_group_return agenda_group68 = null;
 
-        duration_return duration76 = null;
+        duration_return duration69 = null;
 
-        activation_group_return activation_group77 = null;
+        activation_group_return activation_group70 = null;
 
-        auto_focus_return auto_focus78 = null;
+        auto_focus_return auto_focus71 = null;
 
-        date_effective_return date_effective79 = null;
+        date_effective_return date_effective72 = null;
 
-        date_expires_return date_expires80 = null;
+        date_expires_return date_expires73 = null;
 
-        enabled_return enabled81 = null;
+        enabled_return enabled74 = null;
 
-        ruleflow_group_return ruleflow_group82 = null;
+        ruleflow_group_return ruleflow_group75 = null;
 
-        lock_on_active_return lock_on_active83 = null;
+        lock_on_active_return lock_on_active76 = null;
 
-        dialect_return dialect84 = null;
+        dialect_return dialect77 = null;
 
 
 
+         pushParaphrases(DroolsParaphareseTypes.RULE_ATTRIBUTE); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
             int alt31=12;
             int LA31_0 = input.LA(1);
 
@@ -3218,7 +3265,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 10, input);
+                                    new NoViableAltException("403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 10, input);
 
                                 throw nvae;
                             }
@@ -3232,7 +3279,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 7, input);
+                                new NoViableAltException("403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 7, input);
 
                             throw nvae;
                         }
@@ -3240,7 +3287,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 2, input);
+                            new NoViableAltException("403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 2, input);
 
                         throw nvae;
                     }
@@ -3257,7 +3304,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 3, input);
+                            new NoViableAltException("403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 3, input);
 
                         throw nvae;
                     }
@@ -3274,7 +3321,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 1, input);
+                        new NoViableAltException("403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 1, input);
 
                     throw nvae;
                 }
@@ -3282,164 +3329,164 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 0, input);
+                    new NoViableAltException("403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 0, input);
 
                 throw nvae;
             }
             switch (alt31) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:4: salience
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:4: salience
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_salience_in_rule_attribute1170);
-                    salience73=salience();
+                    pushFollow(FOLLOW_salience_in_rule_attribute1317);
+                    salience66=salience();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, salience73.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, salience66.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:408:4: no_loop
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:4: no_loop
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_no_loop_in_rule_attribute1176);
-                    no_loop74=no_loop();
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute1323);
+                    no_loop67=no_loop();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, no_loop74.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, no_loop67.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:4: agenda_group
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:408:4: agenda_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1183);
-                    agenda_group75=agenda_group();
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1330);
+                    agenda_group68=agenda_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, agenda_group75.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, agenda_group68.getTree());
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:4: duration
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:4: duration
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_duration_in_rule_attribute1190);
-                    duration76=duration();
+                    pushFollow(FOLLOW_duration_in_rule_attribute1337);
+                    duration69=duration();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, duration76.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, duration69.getTree());
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:411:4: activation_group
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:4: activation_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_activation_group_in_rule_attribute1197);
-                    activation_group77=activation_group();
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1344);
+                    activation_group70=activation_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, activation_group77.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, activation_group70.getTree());
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:412:4: auto_focus
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:411:4: auto_focus
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1203);
-                    auto_focus78=auto_focus();
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1350);
+                    auto_focus71=auto_focus();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, auto_focus78.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, auto_focus71.getTree());
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:4: date_effective
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:412:4: date_effective
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_effective_in_rule_attribute1209);
-                    date_effective79=date_effective();
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1356);
+                    date_effective72=date_effective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, date_effective79.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_effective72.getTree());
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:4: date_expires
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:4: date_expires
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_expires_in_rule_attribute1215);
-                    date_expires80=date_expires();
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1362);
+                    date_expires73=date_expires();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, date_expires80.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_expires73.getTree());
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:4: enabled
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:4: enabled
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_enabled_in_rule_attribute1221);
-                    enabled81=enabled();
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1368);
+                    enabled74=enabled();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, enabled81.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, enabled74.getTree());
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:4: ruleflow_group
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:4: ruleflow_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1227);
-                    ruleflow_group82=ruleflow_group();
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1374);
+                    ruleflow_group75=ruleflow_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, ruleflow_group82.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, ruleflow_group75.getTree());
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:4: lock_on_active
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:4: lock_on_active
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1233);
-                    lock_on_active83=lock_on_active();
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1380);
+                    lock_on_active76=lock_on_active();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lock_on_active83.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lock_on_active76.getTree());
 
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:418:4: dialect
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:4: dialect
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_dialect_in_rule_attribute1238);
-                    dialect84=dialect();
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1385);
+                    dialect77=dialect();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, dialect84.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, dialect77.getTree());
 
                     }
                     break;
@@ -3451,6 +3498,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -3468,35 +3518,35 @@
     };
 
     // $ANTLR start date_effective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:1: date_effective : date_effective_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:420:1: date_effective : date_effective_key STRING ;
     public final date_effective_return date_effective() throws RecognitionException {
         date_effective_return retval = new date_effective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING86=null;
-        date_effective_key_return date_effective_key85 = null;
+        Token STRING79=null;
+        date_effective_key_return date_effective_key78 = null;
 
 
-        Object STRING86_tree=null;
+        Object STRING79_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:2: ( date_effective_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:4: date_effective_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:2: ( date_effective_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:4: date_effective_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_effective_key_in_date_effective1250);
-            date_effective_key85=date_effective_key();
+            pushFollow(FOLLOW_date_effective_key_in_date_effective1397);
+            date_effective_key78=date_effective_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key85.getTree(), root_0);
-            STRING86=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_effective1253); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key78.getTree(), root_0);
+            STRING79=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_effective1400); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING86_tree = (Object)adaptor.create(STRING86);
-            adaptor.addChild(root_0, STRING86_tree);
+            STRING79_tree = (Object)adaptor.create(STRING79);
+            adaptor.addChild(root_0, STRING79_tree);
             }
 
             }
@@ -3524,35 +3574,35 @@
     };
 
     // $ANTLR start date_expires
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:1: date_expires : date_expires_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:424:1: date_expires : date_expires_key STRING ;
     public final date_expires_return date_expires() throws RecognitionException {
         date_expires_return retval = new date_expires_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING88=null;
-        date_expires_key_return date_expires_key87 = null;
+        Token STRING81=null;
+        date_expires_key_return date_expires_key80 = null;
 
 
-        Object STRING88_tree=null;
+        Object STRING81_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:426:2: ( date_expires_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:426:4: date_expires_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:2: ( date_expires_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:4: date_expires_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_expires_key_in_date_expires1264);
-            date_expires_key87=date_expires_key();
+            pushFollow(FOLLOW_date_expires_key_in_date_expires1411);
+            date_expires_key80=date_expires_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key87.getTree(), root_0);
-            STRING88=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_expires1267); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key80.getTree(), root_0);
+            STRING81=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_expires1414); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING88_tree = (Object)adaptor.create(STRING88);
-            adaptor.addChild(root_0, STRING88_tree);
+            STRING81_tree = (Object)adaptor.create(STRING81);
+            adaptor.addChild(root_0, STRING81_tree);
             }
 
             }
@@ -3580,35 +3630,35 @@
     };
 
     // $ANTLR start enabled
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:1: enabled : enabled_key BOOL ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:428:1: enabled : enabled_key BOOL ;
     public final enabled_return enabled() throws RecognitionException {
         enabled_return retval = new enabled_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL90=null;
-        enabled_key_return enabled_key89 = null;
+        Token BOOL83=null;
+        enabled_key_return enabled_key82 = null;
 
 
-        Object BOOL90_tree=null;
+        Object BOOL83_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:2: ( enabled_key BOOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:4: enabled_key BOOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:2: ( enabled_key BOOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:4: enabled_key BOOL
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_enabled_key_in_enabled1281);
-            enabled_key89=enabled_key();
+            pushFollow(FOLLOW_enabled_key_in_enabled1428);
+            enabled_key82=enabled_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key89.getTree(), root_0);
-            BOOL90=(Token)input.LT(1);
-            match(input,BOOL,FOLLOW_BOOL_in_enabled1284); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key82.getTree(), root_0);
+            BOOL83=(Token)input.LT(1);
+            match(input,BOOL,FOLLOW_BOOL_in_enabled1431); if (failed) return retval;
             if ( backtracking==0 ) {
-            BOOL90_tree = (Object)adaptor.create(BOOL90);
-            adaptor.addChild(root_0, BOOL90_tree);
+            BOOL83_tree = (Object)adaptor.create(BOOL83);
+            adaptor.addChild(root_0, BOOL83_tree);
             }
 
             }
@@ -3636,33 +3686,33 @@
     };
 
     // $ANTLR start salience
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:1: salience : salience_key ( INT | paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:432:1: salience : salience_key ( INT | paren_chunk ) ;
     public final salience_return salience() throws RecognitionException {
         salience_return retval = new salience_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token INT92=null;
-        salience_key_return salience_key91 = null;
+        Token INT85=null;
+        salience_key_return salience_key84 = null;
 
-        paren_chunk_return paren_chunk93 = null;
+        paren_chunk_return paren_chunk86 = null;
 
 
-        Object INT92_tree=null;
+        Object INT85_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:2: ( salience_key ( INT | paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:4: salience_key ( INT | paren_chunk )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:2: ( salience_key ( INT | paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:4: salience_key ( INT | paren_chunk )
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_salience_key_in_salience1296);
-            salience_key91=salience_key();
+            pushFollow(FOLLOW_salience_key_in_salience1443);
+            salience_key84=salience_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key91.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:3: ( INT | paren_chunk )
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key84.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:3: ( INT | paren_chunk )
             int alt32=2;
             int LA32_0 = input.LA(1);
 
@@ -3675,31 +3725,31 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("435:3: ( INT | paren_chunk )", 32, 0, input);
+                    new NoViableAltException("434:3: ( INT | paren_chunk )", 32, 0, input);
 
                 throw nvae;
             }
             switch (alt32) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:5: INT
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:5: INT
                     {
-                    INT92=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_salience1303); if (failed) return retval;
+                    INT85=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_salience1450); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    INT92_tree = (Object)adaptor.create(INT92);
-                    adaptor.addChild(root_0, INT92_tree);
+                    INT85_tree = (Object)adaptor.create(INT85);
+                    adaptor.addChild(root_0, INT85_tree);
                     }
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:5: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:5: paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_salience1312);
-                    paren_chunk93=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_salience1459);
+                    paren_chunk86=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk93.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk86.getTree());
 
                     }
                     break;
@@ -3732,31 +3782,31 @@
     };
 
     // $ANTLR start no_loop
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:1: no_loop : no_loop_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:439:1: no_loop : no_loop_key ( BOOL )? ;
     public final no_loop_return no_loop() throws RecognitionException {
         no_loop_return retval = new no_loop_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL95=null;
-        no_loop_key_return no_loop_key94 = null;
+        Token BOOL88=null;
+        no_loop_key_return no_loop_key87 = null;
 
 
-        Object BOOL95_tree=null;
+        Object BOOL88_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:2: ( no_loop_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:4: no_loop_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:2: ( no_loop_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: no_loop_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_no_loop_key_in_no_loop1328);
-            no_loop_key94=no_loop_key();
+            pushFollow(FOLLOW_no_loop_key_in_no_loop1475);
+            no_loop_key87=no_loop_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key94.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:17: ( BOOL )?
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key87.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:17: ( BOOL )?
             int alt33=2;
             int LA33_0 = input.LA(1);
 
@@ -3765,13 +3815,13 @@
             }
             switch (alt33) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:17: BOOL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:17: BOOL
                     {
-                    BOOL95=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1331); if (failed) return retval;
+                    BOOL88=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1478); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL95_tree = (Object)adaptor.create(BOOL95);
-                    adaptor.addChild(root_0, BOOL95_tree);
+                    BOOL88_tree = (Object)adaptor.create(BOOL88);
+                    adaptor.addChild(root_0, BOOL88_tree);
                     }
 
                     }
@@ -3805,31 +3855,31 @@
     };
 
     // $ANTLR start auto_focus
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:1: auto_focus : auto_focus_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:1: auto_focus : auto_focus_key ( BOOL )? ;
     public final auto_focus_return auto_focus() throws RecognitionException {
         auto_focus_return retval = new auto_focus_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL97=null;
-        auto_focus_key_return auto_focus_key96 = null;
+        Token BOOL90=null;
+        auto_focus_key_return auto_focus_key89 = null;
 
 
-        Object BOOL97_tree=null;
+        Object BOOL90_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:2: ( auto_focus_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:4: auto_focus_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:2: ( auto_focus_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:4: auto_focus_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1343);
-            auto_focus_key96=auto_focus_key();
+            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1490);
+            auto_focus_key89=auto_focus_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key96.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:20: ( BOOL )?
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key89.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:20: ( BOOL )?
             int alt34=2;
             int LA34_0 = input.LA(1);
 
@@ -3838,13 +3888,13 @@
             }
             switch (alt34) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:20: BOOL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:20: BOOL
                     {
-                    BOOL97=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1346); if (failed) return retval;
+                    BOOL90=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1493); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL97_tree = (Object)adaptor.create(BOOL97);
-                    adaptor.addChild(root_0, BOOL97_tree);
+                    BOOL90_tree = (Object)adaptor.create(BOOL90);
+                    adaptor.addChild(root_0, BOOL90_tree);
                     }
 
                     }
@@ -3878,35 +3928,35 @@
     };
 
     // $ANTLR start activation_group
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:1: activation_group : activation_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:447:1: activation_group : activation_group_key STRING ;
     public final activation_group_return activation_group() throws RecognitionException {
         activation_group_return retval = new activation_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING99=null;
-        activation_group_key_return activation_group_key98 = null;
+        Token STRING92=null;
+        activation_group_key_return activation_group_key91 = null;
 
 
-        Object STRING99_tree=null;
+        Object STRING92_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:2: ( activation_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:4: activation_group_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:2: ( activation_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:4: activation_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_activation_group_key_in_activation_group1360);
-            activation_group_key98=activation_group_key();
+            pushFollow(FOLLOW_activation_group_key_in_activation_group1507);
+            activation_group_key91=activation_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key98.getTree(), root_0);
-            STRING99=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1363); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key91.getTree(), root_0);
+            STRING92=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_activation_group1510); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING99_tree = (Object)adaptor.create(STRING99);
-            adaptor.addChild(root_0, STRING99_tree);
+            STRING92_tree = (Object)adaptor.create(STRING92);
+            adaptor.addChild(root_0, STRING92_tree);
             }
 
             }
@@ -3934,35 +3984,35 @@
     };
 
     // $ANTLR start ruleflow_group
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:1: ruleflow_group : ruleflow_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:1: ruleflow_group : ruleflow_group_key STRING ;
     public final ruleflow_group_return ruleflow_group() throws RecognitionException {
         ruleflow_group_return retval = new ruleflow_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING101=null;
-        ruleflow_group_key_return ruleflow_group_key100 = null;
+        Token STRING94=null;
+        ruleflow_group_key_return ruleflow_group_key93 = null;
 
 
-        Object STRING101_tree=null;
+        Object STRING94_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:2: ( ruleflow_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:4: ruleflow_group_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:2: ( ruleflow_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: ruleflow_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1374);
-            ruleflow_group_key100=ruleflow_group_key();
+            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1521);
+            ruleflow_group_key93=ruleflow_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key100.getTree(), root_0);
-            STRING101=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1377); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key93.getTree(), root_0);
+            STRING94=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1524); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING101_tree = (Object)adaptor.create(STRING101);
-            adaptor.addChild(root_0, STRING101_tree);
+            STRING94_tree = (Object)adaptor.create(STRING94);
+            adaptor.addChild(root_0, STRING94_tree);
             }
 
             }
@@ -3990,35 +4040,35 @@
     };
 
     // $ANTLR start agenda_group
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:1: agenda_group : agenda_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:1: agenda_group : agenda_group_key STRING ;
     public final agenda_group_return agenda_group() throws RecognitionException {
         agenda_group_return retval = new agenda_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING103=null;
-        agenda_group_key_return agenda_group_key102 = null;
+        Token STRING96=null;
+        agenda_group_key_return agenda_group_key95 = null;
 
 
-        Object STRING103_tree=null;
+        Object STRING96_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:2: ( agenda_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:4: agenda_group_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:2: ( agenda_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:4: agenda_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1388);
-            agenda_group_key102=agenda_group_key();
+            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1535);
+            agenda_group_key95=agenda_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key102.getTree(), root_0);
-            STRING103=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1391); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key95.getTree(), root_0);
+            STRING96=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1538); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING103_tree = (Object)adaptor.create(STRING103);
-            adaptor.addChild(root_0, STRING103_tree);
+            STRING96_tree = (Object)adaptor.create(STRING96);
+            adaptor.addChild(root_0, STRING96_tree);
             }
 
             }
@@ -4046,35 +4096,35 @@
     };
 
     // $ANTLR start duration
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:1: duration : duration_key INT ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:459:1: duration : duration_key INT ;
     public final duration_return duration() throws RecognitionException {
         duration_return retval = new duration_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token INT105=null;
-        duration_key_return duration_key104 = null;
+        Token INT98=null;
+        duration_key_return duration_key97 = null;
 
 
-        Object INT105_tree=null;
+        Object INT98_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:2: ( duration_key INT )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:4: duration_key INT
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:2: ( duration_key INT )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:4: duration_key INT
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_duration_key_in_duration1402);
-            duration_key104=duration_key();
+            pushFollow(FOLLOW_duration_key_in_duration1549);
+            duration_key97=duration_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key104.getTree(), root_0);
-            INT105=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1405); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key97.getTree(), root_0);
+            INT98=(Token)input.LT(1);
+            match(input,INT,FOLLOW_INT_in_duration1552); if (failed) return retval;
             if ( backtracking==0 ) {
-            INT105_tree = (Object)adaptor.create(INT105);
-            adaptor.addChild(root_0, INT105_tree);
+            INT98_tree = (Object)adaptor.create(INT98);
+            adaptor.addChild(root_0, INT98_tree);
             }
 
             }
@@ -4102,35 +4152,35 @@
     };
 
     // $ANTLR start dialect
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:1: dialect : dialect_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:463:1: dialect : dialect_key STRING ;
     public final dialect_return dialect() throws RecognitionException {
         dialect_return retval = new dialect_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING107=null;
-        dialect_key_return dialect_key106 = null;
+        Token STRING100=null;
+        dialect_key_return dialect_key99 = null;
 
 
-        Object STRING107_tree=null;
+        Object STRING100_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:465:2: ( dialect_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:465:4: dialect_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:2: ( dialect_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:4: dialect_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_dialect_key_in_dialect1419);
-            dialect_key106=dialect_key();
+            pushFollow(FOLLOW_dialect_key_in_dialect1566);
+            dialect_key99=dialect_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key106.getTree(), root_0);
-            STRING107=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_dialect1422); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key99.getTree(), root_0);
+            STRING100=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_dialect1569); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING107_tree = (Object)adaptor.create(STRING107);
-            adaptor.addChild(root_0, STRING107_tree);
+            STRING100_tree = (Object)adaptor.create(STRING100);
+            adaptor.addChild(root_0, STRING100_tree);
             }
 
             }
@@ -4158,31 +4208,31 @@
     };
 
     // $ANTLR start lock_on_active
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:1: lock_on_active : lock_on_active_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:467:1: lock_on_active : lock_on_active_key ( BOOL )? ;
     public final lock_on_active_return lock_on_active() throws RecognitionException {
         lock_on_active_return retval = new lock_on_active_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL109=null;
-        lock_on_active_key_return lock_on_active_key108 = null;
+        Token BOOL102=null;
+        lock_on_active_key_return lock_on_active_key101 = null;
 
 
-        Object BOOL109_tree=null;
+        Object BOOL102_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:2: ( lock_on_active_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:4: lock_on_active_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:2: ( lock_on_active_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:4: lock_on_active_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1440);
-            lock_on_active_key108=lock_on_active_key();
+            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1587);
+            lock_on_active_key101=lock_on_active_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key108.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:24: ( BOOL )?
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key101.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:24: ( BOOL )?
             int alt35=2;
             int LA35_0 = input.LA(1);
 
@@ -4191,13 +4241,13 @@
             }
             switch (alt35) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:24: BOOL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:24: BOOL
                     {
-                    BOOL109=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1443); if (failed) return retval;
+                    BOOL102=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1590); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL109_tree = (Object)adaptor.create(BOOL109);
-                    adaptor.addChild(root_0, BOOL109_tree);
+                    BOOL102_tree = (Object)adaptor.create(BOOL102);
+                    adaptor.addChild(root_0, BOOL102_tree);
                     }
 
                     }
@@ -4231,22 +4281,22 @@
     };
 
     // $ANTLR start normal_lhs_block
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:471:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
     public final normal_lhs_block_return normal_lhs_block() throws RecognitionException {
         normal_lhs_block_return retval = new normal_lhs_block_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_return lhs110 = null;
+        lhs_return lhs103 = null;
 
 
         RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:4: ( lhs )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: ( lhs )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:4: ( lhs )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: ( lhs )*
             loop36:
             do {
                 int alt36=2;
@@ -4259,13 +4309,13 @@
 
                 switch (alt36) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:4: lhs
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: lhs
             	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1455);
-            	    lhs110=lhs();
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1602);
+            	    lhs103=lhs();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs.add(lhs110.getTree());
+            	    if ( backtracking==0 ) stream_lhs.add(lhs103.getTree());
 
             	    }
             	    break;
@@ -4287,14 +4337,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 474:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            // 473:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:474:5: ^( VT_AND_IMPLICIT ( lhs )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:5: ^( VT_AND_IMPLICIT ( lhs )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_IMPLICIT, "VT_AND_IMPLICIT"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:474:23: ( lhs )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:23: ( lhs )*
                 while ( stream_lhs.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs.next());
 
@@ -4333,28 +4383,28 @@
     };
 
     // $ANTLR start lhs
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:1: lhs : lhs_or ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:1: lhs : lhs_or ;
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_or_return lhs_or111 = null;
+        lhs_or_return lhs_or104 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:5: ( lhs_or )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:7: lhs_or
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:5: ( lhs_or )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:7: lhs_or
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_or_in_lhs1476);
-            lhs_or111=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_lhs1623);
+            lhs_or104=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or111.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or104.getTree());
 
             }
 
@@ -4381,7 +4431,7 @@
     };
 
     // $ANTLR start lhs_or
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:480:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
     public final lhs_or_return lhs_or() throws RecognitionException {
         lhs_or_return retval = new lhs_or_return();
         retval.start = input.LT(1);
@@ -4389,22 +4439,22 @@
         Object root_0 = null;
 
         Token pipe=null;
-        Token LEFT_PAREN112=null;
-        Token RIGHT_PAREN114=null;
+        Token LEFT_PAREN105=null;
+        Token RIGHT_PAREN107=null;
         or_key_return or = null;
 
         or_key_return value = null;
 
-        lhs_and_return lhs_and113 = null;
+        lhs_and_return lhs_and106 = null;
 
-        lhs_and_return lhs_and115 = null;
+        lhs_and_return lhs_and108 = null;
 
-        lhs_and_return lhs_and116 = null;
+        lhs_and_return lhs_and109 = null;
 
 
         Object pipe_tree=null;
-        Object LEFT_PAREN112_tree=null;
-        Object RIGHT_PAREN114_tree=null;
+        Object LEFT_PAREN105_tree=null;
+        Object RIGHT_PAREN107_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_PIPE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_PIPE");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -4414,7 +4464,7 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
             int alt40=2;
             int LA40_0 = input.LA(1);
 
@@ -4446,7 +4496,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("480:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 4, input);
+                                new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 4, input);
 
                             throw nvae;
                         }
@@ -4465,7 +4515,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("480:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 5, input);
+                                new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 5, input);
 
                             throw nvae;
                         }
@@ -4474,7 +4524,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("480:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 3, input);
+                            new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 3, input);
 
                         throw nvae;
                     }
@@ -4483,7 +4533,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("480:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 1, input);
+                        new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 1, input);
 
                     throw nvae;
                 }
@@ -4494,24 +4544,24 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("480:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 0, input);
+                    new NoViableAltException("479:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 40, 0, input);
 
                 throw nvae;
             }
             switch (alt40) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN112=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1497); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN112);
+                    LEFT_PAREN105=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1644); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN105);
 
-                    pushFollow(FOLLOW_or_key_in_lhs_or1501);
+                    pushFollow(FOLLOW_or_key_in_lhs_or1648);
                     or=or_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_or_key.add(or.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:48: ( lhs_and )+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:48: ( lhs_and )+
                     int cnt37=0;
                     loop37:
                     do {
@@ -4525,13 +4575,13 @@
 
                         switch (alt37) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:48: lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:48: lhs_and
                     	    {
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1503);
-                    	    lhs_and113=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1650);
+                    	    lhs_and106=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and113.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and106.getTree());
 
                     	    }
                     	    break;
@@ -4546,13 +4596,13 @@
                         cnt37++;
                     } while (true);
 
-                    RIGHT_PAREN114=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1506); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN114);
+                    RIGHT_PAREN107=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1653); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN107);
 
 
                     // AST REWRITE
-                    // elements: RIGHT_PAREN, lhs_and
+                    // elements: lhs_and, RIGHT_PAREN
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -4562,9 +4612,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 484:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                    // 483:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_PREFIX, ((Token)or.start)), root_1);
@@ -4589,16 +4639,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:4: ( lhs_and -> lhs_and )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: lhs_and
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:4: ( lhs_and -> lhs_and )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:5: lhs_and
                     {
-                    pushFollow(FOLLOW_lhs_and_in_lhs_or1527);
-                    lhs_and115=lhs_and();
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or1674);
+                    lhs_and108=lhs_and();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and115.getTree());
+                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and108.getTree());
 
                     // AST REWRITE
                     // elements: lhs_and
@@ -4611,7 +4661,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 485:13: -> lhs_and
+                    // 484:13: -> lhs_and
                     {
                         adaptor.addChild(root_0, stream_lhs_and.next());
 
@@ -4621,7 +4671,7 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     loop39:
                     do {
                         int alt39=2;
@@ -4649,9 +4699,9 @@
 
                         switch (alt39) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:28: (value= or_key | pipe= DOUBLE_PIPE )
                     	    int alt38=2;
                     	    int LA38_0 = input.LA(1);
 
@@ -4664,15 +4714,15 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("486:28: (value= or_key | pipe= DOUBLE_PIPE )", 38, 0, input);
+                    	            new NoViableAltException("485:28: (value= or_key | pipe= DOUBLE_PIPE )", 38, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt38) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:29: value= or_key
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:29: value= or_key
                     	            {
-                    	            pushFollow(FOLLOW_or_key_in_lhs_or1549);
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or1696);
                     	            value=or_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -4684,10 +4734,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:69: pipe= DOUBLE_PIPE
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:69: pipe= DOUBLE_PIPE
                     	            {
                     	            pipe=(Token)input.LT(1);
-                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1556); if (failed) return retval;
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1703); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
                     	            if ( backtracking==0 ) {
@@ -4699,14 +4749,14 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1561);
-                    	    lhs_and116=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1708);
+                    	    lhs_and109=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and116.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and109.getTree());
 
                     	    // AST REWRITE
-                    	    // elements: lhs_or, lhs_and
+                    	    // elements: lhs_and, lhs_or
                     	    // token labels: 
                     	    // rule labels: retval
                     	    // token list labels: 
@@ -4716,9 +4766,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 487:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    // 486:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
                     	    {
-                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
                     	        {
                     	        Object root_1 = (Object)adaptor.nil();
                     	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_INFIX, orToken), root_1);
@@ -4769,7 +4819,7 @@
     };
 
     // $ANTLR start lhs_and
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
     public final lhs_and_return lhs_and() throws RecognitionException {
         lhs_and_return retval = new lhs_and_return();
         retval.start = input.LT(1);
@@ -4777,22 +4827,22 @@
         Object root_0 = null;
 
         Token amper=null;
-        Token LEFT_PAREN117=null;
-        Token RIGHT_PAREN119=null;
+        Token LEFT_PAREN110=null;
+        Token RIGHT_PAREN112=null;
         and_key_return and = null;
 
         and_key_return value = null;
 
-        lhs_unary_return lhs_unary118 = null;
+        lhs_unary_return lhs_unary111 = null;
 
-        lhs_unary_return lhs_unary120 = null;
+        lhs_unary_return lhs_unary113 = null;
 
-        lhs_unary_return lhs_unary121 = null;
+        lhs_unary_return lhs_unary114 = null;
 
 
         Object amper_tree=null;
-        Object LEFT_PAREN117_tree=null;
-        Object RIGHT_PAREN119_tree=null;
+        Object LEFT_PAREN110_tree=null;
+        Object RIGHT_PAREN112_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_AMPER=new RewriteRuleTokenStream(adaptor,"token DOUBLE_AMPER");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -4802,7 +4852,7 @@
         	Token andToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
             int alt44=2;
             int LA44_0 = input.LA(1);
 
@@ -4837,7 +4887,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 6, input);
+                                    new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 6, input);
 
                                 throw nvae;
                             }
@@ -4856,7 +4906,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 7, input);
+                                    new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 7, input);
 
                                 throw nvae;
                             }
@@ -4987,7 +5037,7 @@
                         default:
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 4, input);
+                                new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 4, input);
 
                             throw nvae;
                         }
@@ -5007,7 +5057,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 5, input);
+                                new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 5, input);
 
                             throw nvae;
                         }
@@ -5016,7 +5066,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 3, input);
+                            new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 3, input);
 
                         throw nvae;
                     }
@@ -5025,7 +5075,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 1, input);
+                        new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 1, input);
 
                     throw nvae;
                 }
@@ -5036,24 +5086,24 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("490:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 0, input);
+                    new NoViableAltException("489:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 44, 0, input);
 
                 throw nvae;
             }
             switch (alt44) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN117=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1599); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN117);
+                    LEFT_PAREN110=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1746); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN110);
 
-                    pushFollow(FOLLOW_and_key_in_lhs_and1603);
+                    pushFollow(FOLLOW_and_key_in_lhs_and1750);
                     and=and_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_and_key.add(and.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:51: ( lhs_unary )+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:51: ( lhs_unary )+
                     int cnt41=0;
                     loop41:
                     do {
@@ -5067,13 +5117,13 @@
 
                         switch (alt41) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:51: lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:51: lhs_unary
                     	    {
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1605);
-                    	    lhs_unary118=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1752);
+                    	    lhs_unary111=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary118.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary111.getTree());
 
                     	    }
                     	    break;
@@ -5088,13 +5138,13 @@
                         cnt41++;
                     } while (true);
 
-                    RIGHT_PAREN119=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1608); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN119);
+                    RIGHT_PAREN112=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1755); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN112);
 
 
                     // AST REWRITE
-                    // elements: RIGHT_PAREN, lhs_unary
+                    // elements: lhs_unary, RIGHT_PAREN
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -5104,9 +5154,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 494:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                    // 493:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_PREFIX, ((Token)and.start)), root_1);
@@ -5131,16 +5181,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:4: ( lhs_unary -> lhs_unary )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: lhs_unary
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:4: ( lhs_unary -> lhs_unary )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:5: lhs_unary
                     {
-                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1629);
-                    lhs_unary120=lhs_unary();
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1776);
+                    lhs_unary113=lhs_unary();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary120.getTree());
+                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary113.getTree());
 
                     // AST REWRITE
                     // elements: lhs_unary
@@ -5153,7 +5203,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 495:15: -> lhs_unary
+                    // 494:15: -> lhs_unary
                     {
                         adaptor.addChild(root_0, stream_lhs_unary.next());
 
@@ -5163,7 +5213,7 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     loop43:
                     do {
                         int alt43=2;
@@ -5191,9 +5241,9 @@
 
                         switch (alt43) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:30: (value= and_key | amper= DOUBLE_AMPER )
                     	    int alt42=2;
                     	    int LA42_0 = input.LA(1);
 
@@ -5206,15 +5256,15 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("496:30: (value= and_key | amper= DOUBLE_AMPER )", 42, 0, input);
+                    	            new NoViableAltException("495:30: (value= and_key | amper= DOUBLE_AMPER )", 42, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt42) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:31: value= and_key
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:31: value= and_key
                     	            {
-                    	            pushFollow(FOLLOW_and_key_in_lhs_and1651);
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and1798);
                     	            value=and_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -5226,10 +5276,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:73: amper= DOUBLE_AMPER
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:73: amper= DOUBLE_AMPER
                     	            {
                     	            amper=(Token)input.LT(1);
-                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and1658); if (failed) return retval;
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and1805); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
 
                     	            if ( backtracking==0 ) {
@@ -5241,14 +5291,14 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1663);
-                    	    lhs_unary121=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1810);
+                    	    lhs_unary114=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary121.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary114.getTree());
 
                     	    // AST REWRITE
-                    	    // elements: lhs_and, lhs_unary
+                    	    // elements: lhs_unary, lhs_and
                     	    // token labels: 
                     	    // rule labels: retval
                     	    // token list labels: 
@@ -5258,9 +5308,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 497:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    // 496:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
                     	    {
-                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:497:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
                     	        {
                     	        Object root_1 = (Object)adaptor.nil();
                     	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_INFIX, andToken), root_1);
@@ -5311,40 +5361,40 @@
     };
 
     // $ANTLR start lhs_unary
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:500:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
     public final lhs_unary_return lhs_unary() throws RecognitionException {
         lhs_unary_return retval = new lhs_unary_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN126=null;
-        Token RIGHT_PAREN128=null;
-        Token SEMICOLON130=null;
-        lhs_exist_return lhs_exist122 = null;
+        Token LEFT_PAREN119=null;
+        Token RIGHT_PAREN121=null;
+        Token SEMICOLON123=null;
+        lhs_exist_return lhs_exist115 = null;
 
-        lhs_not_return lhs_not123 = null;
+        lhs_not_return lhs_not116 = null;
 
-        lhs_eval_return lhs_eval124 = null;
+        lhs_eval_return lhs_eval117 = null;
 
-        lhs_forall_return lhs_forall125 = null;
+        lhs_forall_return lhs_forall118 = null;
 
-        lhs_or_return lhs_or127 = null;
+        lhs_or_return lhs_or120 = null;
 
-        pattern_source_return pattern_source129 = null;
+        pattern_source_return pattern_source122 = null;
 
 
-        Object LEFT_PAREN126_tree=null;
-        Object RIGHT_PAREN128_tree=null;
-        Object SEMICOLON130_tree=null;
+        Object LEFT_PAREN119_tree=null;
+        Object RIGHT_PAREN121_tree=null;
+        Object SEMICOLON123_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
             int alt45=6;
             int LA45_0 = input.LA(1);
 
@@ -5369,7 +5419,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("502:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 1, input);
+                        new NoViableAltException("501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 1, input);
 
                     throw nvae;
                 }
@@ -5380,89 +5430,89 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("502:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 0, input);
+                    new NoViableAltException("501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 0, input);
 
                 throw nvae;
             }
             switch (alt45) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:6: lhs_exist
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:6: lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1701);
-                    lhs_exist122=lhs_exist();
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1848);
+                    lhs_exist115=lhs_exist();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist122.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist115.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:5: lhs_not
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:5: lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1707);
-                    lhs_not123=lhs_not();
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1854);
+                    lhs_not116=lhs_not();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not123.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not116.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:5: lhs_eval
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:5: lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1713);
-                    lhs_eval124=lhs_eval();
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1860);
+                    lhs_eval117=lhs_eval();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval124.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval117.getTree());
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:5: lhs_forall
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:5: lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary1719);
-                    lhs_forall125=lhs_forall();
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary1866);
+                    lhs_forall118=lhs_forall();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall125.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall118.getTree());
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN126=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary1725); if (failed) return retval;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary1728);
-                    lhs_or127=lhs_or();
+                    LEFT_PAREN119=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary1872); if (failed) return retval;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary1875);
+                    lhs_or120=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or127.getTree());
-                    RIGHT_PAREN128=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary1730); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or120.getTree());
+                    RIGHT_PAREN121=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary1877); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN128_tree = (Object)adaptor.create(RIGHT_PAREN128);
-                    adaptor.addChild(root_0, RIGHT_PAREN128_tree);
+                    RIGHT_PAREN121_tree = (Object)adaptor.create(RIGHT_PAREN121);
+                    adaptor.addChild(root_0, RIGHT_PAREN121_tree);
                     }
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:5: pattern_source
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:5: pattern_source
                     {
-                    pushFollow(FOLLOW_pattern_source_in_lhs_unary1736);
-                    pattern_source129=pattern_source();
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary1883);
+                    pattern_source122=pattern_source();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source129.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source122.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:3: ( ( SEMICOLON )=> SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:3: ( ( SEMICOLON )=> SEMICOLON )?
             int alt46=2;
             int LA46_0 = input.LA(1);
 
@@ -5475,10 +5525,10 @@
             }
             switch (alt46) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:4: ( SEMICOLON )=> SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:4: ( SEMICOLON )=> SEMICOLON
                     {
-                    SEMICOLON130=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary1750); if (failed) return retval;
+                    SEMICOLON123=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary1897); if (failed) return retval;
 
                     }
                     break;
@@ -5511,82 +5561,82 @@
     };
 
     // $ANTLR start lhs_exist
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:1: lhs_exist : exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:1: lhs_exist : exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
     public final lhs_exist_return lhs_exist() throws RecognitionException {
         lhs_exist_return retval = new lhs_exist_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN133=null;
-        Token RIGHT_PAREN135=null;
-        exists_key_return exists_key131 = null;
+        Token LEFT_PAREN126=null;
+        Token RIGHT_PAREN128=null;
+        exists_key_return exists_key124 = null;
 
-        lhs_or_return lhs_or132 = null;
+        lhs_or_return lhs_or125 = null;
 
-        lhs_or_return lhs_or134 = null;
+        lhs_or_return lhs_or127 = null;
 
-        lhs_pattern_return lhs_pattern136 = null;
+        lhs_pattern_return lhs_pattern129 = null;
 
 
-        Object LEFT_PAREN133_tree=null;
-        Object RIGHT_PAREN135_tree=null;
+        Object LEFT_PAREN126_tree=null;
+        Object RIGHT_PAREN128_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_exists_key=new RewriteRuleSubtreeStream(adaptor,"rule exists_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:2: ( exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:2: ( exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             {
-            pushFollow(FOLLOW_exists_key_in_lhs_exist1764);
-            exists_key131=exists_key();
+            pushFollow(FOLLOW_exists_key_in_lhs_exist1911);
+            exists_key124=exists_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_exists_key.add(exists_key131.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            if ( backtracking==0 ) stream_exists_key.add(exists_key124.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             int alt47=3;
             alt47 = dfa47.predict(input);
             switch (alt47) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1788);
-                    lhs_or132=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1935);
+                    lhs_or125=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or132.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or125.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:515:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN133=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist1795); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN133);
+                    LEFT_PAREN126=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist1942); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN126);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1797);
-                    lhs_or134=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1944);
+                    lhs_or127=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or134.getTree());
-                    RIGHT_PAREN135=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist1799); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN135);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or127.getTree());
+                    RIGHT_PAREN128=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist1946); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN128);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:516:12: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:515:12: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist1812);
-                    lhs_pattern136=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist1959);
+                    lhs_pattern129=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern136.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern129.getTree());
 
                     }
                     break;
@@ -5605,26 +5655,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 518:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 517:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_exists_key.nextNode(), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:26: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:26: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:34: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:34: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
                 }
                 stream_lhs_pattern.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:47: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:47: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -5663,82 +5713,82 @@
     };
 
     // $ANTLR start lhs_not
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:1: lhs_not : not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:1: lhs_not : not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
     public final lhs_not_return lhs_not() throws RecognitionException {
         lhs_not_return retval = new lhs_not_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN139=null;
-        Token RIGHT_PAREN141=null;
-        not_key_return not_key137 = null;
+        Token LEFT_PAREN132=null;
+        Token RIGHT_PAREN134=null;
+        not_key_return not_key130 = null;
 
-        lhs_or_return lhs_or138 = null;
+        lhs_or_return lhs_or131 = null;
 
-        lhs_or_return lhs_or140 = null;
+        lhs_or_return lhs_or133 = null;
 
-        lhs_pattern_return lhs_pattern142 = null;
+        lhs_pattern_return lhs_pattern135 = null;
 
 
-        Object LEFT_PAREN139_tree=null;
-        Object RIGHT_PAREN141_tree=null;
+        Object LEFT_PAREN132_tree=null;
+        Object RIGHT_PAREN134_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_not_key=new RewriteRuleSubtreeStream(adaptor,"rule not_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:9: ( not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:9: ( not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             {
-            pushFollow(FOLLOW_not_key_in_lhs_not1858);
-            not_key137=not_key();
+            pushFollow(FOLLOW_not_key_in_lhs_not2005);
+            not_key130=not_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_not_key.add(not_key137.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            if ( backtracking==0 ) stream_not_key.add(not_key130.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             int alt48=3;
             alt48 = dfa48.predict(input);
             switch (alt48) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not1875);
-                    lhs_or138=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2022);
+                    lhs_or131=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or138.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or131.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:523:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN139=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not1882); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN139);
+                    LEFT_PAREN132=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2029); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN132);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not1884);
-                    lhs_or140=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2031);
+                    lhs_or133=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or140.getTree());
-                    RIGHT_PAREN141=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not1886); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN141);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or133.getTree());
+                    RIGHT_PAREN134=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2033); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN134);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:6: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:523:6: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not1894);
-                    lhs_pattern142=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2041);
+                    lhs_pattern135=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern142.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern135.getTree());
 
                     }
                     break;
@@ -5747,7 +5797,7 @@
 
 
             // AST REWRITE
-            // elements: not_key, lhs_pattern, RIGHT_PAREN, lhs_or
+            // elements: lhs_or, RIGHT_PAREN, not_key, lhs_pattern
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -5757,26 +5807,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 525:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 524:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525:13: ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:13: ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_not_key.nextNode(), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525:23: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:23: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525:31: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:31: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
                 }
                 stream_lhs_pattern.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525:44: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:44: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -5815,7 +5865,7 @@
     };
 
     // $ANTLR start lhs_eval
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
     public final lhs_eval_return lhs_eval() throws RecognitionException {
         lhs_eval_return retval = new lhs_eval_return();
         retval.start = input.LT(1);
@@ -5830,22 +5880,22 @@
         RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:4: ev= eval_key pc= paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:4: ev= eval_key pc= paren_chunk
             {
-            pushFollow(FOLLOW_eval_key_in_lhs_eval1933);
+            pushFollow(FOLLOW_eval_key_in_lhs_eval2080);
             ev=eval_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_eval_key.add(ev.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval1937);
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2084);
             pc=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc.getTree());
             if ( backtracking==0 ) {
               	String body = safeSubstring( input.toString(pc.start,pc.stop), 1, input.toString(pc.start,pc.stop).length()-1 );
-              		checkTrailingSemicolon( body, offset((((Token)ev.start)).getLine()) );	
+              		checkTrailingSemicolon( body, ((Token)ev.start) );	
             }
 
             // AST REWRITE
@@ -5859,9 +5909,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 532:3: -> ^( eval_key paren_chunk )
+            // 531:3: -> ^( eval_key paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:532:6: ^( eval_key paren_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:531:6: ^( eval_key paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -5900,40 +5950,40 @@
     };
 
     // $ANTLR start lhs_forall
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
     public final lhs_forall_return lhs_forall() throws RecognitionException {
         lhs_forall_return retval = new lhs_forall_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN144=null;
-        Token RIGHT_PAREN146=null;
-        forall_key_return forall_key143 = null;
+        Token LEFT_PAREN137=null;
+        Token RIGHT_PAREN139=null;
+        forall_key_return forall_key136 = null;
 
-        lhs_pattern_return lhs_pattern145 = null;
+        lhs_pattern_return lhs_pattern138 = null;
 
 
-        Object LEFT_PAREN144_tree=null;
-        Object RIGHT_PAREN146_tree=null;
+        Object LEFT_PAREN137_tree=null;
+        Object RIGHT_PAREN139_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_forall_key=new RewriteRuleSubtreeStream(adaptor,"rule forall_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
             {
-            pushFollow(FOLLOW_forall_key_in_lhs_forall1961);
-            forall_key143=forall_key();
+            pushFollow(FOLLOW_forall_key_in_lhs_forall2108);
+            forall_key136=forall_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_forall_key.add(forall_key143.getTree());
-            LEFT_PAREN144=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall1963); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN144);
+            if ( backtracking==0 ) stream_forall_key.add(forall_key136.getTree());
+            LEFT_PAREN137=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2110); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN137);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:26: ( lhs_pattern )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:26: ( lhs_pattern )+
             int cnt49=0;
             loop49:
             do {
@@ -5947,13 +5997,13 @@
 
                 switch (alt49) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:26: lhs_pattern
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:26: lhs_pattern
             	    {
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall1965);
-            	    lhs_pattern145=lhs_pattern();
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2112);
+            	    lhs_pattern138=lhs_pattern();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern145.getTree());
+            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern138.getTree());
 
             	    }
             	    break;
@@ -5968,13 +6018,13 @@
                 cnt49++;
             } while (true);
 
-            RIGHT_PAREN146=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall1968); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN146);
+            RIGHT_PAREN139=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2115); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN139);
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, lhs_pattern, forall_key
+            // elements: forall_key, lhs_pattern, RIGHT_PAREN
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -5984,9 +6034,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 537:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+            // 536:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:537:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
@@ -6033,39 +6083,39 @@
     };
 
     // $ANTLR start pattern_source
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:540:1: pattern_source options {k=3; } : lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:1: pattern_source options {k=3; } : lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
     public final pattern_source_return pattern_source() throws RecognitionException {
         pattern_source_return retval = new pattern_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_pattern_return lhs_pattern147 = null;
+        lhs_pattern_return lhs_pattern140 = null;
 
-        from_key_return from_key148 = null;
+        from_key_return from_key141 = null;
 
-        accumulate_statement_return accumulate_statement149 = null;
+        accumulate_statement_return accumulate_statement142 = null;
 
-        collect_statement_return collect_statement150 = null;
+        collect_statement_return collect_statement143 = null;
 
-        entrypoint_statement_return entrypoint_statement151 = null;
+        entrypoint_statement_return entrypoint_statement144 = null;
 
-        from_source_return from_source152 = null;
+        from_source_return from_source145 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2000);
-            lhs_pattern147=lhs_pattern();
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2147);
+            lhs_pattern140=lhs_pattern();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern147.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern140.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             int alt51=2;
             int LA51_0 = input.LA(1);
 
@@ -6146,14 +6196,14 @@
             }
             switch (alt51) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     {
-                    pushFollow(FOLLOW_from_key_in_pattern_source2009);
-                    from_key148=from_key();
+                    pushFollow(FOLLOW_from_key_in_pattern_source2156);
+                    from_key141=from_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key148.getTree(), root_0);
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key141.getTree(), root_0);
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     int alt50=4;
                     int LA50_0 = input.LA(1);
 
@@ -6178,7 +6228,7 @@
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 5, input);
+                                        new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 5, input);
 
                                     throw nvae;
                                 }
@@ -6200,7 +6250,7 @@
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 6, input);
+                                        new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 6, input);
 
                                     throw nvae;
                                 }
@@ -6331,7 +6381,7 @@
                             default:
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 3, input);
+                                    new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 3, input);
 
                                 throw nvae;
                             }
@@ -6343,7 +6393,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 1, input);
+                                new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 1, input);
 
                             throw nvae;
                         }
@@ -6351,52 +6401,52 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 0, input);
+                            new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 0, input);
 
                         throw nvae;
                     }
                     switch (alt50) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:14: accumulate_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:14: accumulate_statement
                             {
-                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2025);
-                            accumulate_statement149=accumulate_statement();
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2172);
+                            accumulate_statement142=accumulate_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement149.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement142.getTree());
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:15: collect_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:15: collect_statement
                             {
-                            pushFollow(FOLLOW_collect_statement_in_pattern_source2041);
-                            collect_statement150=collect_statement();
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source2188);
+                            collect_statement143=collect_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement150.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement143.getTree());
 
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:15: entrypoint_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:15: entrypoint_statement
                             {
-                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2058);
-                            entrypoint_statement151=entrypoint_statement();
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2205);
+                            entrypoint_statement144=entrypoint_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement151.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement144.getTree());
 
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:15: from_source
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:15: from_source
                             {
-                            pushFollow(FOLLOW_from_source_in_pattern_source2074);
-                            from_source152=from_source();
+                            pushFollow(FOLLOW_from_source_in_pattern_source2221);
+                            from_source145=from_source();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source152.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source145.getTree());
 
                             }
                             break;
@@ -6435,28 +6485,28 @@
     };
 
     // $ANTLR start accumulate_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) ;
     public final accumulate_statement_return accumulate_statement() throws RecognitionException {
         accumulate_statement_return retval = new accumulate_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN154=null;
-        Token COMMA156=null;
-        Token RIGHT_PAREN159=null;
-        accumulate_key_return accumulate_key153 = null;
+        Token LEFT_PAREN147=null;
+        Token COMMA149=null;
+        Token RIGHT_PAREN152=null;
+        accumulate_key_return accumulate_key146 = null;
 
-        lhs_or_return lhs_or155 = null;
+        lhs_or_return lhs_or148 = null;
 
-        accumulate_init_clause_return accumulate_init_clause157 = null;
+        accumulate_init_clause_return accumulate_init_clause150 = null;
 
-        accumulate_id_clause_return accumulate_id_clause158 = null;
+        accumulate_id_clause_return accumulate_id_clause151 = null;
 
 
-        Object LEFT_PAREN154_tree=null;
-        Object COMMA156_tree=null;
-        Object RIGHT_PAREN159_tree=null;
+        Object LEFT_PAREN147_tree=null;
+        Object COMMA149_tree=null;
+        Object RIGHT_PAREN152_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -6465,24 +6515,24 @@
         RewriteRuleSubtreeStream stream_accumulate_id_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_id_clause");
         RewriteRuleSubtreeStream stream_accumulate_key=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
             {
-            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2102);
-            accumulate_key153=accumulate_key();
+            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2249);
+            accumulate_key146=accumulate_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key153.getTree());
-            LEFT_PAREN154=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2106); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN154);
+            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key146.getTree());
+            LEFT_PAREN147=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2253); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN147);
 
-            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2108);
-            lhs_or155=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2255);
+            lhs_or148=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_lhs_or.add(lhs_or155.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:21: ( COMMA )?
+            if ( backtracking==0 ) stream_lhs_or.add(lhs_or148.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:21: ( COMMA )?
             int alt52=2;
             int LA52_0 = input.LA(1);
 
@@ -6491,11 +6541,11 @@
             }
             switch (alt52) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:21: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:21: COMMA
                     {
-                    COMMA156=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2110); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA156);
+                    COMMA149=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2257); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA149);
 
 
                     }
@@ -6503,42 +6553,42 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:3: ( accumulate_init_clause | accumulate_id_clause )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:3: ( accumulate_init_clause | accumulate_id_clause )
             int alt53=2;
             alt53 = dfa53.predict(input);
             switch (alt53) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:5: accumulate_init_clause
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:5: accumulate_init_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2118);
-                    accumulate_init_clause157=accumulate_init_clause();
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2265);
+                    accumulate_init_clause150=accumulate_init_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause157.getTree());
+                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause150.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:557:5: accumulate_id_clause
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:5: accumulate_id_clause
                     {
-                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2124);
-                    accumulate_id_clause158=accumulate_id_clause();
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2271);
+                    accumulate_id_clause151=accumulate_id_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause158.getTree());
+                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause151.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN159=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2132); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN159);
+            RIGHT_PAREN152=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2279); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN152);
 
 
             // AST REWRITE
-            // elements: accumulate_id_clause, lhs_or, accumulate_key, accumulate_init_clause, RIGHT_PAREN
+            // elements: accumulate_id_clause, lhs_or, accumulate_key, RIGHT_PAREN, accumulate_init_clause
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6548,21 +6598,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 560:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+            // 559:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_accumulate_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_lhs_or.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:30: ( accumulate_init_clause )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:30: ( accumulate_init_clause )?
                 if ( stream_accumulate_init_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_init_clause.next());
 
                 }
                 stream_accumulate_init_clause.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:54: ( accumulate_id_clause )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:54: ( accumulate_id_clause )?
                 if ( stream_accumulate_id_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_id_clause.next());
 
@@ -6602,16 +6652,16 @@
     };
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
     public final accumulate_init_clause_return accumulate_init_clause() throws RecognitionException {
         accumulate_init_clause_return retval = new accumulate_init_clause_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA161=null;
-        Token COMMA163=null;
-        Token COMMA165=null;
+        Token COMMA154=null;
+        Token COMMA156=null;
+        Token COMMA158=null;
         paren_chunk_return pc1 = null;
 
         paren_chunk_return pc2 = null;
@@ -6620,18 +6670,18 @@
 
         paren_chunk_return pc4 = null;
 
-        init_key_return init_key160 = null;
+        init_key_return init_key153 = null;
 
-        action_key_return action_key162 = null;
+        action_key_return action_key155 = null;
 
-        reverse_key_return reverse_key164 = null;
+        reverse_key_return reverse_key157 = null;
 
-        result_key_return result_key166 = null;
+        result_key_return result_key159 = null;
 
 
-        Object COMMA161_tree=null;
-        Object COMMA163_tree=null;
-        Object COMMA165_tree=null;
+        Object COMMA154_tree=null;
+        Object COMMA156_tree=null;
+        Object COMMA158_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleSubtreeStream stream_reverse_key=new RewriteRuleSubtreeStream(adaptor,"rule reverse_key");
         RewriteRuleSubtreeStream stream_result_key=new RewriteRuleSubtreeStream(adaptor,"rule result_key");
@@ -6639,20 +6689,20 @@
         RewriteRuleSubtreeStream stream_action_key=new RewriteRuleSubtreeStream(adaptor,"rule action_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
             {
-            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2161);
-            init_key160=init_key();
+            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2308);
+            init_key153=init_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_init_key.add(init_key160.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2166);
+            if ( backtracking==0 ) stream_init_key.add(init_key153.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2313);
             pc1=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc1.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:18: ( COMMA )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:18: ( COMMA )?
             int alt54=2;
             int LA54_0 = input.LA(1);
 
@@ -6661,11 +6711,11 @@
             }
             switch (alt54) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:18: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:18: COMMA
                     {
-                    COMMA161=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2168); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA161);
+                    COMMA154=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2315); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA154);
 
 
                     }
@@ -6673,17 +6723,17 @@
 
             }
 
-            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2172);
-            action_key162=action_key();
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2319);
+            action_key155=action_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_action_key.add(action_key162.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2176);
+            if ( backtracking==0 ) stream_action_key.add(action_key155.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2323);
             pc2=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc2.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:29: ( COMMA )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:29: ( COMMA )?
             int alt55=2;
             int LA55_0 = input.LA(1);
 
@@ -6692,11 +6742,11 @@
             }
             switch (alt55) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:29: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:29: COMMA
                     {
-                    COMMA163=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2178); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA163);
+                    COMMA156=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2325); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA156);
 
 
                     }
@@ -6704,24 +6754,24 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
             int alt57=2;
             alt57 = dfa57.predict(input);
             switch (alt57) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:4: reverse_key pc3= paren_chunk ( COMMA )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:4: reverse_key pc3= paren_chunk ( COMMA )?
                     {
-                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2184);
-                    reverse_key164=reverse_key();
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2331);
+                    reverse_key157=reverse_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key164.getTree());
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2188);
+                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key157.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2335);
                     pc3=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_paren_chunk.add(pc3.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:32: ( COMMA )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:32: ( COMMA )?
                     int alt56=2;
                     int LA56_0 = input.LA(1);
 
@@ -6730,11 +6780,11 @@
                     }
                     switch (alt56) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:32: COMMA
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:32: COMMA
                             {
-                            COMMA165=(Token)input.LT(1);
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2190); if (failed) return retval;
-                            if ( backtracking==0 ) stream_COMMA.add(COMMA165);
+                            COMMA158=(Token)input.LT(1);
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2337); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COMMA.add(COMMA158);
 
 
                             }
@@ -6748,19 +6798,19 @@
 
             }
 
-            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2196);
-            result_key166=result_key();
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2343);
+            result_key159=result_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_result_key.add(result_key166.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2200);
+            if ( backtracking==0 ) stream_result_key.add(result_key159.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2347);
             pc4=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc4.getTree());
 
             // AST REWRITE
-            // elements: pc3, init_key, pc4, result_key, reverse_key, action_key, pc2, pc1
+            // elements: pc3, pc2, action_key, pc1, pc4, init_key, result_key, reverse_key
             // token labels: 
             // rule labels: pc2, pc4, pc3, pc1, retval
             // token list labels: 
@@ -6774,14 +6824,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 569:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            // 568:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_INIT_CLAUSE, "VT_ACCUMULATE_INIT_CLAUSE"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:33: ^( init_key $pc1)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:33: ^( init_key $pc1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_init_key.nextNode(), root_2);
@@ -6790,7 +6840,7 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:50: ^( action_key $pc2)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:50: ^( action_key $pc2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
@@ -6799,9 +6849,9 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:69: ( ^( reverse_key $pc3) )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:69: ( ^( reverse_key $pc3) )?
                 if ( stream_pc3.hasNext()||stream_reverse_key.hasNext() ) {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:69: ^( reverse_key $pc3)
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:69: ^( reverse_key $pc3)
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
@@ -6814,7 +6864,7 @@
                 }
                 stream_pc3.reset();
                 stream_reverse_key.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:90: ^( result_key $pc4)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:90: ^( result_key $pc4)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
@@ -6856,7 +6906,7 @@
     };
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
     public final accumulate_id_clause_return accumulate_id_clause() throws RecognitionException {
         accumulate_id_clause_return retval = new accumulate_id_clause_return();
         retval.start = input.LT(1);
@@ -6871,14 +6921,14 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:4: id= ID text= paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:4: id= ID text= paren_chunk
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2249); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2396); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2253);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2400);
             text=paren_chunk();
             _fsp--;
             if (failed) return retval;
@@ -6895,9 +6945,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 574:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            // 573:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:574:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_ID_CLAUSE, "VT_ACCUMULATE_ID_CLAUSE"), root_1);
@@ -6937,51 +6987,51 @@
     };
 
     // $ANTLR start collect_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) ;
     public final collect_statement_return collect_statement() throws RecognitionException {
         collect_statement_return retval = new collect_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN168=null;
-        Token RIGHT_PAREN170=null;
-        collect_key_return collect_key167 = null;
+        Token LEFT_PAREN161=null;
+        Token RIGHT_PAREN163=null;
+        collect_key_return collect_key160 = null;
 
-        pattern_source_return pattern_source169 = null;
+        pattern_source_return pattern_source162 = null;
 
 
-        Object LEFT_PAREN168_tree=null;
-        Object RIGHT_PAREN170_tree=null;
+        Object LEFT_PAREN161_tree=null;
+        Object RIGHT_PAREN163_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_collect_key=new RewriteRuleSubtreeStream(adaptor,"rule collect_key");
         RewriteRuleSubtreeStream stream_pattern_source=new RewriteRuleSubtreeStream(adaptor,"rule pattern_source");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
             {
-            pushFollow(FOLLOW_collect_key_in_collect_statement2275);
-            collect_key167=collect_key();
+            pushFollow(FOLLOW_collect_key_in_collect_statement2422);
+            collect_key160=collect_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_collect_key.add(collect_key167.getTree());
-            LEFT_PAREN168=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2279); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN168);
+            if ( backtracking==0 ) stream_collect_key.add(collect_key160.getTree());
+            LEFT_PAREN161=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2426); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN161);
 
-            pushFollow(FOLLOW_pattern_source_in_collect_statement2281);
-            pattern_source169=pattern_source();
+            pushFollow(FOLLOW_pattern_source_in_collect_statement2428);
+            pattern_source162=pattern_source();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_pattern_source.add(pattern_source169.getTree());
-            RIGHT_PAREN170=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2283); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN170);
+            if ( backtracking==0 ) stream_pattern_source.add(pattern_source162.getTree());
+            RIGHT_PAREN163=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2430); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN163);
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, collect_key, pattern_source
+            // elements: collect_key, pattern_source, RIGHT_PAREN
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6991,9 +7041,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 580:2: -> ^( collect_key pattern_source RIGHT_PAREN )
+            // 579:2: -> ^( collect_key pattern_source RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:5: ^( collect_key pattern_source RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:579:5: ^( collect_key pattern_source RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_collect_key.nextNode(), root_1);
@@ -7033,37 +7083,37 @@
     };
 
     // $ANTLR start entrypoint_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
     public final entrypoint_statement_return entrypoint_statement() throws RecognitionException {
         entrypoint_statement_return retval = new entrypoint_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        entry_point_key_return entry_point_key171 = null;
+        entry_point_key_return entry_point_key164 = null;
 
-        entrypoint_id_return entrypoint_id172 = null;
+        entrypoint_id_return entrypoint_id165 = null;
 
 
         RewriteRuleSubtreeStream stream_entrypoint_id=new RewriteRuleSubtreeStream(adaptor,"rule entrypoint_id");
         RewriteRuleSubtreeStream stream_entry_point_key=new RewriteRuleSubtreeStream(adaptor,"rule entry_point_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:4: entry_point_key entrypoint_id
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:4: entry_point_key entrypoint_id
             {
-            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2305);
-            entry_point_key171=entry_point_key();
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2452);
+            entry_point_key164=entry_point_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key171.getTree());
-            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2307);
-            entrypoint_id172=entrypoint_id();
+            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key164.getTree());
+            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2454);
+            entrypoint_id165=entrypoint_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id172.getTree());
+            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id165.getTree());
 
             // AST REWRITE
-            // elements: entry_point_key, entrypoint_id
+            // elements: entrypoint_id, entry_point_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7073,9 +7123,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 585:2: -> ^( entry_point_key entrypoint_id )
+            // 584:2: -> ^( entry_point_key entrypoint_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:585:5: ^( entry_point_key entrypoint_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:5: ^( entry_point_key entrypoint_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
@@ -7114,7 +7164,7 @@
     };
 
     // $ANTLR start entrypoint_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );
     public final entrypoint_id_return entrypoint_id() throws RecognitionException {
         entrypoint_id_return retval = new entrypoint_id_return();
         retval.start = input.LT(1);
@@ -7128,7 +7178,7 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
             int alt58=2;
             int LA58_0 = input.LA(1);
 
@@ -7141,16 +7191,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("588:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 58, 0, input);
+                    new NoViableAltException("587:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 58, 0, input);
 
                 throw nvae;
             }
             switch (alt58) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_entrypoint_id2330); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_entrypoint_id2477); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
 
@@ -7165,7 +7215,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 589:14: -> VT_ENTRYPOINT_ID[$value]
+                    // 588:14: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -7176,10 +7226,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2343); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2490); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
 
@@ -7194,7 +7244,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 590:18: -> VT_ENTRYPOINT_ID[$value]
+                    // 589:18: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -7229,32 +7279,32 @@
     };
 
     // $ANTLR start from_source
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
     public final from_source_return from_source() throws RecognitionException {
         from_source_return retval = new from_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID173=null;
+        Token ID166=null;
         paren_chunk_return args = null;
 
-        expression_chain_return expression_chain174 = null;
+        expression_chain_return expression_chain167 = null;
 
 
-        Object ID173_tree=null;
+        Object ID166_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
             {
-            ID173=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_source2359); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID173);
+            ID166=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_source2506); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID166);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
             int alt59=2;
             int LA59_0 = input.LA(1);
 
@@ -7284,9 +7334,9 @@
             }
             switch (alt59) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:5: ( LEFT_PAREN )=>args= paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ( LEFT_PAREN )=>args= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source2372);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source2519);
                     args=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -7297,7 +7347,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:3: ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: ( expression_chain )?
             int alt60=2;
             int LA60_0 = input.LA(1);
 
@@ -7306,13 +7356,13 @@
             }
             switch (alt60) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:3: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source2379);
-                    expression_chain174=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_from_source2526);
+                    expression_chain167=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain174.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain167.getTree());
 
                     }
                     break;
@@ -7321,7 +7371,7 @@
 
 
             // AST REWRITE
-            // elements: expression_chain, paren_chunk, ID
+            // elements: ID, paren_chunk, expression_chain
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7331,21 +7381,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 597:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            // 596:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FROM_SOURCE, "VT_FROM_SOURCE"), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:25: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:25: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:38: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:38: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -7384,7 +7434,7 @@
     };
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
     public final expression_chain_return expression_chain() throws RecognitionException {
         expression_chain_return retval = new expression_chain_return();
         retval.start = input.LT(1);
@@ -7392,34 +7442,34 @@
         Object root_0 = null;
 
         Token startToken=null;
-        Token ID175=null;
-        square_chunk_return square_chunk176 = null;
+        Token ID168=null;
+        square_chunk_return square_chunk169 = null;
 
-        paren_chunk_return paren_chunk177 = null;
+        paren_chunk_return paren_chunk170 = null;
 
-        expression_chain_return expression_chain178 = null;
+        expression_chain_return expression_chain171 = null;
 
 
         Object startToken_tree=null;
-        Object ID175_tree=null;
+        Object ID168_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
             {
             startToken=(Token)input.LT(1);
-            match(input,DOT,FOLLOW_DOT_in_expression_chain2411); if (failed) return retval;
+            match(input,DOT,FOLLOW_DOT_in_expression_chain2558); if (failed) return retval;
             if ( backtracking==0 ) stream_DOT.add(startToken);
 
-            ID175=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_expression_chain2413); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID175);
+            ID168=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain2560); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID168);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
             int alt61=3;
             int LA61_0 = input.LA(1);
 
@@ -7452,31 +7502,31 @@
             }
             switch (alt61) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:6: ( LEFT_SQUARE )=> square_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:6: ( LEFT_SQUARE )=> square_chunk
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain2433);
-                    square_chunk176=square_chunk();
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain2580);
+                    square_chunk169=square_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk176.getTree());
+                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk169.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:6: ( LEFT_PAREN )=> paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:6: ( LEFT_PAREN )=> paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2455);
-                    paren_chunk177=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2602);
+                    paren_chunk170=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk177.getTree());
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk170.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:4: ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:4: ( expression_chain )?
             int alt62=2;
             int LA62_0 = input.LA(1);
 
@@ -7485,13 +7535,13 @@
             }
             switch (alt62) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:4: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:4: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain2466);
-                    expression_chain178=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain2613);
+                    expression_chain171=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain178.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain171.getTree());
 
                     }
                     break;
@@ -7500,7 +7550,7 @@
 
 
             // AST REWRITE
-            // elements: paren_chunk, square_chunk, ID, expression_chain
+            // elements: square_chunk, paren_chunk, ID, expression_chain
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7510,27 +7560,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 609:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            // 608:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_EXPRESSION_CHAIN, startToken), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:45: ( square_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:45: ( square_chunk )?
                 if ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
                 }
                 stream_square_chunk.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:59: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:59: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:72: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:72: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -7569,22 +7619,22 @@
     };
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
     public final lhs_pattern_return lhs_pattern() throws RecognitionException {
         lhs_pattern_return retval = new lhs_pattern_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        fact_binding_return fact_binding179 = null;
+        fact_binding_return fact_binding172 = null;
 
-        fact_return fact180 = null;
+        fact_return fact173 = null;
 
 
         RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
             int alt63=2;
             int LA63_0 = input.LA(1);
 
@@ -7600,7 +7650,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("612:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 1, input);
+                        new NoViableAltException("611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 1, input);
 
                     throw nvae;
                 }
@@ -7608,19 +7658,19 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("612:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 0, input);
+                    new NoViableAltException("611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 0, input);
 
                 throw nvae;
             }
             switch (alt63) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:4: fact_binding
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:4: fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2499);
-                    fact_binding179=fact_binding();
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2646);
+                    fact_binding172=fact_binding();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding179.getTree());
+                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding172.getTree());
 
                     // AST REWRITE
                     // elements: fact_binding
@@ -7633,9 +7683,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 613:17: -> ^( VT_PATTERN fact_binding )
+                    // 612:17: -> ^( VT_PATTERN fact_binding )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:20: ^( VT_PATTERN fact_binding )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:20: ^( VT_PATTERN fact_binding )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -7652,13 +7702,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:4: fact
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:4: fact
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern2512);
-                    fact180=fact();
+                    pushFollow(FOLLOW_fact_in_lhs_pattern2659);
+                    fact173=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact180.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact173.getTree());
 
                     // AST REWRITE
                     // elements: fact
@@ -7671,9 +7721,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 614:9: -> ^( VT_PATTERN fact )
+                    // 613:9: -> ^( VT_PATTERN fact )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:12: ^( VT_PATTERN fact )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:12: ^( VT_PATTERN fact )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -7714,39 +7764,39 @@
     };
 
     // $ANTLR start fact_binding
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) ;
     public final fact_binding_return fact_binding() throws RecognitionException {
         fact_binding_return retval = new fact_binding_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN183=null;
-        Token RIGHT_PAREN185=null;
-        label_return label181 = null;
+        Token LEFT_PAREN176=null;
+        Token RIGHT_PAREN178=null;
+        label_return label174 = null;
 
-        fact_return fact182 = null;
+        fact_return fact175 = null;
 
-        fact_binding_expression_return fact_binding_expression184 = null;
+        fact_binding_expression_return fact_binding_expression177 = null;
 
 
-        Object LEFT_PAREN183_tree=null;
-        Object RIGHT_PAREN185_tree=null;
+        Object LEFT_PAREN176_tree=null;
+        Object RIGHT_PAREN178_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
         RewriteRuleSubtreeStream stream_fact_binding_expression=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding_expression");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             {
-            pushFollow(FOLLOW_label_in_fact_binding2532);
-            label181=label();
+            pushFollow(FOLLOW_label_in_fact_binding2679);
+            label174=label();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_label.add(label181.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            if ( backtracking==0 ) stream_label.add(label174.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             int alt64=2;
             int LA64_0 = input.LA(1);
 
@@ -7759,37 +7809,37 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("619:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 64, 0, input);
+                    new NoViableAltException("618:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 64, 0, input);
 
                 throw nvae;
             }
             switch (alt64) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:5: fact
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:5: fact
                     {
-                    pushFollow(FOLLOW_fact_in_fact_binding2538);
-                    fact182=fact();
+                    pushFollow(FOLLOW_fact_in_fact_binding2685);
+                    fact175=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact182.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact175.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:620:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
                     {
-                    LEFT_PAREN183=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2545); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN183);
+                    LEFT_PAREN176=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2692); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN176);
 
-                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2547);
-                    fact_binding_expression184=fact_binding_expression();
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2694);
+                    fact_binding_expression177=fact_binding_expression();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression184.getTree());
-                    RIGHT_PAREN185=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2549); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN185);
+                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression177.getTree());
+                    RIGHT_PAREN178=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2696); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN178);
 
 
                     }
@@ -7799,7 +7849,7 @@
 
 
             // AST REWRITE
-            // elements: fact, fact_binding_expression, label, RIGHT_PAREN
+            // elements: RIGHT_PAREN, fact_binding_expression, fact, label
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7809,27 +7859,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 622:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+            // 621:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_BINDING, "VT_FACT_BINDING"), root_1);
 
                 adaptor.addChild(root_1, stream_label.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:30: ( fact )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:30: ( fact )?
                 if ( stream_fact.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact.next());
 
                 }
                 stream_fact.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:36: ( fact_binding_expression )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:36: ( fact_binding_expression )?
                 if ( stream_fact_binding_expression.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact_binding_expression.next());
 
                 }
                 stream_fact_binding_expression.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:61: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:61: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -7868,7 +7918,7 @@
     };
 
     // $ANTLR start fact_binding_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:625:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
     public final fact_binding_expression_return fact_binding_expression() throws RecognitionException {
         fact_binding_expression_return retval = new fact_binding_expression_return();
         retval.start = input.LT(1);
@@ -7878,9 +7928,9 @@
         Token pipe=null;
         or_key_return value = null;
 
-        fact_return fact186 = null;
+        fact_return fact179 = null;
 
-        fact_return fact187 = null;
+        fact_return fact180 = null;
 
 
         Object pipe_tree=null;
@@ -7891,17 +7941,17 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:5: ( fact -> fact )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:6: fact
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:5: ( fact -> fact )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:6: fact
             {
-            pushFollow(FOLLOW_fact_in_fact_binding_expression2588);
-            fact186=fact();
+            pushFollow(FOLLOW_fact_in_fact_binding_expression2735);
+            fact179=fact();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_fact.add(fact186.getTree());
+            if ( backtracking==0 ) stream_fact.add(fact179.getTree());
 
             // AST REWRITE
             // elements: fact
@@ -7914,7 +7964,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 628:11: -> fact
+            // 627:11: -> fact
             {
                 adaptor.addChild(root_0, stream_fact.next());
 
@@ -7924,7 +7974,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             loop66:
             do {
                 int alt66=2;
@@ -7940,9 +7990,9 @@
 
                 switch (alt66) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
             	    {
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:22: (value= or_key | pipe= DOUBLE_PIPE )
             	    int alt65=2;
             	    int LA65_0 = input.LA(1);
 
@@ -7955,15 +8005,15 @@
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("628:22: (value= or_key | pipe= DOUBLE_PIPE )", 65, 0, input);
+            	            new NoViableAltException("627:22: (value= or_key | pipe= DOUBLE_PIPE )", 65, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt65) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:23: value= or_key
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:23: value= or_key
             	            {
-            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2600);
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2747);
             	            value=or_key();
             	            _fsp--;
             	            if (failed) return retval;
@@ -7975,10 +8025,10 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:62: pipe= DOUBLE_PIPE
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:62: pipe= DOUBLE_PIPE
             	            {
             	            pipe=(Token)input.LT(1);
-            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2606); if (failed) return retval;
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2753); if (failed) return retval;
             	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
             	            if ( backtracking==0 ) {
@@ -7990,14 +8040,14 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_fact_in_fact_binding_expression2611);
-            	    fact187=fact();
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression2758);
+            	    fact180=fact();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_fact.add(fact187.getTree());
+            	    if ( backtracking==0 ) stream_fact.add(fact180.getTree());
 
             	    // AST REWRITE
-            	    // elements: fact, fact_binding_expression
+            	    // elements: fact_binding_expression, fact
             	    // token labels: 
             	    // rule labels: retval
             	    // token list labels: 
@@ -8007,9 +8057,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 629:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    // 628:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
             	    {
-            	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_OR, orToken), root_1);
@@ -8058,40 +8108,41 @@
     };
 
     // $ANTLR start fact
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:1: fact : pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:631:1: fact : pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) ;
     public final fact_return fact() throws RecognitionException {
         fact_return retval = new fact_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN189=null;
-        Token RIGHT_PAREN191=null;
-        pattern_type_return pattern_type188 = null;
+        Token LEFT_PAREN182=null;
+        Token RIGHT_PAREN184=null;
+        pattern_type_return pattern_type181 = null;
 
-        constraints_return constraints190 = null;
+        constraints_return constraints183 = null;
 
 
-        Object LEFT_PAREN189_tree=null;
-        Object RIGHT_PAREN191_tree=null;
+        Object LEFT_PAREN182_tree=null;
+        Object RIGHT_PAREN184_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_pattern_type=new RewriteRuleSubtreeStream(adaptor,"rule pattern_type");
         RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
+         pushParaphrases(DroolsParaphareseTypes.PATTERN); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
             {
-            pushFollow(FOLLOW_pattern_type_in_fact2640);
-            pattern_type188=pattern_type();
+            pushFollow(FOLLOW_pattern_type_in_fact2798);
+            pattern_type181=pattern_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_pattern_type.add(pattern_type188.getTree());
-            LEFT_PAREN189=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2642); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN189);
+            if ( backtracking==0 ) stream_pattern_type.add(pattern_type181.getTree());
+            LEFT_PAREN182=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2800); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN182);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:28: ( constraints )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:28: ( constraints )?
             int alt67=2;
             int LA67_0 = input.LA(1);
 
@@ -8100,22 +8151,22 @@
             }
             switch (alt67) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:28: constraints
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:28: constraints
                     {
-                    pushFollow(FOLLOW_constraints_in_fact2644);
-                    constraints190=constraints();
+                    pushFollow(FOLLOW_constraints_in_fact2802);
+                    constraints183=constraints();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_constraints.add(constraints190.getTree());
+                    if ( backtracking==0 ) stream_constraints.add(constraints183.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN191=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2647); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN191);
+            RIGHT_PAREN184=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2805); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN184);
 
 
             // AST REWRITE
@@ -8129,15 +8180,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 634:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+            // 635:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:5: ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:5: ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT, "VT_FACT"), root_1);
 
                 adaptor.addChild(root_1, stream_pattern_type.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:28: ( constraints )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:28: ( constraints )?
                 if ( stream_constraints.hasNext() ) {
                     adaptor.addChild(root_1, stream_constraints.next());
 
@@ -8160,6 +8211,9 @@
                 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -8177,33 +8231,33 @@
     };
 
     // $ANTLR start constraints
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:1: constraints : constraint ( COMMA constraint )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:1: constraints : constraint ( COMMA constraint )* ;
     public final constraints_return constraints() throws RecognitionException {
         constraints_return retval = new constraints_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA193=null;
-        constraint_return constraint192 = null;
+        Token COMMA186=null;
+        constraint_return constraint185 = null;
 
-        constraint_return constraint194 = null;
+        constraint_return constraint187 = null;
 
 
-        Object COMMA193_tree=null;
+        Object COMMA186_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:2: ( constraint ( COMMA constraint )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:4: constraint ( COMMA constraint )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:2: ( constraint ( COMMA constraint )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:4: constraint ( COMMA constraint )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_in_constraints2672);
-            constraint192=constraint();
+            pushFollow(FOLLOW_constraint_in_constraints2830);
+            constraint185=constraint();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint192.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:15: ( COMMA constraint )*
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint185.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:15: ( COMMA constraint )*
             loop68:
             do {
                 int alt68=2;
@@ -8216,15 +8270,15 @@
 
                 switch (alt68) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:17: COMMA constraint
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:17: COMMA constraint
             	    {
-            	    COMMA193=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2676); if (failed) return retval;
-            	    pushFollow(FOLLOW_constraint_in_constraints2679);
-            	    constraint194=constraint();
+            	    COMMA186=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2834); if (failed) return retval;
+            	    pushFollow(FOLLOW_constraint_in_constraints2837);
+            	    constraint187=constraint();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint194.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint187.getTree());
 
             	    }
             	    break;
@@ -8260,28 +8314,28 @@
     };
 
     // $ANTLR start constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:1: constraint : or_constr ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:1: constraint : or_constr ;
     public final constraint_return constraint() throws RecognitionException {
         constraint_return retval = new constraint_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        or_constr_return or_constr195 = null;
+        or_constr_return or_constr188 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:2: ( or_constr )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:4: or_constr
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:643:2: ( or_constr )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:643:4: or_constr
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_or_constr_in_constraint2693);
-            or_constr195=or_constr();
+            pushFollow(FOLLOW_or_constr_in_constraint2851);
+            or_constr188=or_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr195.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr188.getTree());
 
             }
 
@@ -8308,33 +8362,33 @@
     };
 
     // $ANTLR start or_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
     public final or_constr_return or_constr() throws RecognitionException {
         or_constr_return retval = new or_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE197=null;
-        and_constr_return and_constr196 = null;
+        Token DOUBLE_PIPE190=null;
+        and_constr_return and_constr189 = null;
 
-        and_constr_return and_constr198 = null;
+        and_constr_return and_constr191 = null;
 
 
-        Object DOUBLE_PIPE197_tree=null;
+        Object DOUBLE_PIPE190_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:4: and_constr ( DOUBLE_PIPE and_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:4: and_constr ( DOUBLE_PIPE and_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_constr_in_or_constr2704);
-            and_constr196=and_constr();
+            pushFollow(FOLLOW_and_constr_in_or_constr2862);
+            and_constr189=and_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr196.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:15: ( DOUBLE_PIPE and_constr )*
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr189.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:15: ( DOUBLE_PIPE and_constr )*
             loop69:
             do {
                 int alt69=2;
@@ -8347,19 +8401,19 @@
 
                 switch (alt69) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:17: DOUBLE_PIPE and_constr
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:17: DOUBLE_PIPE and_constr
             	    {
-            	    DOUBLE_PIPE197=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2708); if (failed) return retval;
+            	    DOUBLE_PIPE190=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2866); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE197_tree = (Object)adaptor.create(DOUBLE_PIPE197);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE197_tree, root_0);
+            	    DOUBLE_PIPE190_tree = (Object)adaptor.create(DOUBLE_PIPE190);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE190_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr2711);
-            	    and_constr198=and_constr();
+            	    pushFollow(FOLLOW_and_constr_in_or_constr2869);
+            	    and_constr191=and_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr198.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr191.getTree());
 
             	    }
             	    break;
@@ -8395,33 +8449,33 @@
     };
 
     // $ANTLR start and_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
     public final and_constr_return and_constr() throws RecognitionException {
         and_constr_return retval = new and_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER200=null;
-        unary_constr_return unary_constr199 = null;
+        Token DOUBLE_AMPER193=null;
+        unary_constr_return unary_constr192 = null;
 
-        unary_constr_return unary_constr201 = null;
+        unary_constr_return unary_constr194 = null;
 
 
-        Object DOUBLE_AMPER200_tree=null;
+        Object DOUBLE_AMPER193_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:4: unary_constr ( DOUBLE_AMPER unary_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_unary_constr_in_and_constr2726);
-            unary_constr199=unary_constr();
+            pushFollow(FOLLOW_unary_constr_in_and_constr2884);
+            unary_constr192=unary_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr199.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:17: ( DOUBLE_AMPER unary_constr )*
+            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr192.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:17: ( DOUBLE_AMPER unary_constr )*
             loop70:
             do {
                 int alt70=2;
@@ -8434,19 +8488,19 @@
 
                 switch (alt70) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:19: DOUBLE_AMPER unary_constr
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:19: DOUBLE_AMPER unary_constr
             	    {
-            	    DOUBLE_AMPER200=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2730); if (failed) return retval;
+            	    DOUBLE_AMPER193=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2888); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER200_tree = (Object)adaptor.create(DOUBLE_AMPER200);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER200_tree, root_0);
+            	    DOUBLE_AMPER193_tree = (Object)adaptor.create(DOUBLE_AMPER193);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER193_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr2733);
-            	    unary_constr201=unary_constr();
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr2891);
+            	    unary_constr194=unary_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr201.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr194.getTree());
 
             	    }
             	    break;
@@ -8482,29 +8536,29 @@
     };
 
     // $ANTLR start unary_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );
     public final unary_constr_return unary_constr() throws RecognitionException {
         unary_constr_return retval = new unary_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN205=null;
-        Token RIGHT_PAREN207=null;
-        eval_key_return eval_key202 = null;
+        Token LEFT_PAREN198=null;
+        Token RIGHT_PAREN200=null;
+        eval_key_return eval_key195 = null;
 
-        paren_chunk_return paren_chunk203 = null;
+        paren_chunk_return paren_chunk196 = null;
 
-        field_constraint_return field_constraint204 = null;
+        field_constraint_return field_constraint197 = null;
 
-        or_constr_return or_constr206 = null;
+        or_constr_return or_constr199 = null;
 
 
-        Object LEFT_PAREN205_tree=null;
-        Object RIGHT_PAREN207_tree=null;
+        Object LEFT_PAREN198_tree=null;
+        Object RIGHT_PAREN200_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:655:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
             int alt71=3;
             int LA71_0 = input.LA(1);
 
@@ -8526,7 +8580,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("653:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 14, input);
+                            new NoViableAltException("654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 14, input);
 
                         throw nvae;
                     }
@@ -8534,7 +8588,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("653:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 1, input);
+                        new NoViableAltException("654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 1, input);
 
                     throw nvae;
                 }
@@ -8545,59 +8599,59 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("653:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 0, input);
+                    new NoViableAltException("654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 0, input);
 
                 throw nvae;
             }
             switch (alt71) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:655:4: eval_key paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:4: eval_key paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_eval_key_in_unary_constr2754);
-                    eval_key202=eval_key();
+                    pushFollow(FOLLOW_eval_key_in_unary_constr2912);
+                    eval_key195=eval_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(eval_key202.getTree(), root_0);
-                    pushFollow(FOLLOW_paren_chunk_in_unary_constr2757);
-                    paren_chunk203=paren_chunk();
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(eval_key195.getTree(), root_0);
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr2915);
+                    paren_chunk196=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk203.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk196.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:4: field_constraint
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: field_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr2762);
-                    field_constraint204=field_constraint();
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr2920);
+                    field_constraint197=field_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint204.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint197.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:4: LEFT_PAREN or_constr RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    LEFT_PAREN205=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2767); if (failed) return retval;
-                    pushFollow(FOLLOW_or_constr_in_unary_constr2770);
-                    or_constr206=or_constr();
+                    LEFT_PAREN198=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2925); if (failed) return retval;
+                    pushFollow(FOLLOW_or_constr_in_unary_constr2928);
+                    or_constr199=or_constr();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, or_constr206.getTree());
-                    RIGHT_PAREN207=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2772); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, or_constr199.getTree());
+                    RIGHT_PAREN200=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2930); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN207_tree = (Object)adaptor.create(RIGHT_PAREN207);
-                    adaptor.addChild(root_0, RIGHT_PAREN207_tree);
+                    RIGHT_PAREN200_tree = (Object)adaptor.create(RIGHT_PAREN200);
+                    adaptor.addChild(root_0, RIGHT_PAREN200_tree);
                     }
 
                     }
@@ -8627,7 +8681,7 @@
     };
 
     // $ANTLR start field_constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:660:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:661:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
     public final field_constraint_return field_constraint() throws RecognitionException {
         field_constraint_return retval = new field_constraint_return();
         retval.start = input.LT(1);
@@ -8635,17 +8689,17 @@
         Object root_0 = null;
 
         Token arw=null;
-        label_return label208 = null;
+        label_return label201 = null;
 
-        accessor_path_return accessor_path209 = null;
+        accessor_path_return accessor_path202 = null;
 
-        or_restr_connective_return or_restr_connective210 = null;
+        or_restr_connective_return or_restr_connective203 = null;
 
-        paren_chunk_return paren_chunk211 = null;
+        paren_chunk_return paren_chunk204 = null;
 
-        accessor_path_return accessor_path212 = null;
+        accessor_path_return accessor_path205 = null;
 
-        or_restr_connective_return or_restr_connective213 = null;
+        or_restr_connective_return or_restr_connective206 = null;
 
 
         Object arw_tree=null;
@@ -8658,7 +8712,7 @@
         	boolean isArrow = false;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
             int alt73=2;
             int LA73_0 = input.LA(1);
 
@@ -8674,7 +8728,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("660:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 1, input);
+                        new NoViableAltException("661:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 1, input);
 
                     throw nvae;
                 }
@@ -8682,25 +8736,25 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("660:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 0, input);
+                    new NoViableAltException("661:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 73, 0, input);
 
                 throw nvae;
             }
             switch (alt73) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
                     {
-                    pushFollow(FOLLOW_label_in_field_constraint2786);
-                    label208=label();
+                    pushFollow(FOLLOW_label_in_field_constraint2944);
+                    label201=label();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_label.add(label208.getTree());
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint2788);
-                    accessor_path209=accessor_path();
+                    if ( backtracking==0 ) stream_label.add(label201.getTree());
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint2946);
+                    accessor_path202=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path209.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path202.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:25: ( or_restr_connective | arw= ARROW paren_chunk )?
                     int alt72=3;
                     int LA72_0 = input.LA(1);
 
@@ -8712,28 +8766,28 @@
                     }
                     switch (alt72) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:27: or_restr_connective
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:27: or_restr_connective
                             {
-                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint2792);
-                            or_restr_connective210=or_restr_connective();
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint2950);
+                            or_restr_connective203=or_restr_connective();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective210.getTree());
+                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective203.getTree());
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:49: arw= ARROW paren_chunk
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:49: arw= ARROW paren_chunk
                             {
                             arw=(Token)input.LT(1);
-                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint2798); if (failed) return retval;
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint2956); if (failed) return retval;
                             if ( backtracking==0 ) stream_ARROW.add(arw);
 
-                            pushFollow(FOLLOW_paren_chunk_in_field_constraint2800);
-                            paren_chunk211=paren_chunk();
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint2958);
+                            paren_chunk204=paren_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk211.getTree());
+                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk204.getTree());
                             if ( backtracking==0 ) {
                               isArrow = true;
                             }
@@ -8745,7 +8799,7 @@
 
 
                     // AST REWRITE
-                    // elements: label, paren_chunk, label, or_restr_connective, accessor_path, accessor_path
+                    // elements: accessor_path, label, paren_chunk, label, or_restr_connective, accessor_path
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -8755,15 +8809,15 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 664:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                    // 665:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
                     if (isArrow) {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
 
                         adaptor.addChild(root_1, stream_label.next());
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:39: ^( VT_FIELD accessor_path )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:39: ^( VT_FIELD accessor_path )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
@@ -8775,9 +8829,9 @@
 
                         adaptor.addChild(root_0, root_1);
                         }
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
                         if ( stream_paren_chunk.hasNext() ) {
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:66: ^( VK_EVAL[$arw] paren_chunk )
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:66: ^( VK_EVAL[$arw] paren_chunk )
                             {
                             Object root_1 = (Object)adaptor.nil();
                             root_1 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_1);
@@ -8791,21 +8845,21 @@
                         stream_paren_chunk.reset();
 
                     }
-                    else // 665:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    else // 666:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
 
                         adaptor.addChild(root_1, stream_label.next());
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
 
                         adaptor.addChild(root_2, stream_accessor_path.next());
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:53: ( or_restr_connective )?
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:53: ( or_restr_connective )?
                         if ( stream_or_restr_connective.hasNext() ) {
                             adaptor.addChild(root_2, stream_or_restr_connective.next());
 
@@ -8825,18 +8879,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:4: accessor_path or_restr_connective
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:4: accessor_path or_restr_connective
                     {
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint2854);
-                    accessor_path212=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint3012);
+                    accessor_path205=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path212.getTree());
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2856);
-                    or_restr_connective213=or_restr_connective();
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path205.getTree());
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3014);
+                    or_restr_connective206=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective213.getTree());
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective206.getTree());
 
                     // AST REWRITE
                     // elements: accessor_path, or_restr_connective
@@ -8849,9 +8903,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 667:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    // 668:3: -> ^( VT_FIELD accessor_path or_restr_connective )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:6: ^( VT_FIELD accessor_path or_restr_connective )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:668:6: ^( VT_FIELD accessor_path or_restr_connective )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_1);
@@ -8893,7 +8947,7 @@
     };
 
     // $ANTLR start label
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:1: label : value= ID COLON -> VT_LABEL[$value] ;
     public final label_return label() throws RecognitionException {
         label_return retval = new label_return();
         retval.start = input.LT(1);
@@ -8901,24 +8955,24 @@
         Object root_0 = null;
 
         Token value=null;
-        Token COLON214=null;
+        Token COLON207=null;
 
         Object value_tree=null;
-        Object COLON214_tree=null;
+        Object COLON207_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:7: (value= ID COLON -> VT_LABEL[$value] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:9: value= ID COLON
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:7: (value= ID COLON -> VT_LABEL[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:9: value= ID COLON
             {
             value=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_label2880); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_label3038); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(value);
 
-            COLON214=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_label2882); if (failed) return retval;
-            if ( backtracking==0 ) stream_COLON.add(COLON214);
+            COLON207=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_label3040); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON207);
 
 
             // AST REWRITE
@@ -8932,7 +8986,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 670:24: -> VT_LABEL[$value]
+            // 671:24: -> VT_LABEL[$value]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
 
@@ -8965,52 +9019,52 @@
     };
 
     // $ANTLR start or_restr_connective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:1: or_restr_connective : and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:1: or_restr_connective : and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* ;
     public final or_restr_connective_return or_restr_connective() throws RecognitionException {
         or_restr_connective_return retval = new or_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE216=null;
-        and_restr_connective_return and_restr_connective215 = null;
+        Token DOUBLE_PIPE209=null;
+        and_restr_connective_return and_restr_connective208 = null;
 
-        and_restr_connective_return and_restr_connective217 = null;
+        and_restr_connective_return and_restr_connective210 = null;
 
 
-        Object DOUBLE_PIPE216_tree=null;
+        Object DOUBLE_PIPE209_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:2: ( and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:4: and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:2: ( and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:4: and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2898);
-            and_restr_connective215=and_restr_connective();
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3056);
+            and_restr_connective208=and_restr_connective();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective215.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective208.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
             loop74:
             do {
                 int alt74=2;
                 alt74 = dfa74.predict(input);
                 switch (alt74) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:26: ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:26: ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective
             	    {
-            	    DOUBLE_PIPE216=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2906); if (failed) return retval;
+            	    DOUBLE_PIPE209=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3064); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE216_tree = (Object)adaptor.create(DOUBLE_PIPE216);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE216_tree, root_0);
+            	    DOUBLE_PIPE209_tree = (Object)adaptor.create(DOUBLE_PIPE209);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE209_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2909);
-            	    and_restr_connective217=and_restr_connective();
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3067);
+            	    and_restr_connective210=and_restr_connective();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective217.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective210.getTree());
 
             	    }
             	    break;
@@ -9046,52 +9100,52 @@
     };
 
     // $ANTLR start and_restr_connective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:1: and_restr_connective : constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:1: and_restr_connective : constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* ;
     public final and_restr_connective_return and_restr_connective() throws RecognitionException {
         and_restr_connective_return retval = new and_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER219=null;
-        constraint_expression_return constraint_expression218 = null;
+        Token DOUBLE_AMPER212=null;
+        constraint_expression_return constraint_expression211 = null;
 
-        constraint_expression_return constraint_expression220 = null;
+        constraint_expression_return constraint_expression213 = null;
 
 
-        Object DOUBLE_AMPER219_tree=null;
+        Object DOUBLE_AMPER212_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:2: ( constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:4: constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:2: ( constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:4: constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2924);
-            constraint_expression218=constraint_expression();
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3082);
+            constraint_expression211=constraint_expression();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression218.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression211.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
             loop75:
             do {
                 int alt75=2;
                 alt75 = dfa75.predict(input);
                 switch (alt75) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:27: ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:27: ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression
             	    {
-            	    DOUBLE_AMPER219=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2932); if (failed) return retval;
+            	    DOUBLE_AMPER212=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3090); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER219_tree = (Object)adaptor.create(DOUBLE_AMPER219);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER219_tree, root_0);
+            	    DOUBLE_AMPER212_tree = (Object)adaptor.create(DOUBLE_AMPER212);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER212_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2935);
-            	    constraint_expression220=constraint_expression();
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3093);
+            	    constraint_expression213=constraint_expression();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression220.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression213.getTree());
 
             	    }
             	    break;
@@ -9127,27 +9181,27 @@
     };
 
     // $ANTLR start constraint_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );
     public final constraint_expression_return constraint_expression() throws RecognitionException {
         constraint_expression_return retval = new constraint_expression_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN223=null;
-        Token RIGHT_PAREN225=null;
-        compound_operator_return compound_operator221 = null;
+        Token LEFT_PAREN216=null;
+        Token RIGHT_PAREN218=null;
+        compound_operator_return compound_operator214 = null;
 
-        simple_operator_return simple_operator222 = null;
+        simple_operator_return simple_operator215 = null;
 
-        or_restr_connective_return or_restr_connective224 = null;
+        or_restr_connective_return or_restr_connective217 = null;
 
 
-        Object LEFT_PAREN223_tree=null;
-        Object RIGHT_PAREN225_tree=null;
+        Object LEFT_PAREN216_tree=null;
+        Object RIGHT_PAREN218_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
             int alt76=3;
             switch ( input.LA(1) ) {
             case ID:
@@ -9172,7 +9226,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 16, input);
+                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 16, input);
 
                             throw nvae;
                         }
@@ -9183,7 +9237,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 10, input);
+                            new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 10, input);
 
                         throw nvae;
                     }
@@ -9206,7 +9260,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 23, input);
+                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 23, input);
 
                             throw nvae;
                         }
@@ -9229,7 +9283,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 24, input);
+                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 24, input);
 
                             throw nvae;
                         }
@@ -9248,7 +9302,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 25, input);
+                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 25, input);
 
                             throw nvae;
                         }
@@ -9374,7 +9428,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 12, input);
+                            new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 12, input);
 
                         throw nvae;
                     }
@@ -9386,7 +9440,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 1, input);
+                        new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 1, input);
 
                     throw nvae;
                 }
@@ -9411,55 +9465,55 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 0, input);
+                    new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 0, input);
 
                 throw nvae;
             }
 
             switch (alt76) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:5: compound_operator
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:5: compound_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2957);
-                    compound_operator221=compound_operator();
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3115);
+                    compound_operator214=compound_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator221.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator214.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:4: simple_operator
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:686:4: simple_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2962);
-                    simple_operator222=simple_operator();
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3120);
+                    simple_operator215=simple_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator222.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator215.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:686:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    LEFT_PAREN223=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2967); if (failed) return retval;
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2970);
-                    or_restr_connective224=or_restr_connective();
+                    LEFT_PAREN216=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3125); if (failed) return retval;
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3128);
+                    or_restr_connective217=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, or_restr_connective224.getTree());
-                    RIGHT_PAREN225=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2972); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, or_restr_connective217.getTree());
+                    RIGHT_PAREN218=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3130); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN225_tree = (Object)adaptor.create(RIGHT_PAREN225);
-                    adaptor.addChild(root_0, RIGHT_PAREN225_tree);
+                    RIGHT_PAREN218_tree = (Object)adaptor.create(RIGHT_PAREN218);
+                    adaptor.addChild(root_0, RIGHT_PAREN218_tree);
                     }
 
                     }
@@ -9489,72 +9543,72 @@
     };
 
     // $ANTLR start simple_operator
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value ;
     public final simple_operator_return simple_operator() throws RecognitionException {
         simple_operator_return retval = new simple_operator_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token EQUAL226=null;
-        Token GREATER227=null;
-        Token GREATER_EQUAL228=null;
-        Token LESS229=null;
-        Token LESS_EQUAL230=null;
-        Token NOT_EQUAL231=null;
-        Token ID237=null;
-        Token GRAVE_ACCENT238=null;
+        Token EQUAL219=null;
+        Token GREATER220=null;
+        Token GREATER_EQUAL221=null;
+        Token LESS222=null;
+        Token LESS_EQUAL223=null;
+        Token NOT_EQUAL224=null;
+        Token ID230=null;
+        Token GRAVE_ACCENT231=null;
+        Token ID232=null;
         Token ID239=null;
-        Token ID246=null;
-        Token GRAVE_ACCENT247=null;
-        Token ID248=null;
-        not_key_return not_key232 = null;
+        Token GRAVE_ACCENT240=null;
+        Token ID241=null;
+        not_key_return not_key225 = null;
 
-        contains_key_return contains_key233 = null;
+        contains_key_return contains_key226 = null;
 
-        soundslike_key_return soundslike_key234 = null;
+        soundslike_key_return soundslike_key227 = null;
 
-        matches_key_return matches_key235 = null;
+        matches_key_return matches_key228 = null;
 
-        memberof_key_return memberof_key236 = null;
+        memberof_key_return memberof_key229 = null;
 
-        square_chunk_return square_chunk240 = null;
+        square_chunk_return square_chunk233 = null;
 
-        contains_key_return contains_key241 = null;
+        contains_key_return contains_key234 = null;
 
-        excludes_key_return excludes_key242 = null;
+        excludes_key_return excludes_key235 = null;
 
-        matches_key_return matches_key243 = null;
+        matches_key_return matches_key236 = null;
 
-        soundslike_key_return soundslike_key244 = null;
+        soundslike_key_return soundslike_key237 = null;
 
-        memberof_key_return memberof_key245 = null;
+        memberof_key_return memberof_key238 = null;
 
-        square_chunk_return square_chunk249 = null;
+        square_chunk_return square_chunk242 = null;
 
-        expression_value_return expression_value250 = null;
+        expression_value_return expression_value243 = null;
 
 
-        Object EQUAL226_tree=null;
-        Object GREATER227_tree=null;
-        Object GREATER_EQUAL228_tree=null;
-        Object LESS229_tree=null;
-        Object LESS_EQUAL230_tree=null;
-        Object NOT_EQUAL231_tree=null;
-        Object ID237_tree=null;
-        Object GRAVE_ACCENT238_tree=null;
+        Object EQUAL219_tree=null;
+        Object GREATER220_tree=null;
+        Object GREATER_EQUAL221_tree=null;
+        Object LESS222_tree=null;
+        Object LESS_EQUAL223_tree=null;
+        Object NOT_EQUAL224_tree=null;
+        Object ID230_tree=null;
+        Object GRAVE_ACCENT231_tree=null;
+        Object ID232_tree=null;
         Object ID239_tree=null;
-        Object ID246_tree=null;
-        Object GRAVE_ACCENT247_tree=null;
-        Object ID248_tree=null;
+        Object GRAVE_ACCENT240_tree=null;
+        Object ID241_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
             int alt78=14;
             switch ( input.LA(1) ) {
             case EQUAL:
@@ -9615,7 +9669,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 78, 7, input);
+                        new NoViableAltException("691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 78, 7, input);
 
                     throw nvae;
                 }
@@ -9629,93 +9683,93 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 78, 0, input);
+                    new NoViableAltException("691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 78, 0, input);
 
                 throw nvae;
             }
 
             switch (alt78) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:5: EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:5: EQUAL
                     {
-                    EQUAL226=(Token)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator2984); if (failed) return retval;
+                    EQUAL219=(Token)input.LT(1);
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3142); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    EQUAL226_tree = (Object)adaptor.create(EQUAL226);
-                    root_0 = (Object)adaptor.becomeRoot(EQUAL226_tree, root_0);
+                    EQUAL219_tree = (Object)adaptor.create(EQUAL219);
+                    root_0 = (Object)adaptor.becomeRoot(EQUAL219_tree, root_0);
                     }
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: GREATER
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: GREATER
                     {
-                    GREATER227=(Token)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator2990); if (failed) return retval;
+                    GREATER220=(Token)input.LT(1);
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3148); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER227_tree = (Object)adaptor.create(GREATER227);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER227_tree, root_0);
+                    GREATER220_tree = (Object)adaptor.create(GREATER220);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER220_tree, root_0);
                     }
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: GREATER_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: GREATER_EQUAL
                     {
-                    GREATER_EQUAL228=(Token)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator2996); if (failed) return retval;
+                    GREATER_EQUAL221=(Token)input.LT(1);
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3154); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER_EQUAL228_tree = (Object)adaptor.create(GREATER_EQUAL228);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL228_tree, root_0);
+                    GREATER_EQUAL221_tree = (Object)adaptor.create(GREATER_EQUAL221);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL221_tree, root_0);
                     }
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: LESS
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:694:4: LESS
                     {
-                    LESS229=(Token)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_simple_operator3002); if (failed) return retval;
+                    LESS222=(Token)input.LT(1);
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator3160); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS229_tree = (Object)adaptor.create(LESS229);
-                    root_0 = (Object)adaptor.becomeRoot(LESS229_tree, root_0);
+                    LESS222_tree = (Object)adaptor.create(LESS222);
+                    root_0 = (Object)adaptor.becomeRoot(LESS222_tree, root_0);
                     }
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:694:4: LESS_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:4: LESS_EQUAL
                     {
-                    LESS_EQUAL230=(Token)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3008); if (failed) return retval;
+                    LESS_EQUAL223=(Token)input.LT(1);
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3166); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS_EQUAL230_tree = (Object)adaptor.create(LESS_EQUAL230);
-                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL230_tree, root_0);
+                    LESS_EQUAL223_tree = (Object)adaptor.create(LESS_EQUAL223);
+                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL223_tree, root_0);
                     }
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:4: NOT_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: NOT_EQUAL
                     {
-                    NOT_EQUAL231=(Token)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3014); if (failed) return retval;
+                    NOT_EQUAL224=(Token)input.LT(1);
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3172); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    NOT_EQUAL231_tree = (Object)adaptor.create(NOT_EQUAL231);
-                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL231_tree, root_0);
+                    NOT_EQUAL224_tree = (Object)adaptor.create(NOT_EQUAL224);
+                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL224_tree, root_0);
                     }
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
                     {
-                    pushFollow(FOLLOW_not_key_in_simple_operator3020);
-                    not_key232=not_key();
+                    pushFollow(FOLLOW_not_key_in_simple_operator3178);
+                    not_key225=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key232.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key225.getTree());
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
                     int alt77=6;
                     int LA77_0 = input.LA(1);
 
@@ -9740,7 +9794,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("696:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 77, 1, input);
+                                new NoViableAltException("697:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 77, 1, input);
 
                             throw nvae;
                         }
@@ -9751,83 +9805,83 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("696:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 77, 0, input);
+                            new NoViableAltException("697:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 77, 0, input);
 
                         throw nvae;
                     }
                     switch (alt77) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:13: contains_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:13: contains_key
                             {
-                            pushFollow(FOLLOW_contains_key_in_simple_operator3023);
-                            contains_key233=contains_key();
+                            pushFollow(FOLLOW_contains_key_in_simple_operator3181);
+                            contains_key226=contains_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key233.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key226.getTree(), root_0);
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:27: soundslike_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:27: soundslike_key
                             {
-                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3026);
-                            soundslike_key234=soundslike_key();
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3184);
+                            soundslike_key227=soundslike_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key234.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key227.getTree(), root_0);
 
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:43: matches_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:43: matches_key
                             {
-                            pushFollow(FOLLOW_matches_key_in_simple_operator3029);
-                            matches_key235=matches_key();
+                            pushFollow(FOLLOW_matches_key_in_simple_operator3187);
+                            matches_key228=matches_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key235.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key228.getTree(), root_0);
 
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:56: memberof_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:56: memberof_key
                             {
-                            pushFollow(FOLLOW_memberof_key_in_simple_operator3032);
-                            memberof_key236=memberof_key();
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator3190);
+                            memberof_key229=memberof_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key236.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key229.getTree(), root_0);
 
                             }
                             break;
                         case 5 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:71: ID
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:71: ID
                             {
-                            ID237=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3036); if (failed) return retval;
+                            ID230=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator3194); if (failed) return retval;
                             if ( backtracking==0 ) {
-                            ID237_tree = (Object)adaptor.create(ID237);
-                            root_0 = (Object)adaptor.becomeRoot(ID237_tree, root_0);
+                            ID230_tree = (Object)adaptor.create(ID230);
+                            root_0 = (Object)adaptor.becomeRoot(ID230_tree, root_0);
                             }
 
                             }
                             break;
                         case 6 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:77: GRAVE_ACCENT ID square_chunk
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:77: GRAVE_ACCENT ID square_chunk
                             {
-                            GRAVE_ACCENT238=(Token)input.LT(1);
-                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3041); if (failed) return retval;
-                            ID239=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3044); if (failed) return retval;
+                            GRAVE_ACCENT231=(Token)input.LT(1);
+                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3199); if (failed) return retval;
+                            ID232=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator3202); if (failed) return retval;
                             if ( backtracking==0 ) {
-                            ID239_tree = (Object)adaptor.create(ID239);
-                            root_0 = (Object)adaptor.becomeRoot(ID239_tree, root_0);
+                            ID232_tree = (Object)adaptor.create(ID232);
+                            root_0 = (Object)adaptor.becomeRoot(ID232_tree, root_0);
                             }
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator3047);
-                            square_chunk240=square_chunk();
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator3205);
+                            square_chunk233=square_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk240.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk233.getTree());
 
                             }
                             break;
@@ -9838,99 +9892,99 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:4: contains_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:4: contains_key
                     {
-                    pushFollow(FOLLOW_contains_key_in_simple_operator3053);
-                    contains_key241=contains_key();
+                    pushFollow(FOLLOW_contains_key_in_simple_operator3211);
+                    contains_key234=contains_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key241.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key234.getTree(), root_0);
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:4: excludes_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:4: excludes_key
                     {
-                    pushFollow(FOLLOW_excludes_key_in_simple_operator3059);
-                    excludes_key242=excludes_key();
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator3217);
+                    excludes_key235=excludes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key242.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key235.getTree(), root_0);
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:4: matches_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:4: matches_key
                     {
-                    pushFollow(FOLLOW_matches_key_in_simple_operator3065);
-                    matches_key243=matches_key();
+                    pushFollow(FOLLOW_matches_key_in_simple_operator3223);
+                    matches_key236=matches_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key243.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key236.getTree(), root_0);
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:4: soundslike_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: soundslike_key
                     {
-                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3071);
-                    soundslike_key244=soundslike_key();
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3229);
+                    soundslike_key237=soundslike_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key244.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key237.getTree(), root_0);
 
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: memberof_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:4: memberof_key
                     {
-                    pushFollow(FOLLOW_memberof_key_in_simple_operator3077);
-                    memberof_key245=memberof_key();
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator3235);
+                    memberof_key238=memberof_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key245.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key238.getTree(), root_0);
 
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:4: ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:703:4: ID
                     {
-                    ID246=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3083); if (failed) return retval;
+                    ID239=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3241); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    ID246_tree = (Object)adaptor.create(ID246);
-                    root_0 = (Object)adaptor.becomeRoot(ID246_tree, root_0);
+                    ID239_tree = (Object)adaptor.create(ID239);
+                    root_0 = (Object)adaptor.becomeRoot(ID239_tree, root_0);
                     }
 
                     }
                     break;
                 case 14 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:703:4: GRAVE_ACCENT ID square_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:704:4: GRAVE_ACCENT ID square_chunk
                     {
-                    GRAVE_ACCENT247=(Token)input.LT(1);
-                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3089); if (failed) return retval;
-                    ID248=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3092); if (failed) return retval;
+                    GRAVE_ACCENT240=(Token)input.LT(1);
+                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3247); if (failed) return retval;
+                    ID241=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3250); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    ID248_tree = (Object)adaptor.create(ID248);
-                    root_0 = (Object)adaptor.becomeRoot(ID248_tree, root_0);
+                    ID241_tree = (Object)adaptor.create(ID241);
+                    root_0 = (Object)adaptor.becomeRoot(ID241_tree, root_0);
                     }
-                    pushFollow(FOLLOW_square_chunk_in_simple_operator3095);
-                    square_chunk249=square_chunk();
+                    pushFollow(FOLLOW_square_chunk_in_simple_operator3253);
+                    square_chunk242=square_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk249.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk242.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_expression_value_in_simple_operator3099);
-            expression_value250=expression_value();
+            pushFollow(FOLLOW_expression_value_in_simple_operator3257);
+            expression_value243=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value250.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value243.getTree());
 
             }
 
@@ -9957,38 +10011,38 @@
     };
 
     // $ANTLR start compound_operator
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
     public final compound_operator_return compound_operator() throws RecognitionException {
         compound_operator_return retval = new compound_operator_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN254=null;
-        Token COMMA256=null;
-        Token RIGHT_PAREN258=null;
-        in_key_return in_key251 = null;
+        Token LEFT_PAREN247=null;
+        Token COMMA249=null;
+        Token RIGHT_PAREN251=null;
+        in_key_return in_key244 = null;
 
-        not_key_return not_key252 = null;
+        not_key_return not_key245 = null;
 
-        in_key_return in_key253 = null;
+        in_key_return in_key246 = null;
 
-        expression_value_return expression_value255 = null;
+        expression_value_return expression_value248 = null;
 
-        expression_value_return expression_value257 = null;
+        expression_value_return expression_value250 = null;
 
 
-        Object LEFT_PAREN254_tree=null;
-        Object COMMA256_tree=null;
-        Object RIGHT_PAREN258_tree=null;
+        Object LEFT_PAREN247_tree=null;
+        Object COMMA249_tree=null;
+        Object RIGHT_PAREN251_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:4: ( in_key | not_key in_key )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:4: ( in_key | not_key in_key )
             int alt79=2;
             int LA79_0 = input.LA(1);
 
@@ -10004,7 +10058,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("709:4: ( in_key | not_key in_key )", 79, 1, input);
+                        new NoViableAltException("710:4: ( in_key | not_key in_key )", 79, 1, input);
 
                     throw nvae;
                 }
@@ -10012,49 +10066,49 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("709:4: ( in_key | not_key in_key )", 79, 0, input);
+                    new NoViableAltException("710:4: ( in_key | not_key in_key )", 79, 0, input);
 
                 throw nvae;
             }
             switch (alt79) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:6: in_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:6: in_key
                     {
-                    pushFollow(FOLLOW_in_key_in_compound_operator3114);
-                    in_key251=in_key();
+                    pushFollow(FOLLOW_in_key_in_compound_operator3272);
+                    in_key244=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key251.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key244.getTree(), root_0);
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:16: not_key in_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:16: not_key in_key
                     {
-                    pushFollow(FOLLOW_not_key_in_compound_operator3119);
-                    not_key252=not_key();
+                    pushFollow(FOLLOW_not_key_in_compound_operator3277);
+                    not_key245=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key252.getTree());
-                    pushFollow(FOLLOW_in_key_in_compound_operator3121);
-                    in_key253=in_key();
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key245.getTree());
+                    pushFollow(FOLLOW_in_key_in_compound_operator3279);
+                    in_key246=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key253.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key246.getTree(), root_0);
 
                     }
                     break;
 
             }
 
-            LEFT_PAREN254=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3126); if (failed) return retval;
-            pushFollow(FOLLOW_expression_value_in_compound_operator3129);
-            expression_value255=expression_value();
+            LEFT_PAREN247=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3284); if (failed) return retval;
+            pushFollow(FOLLOW_expression_value_in_compound_operator3287);
+            expression_value248=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value255.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:63: ( COMMA expression_value )*
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value248.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:63: ( COMMA expression_value )*
             loop80:
             do {
                 int alt80=2;
@@ -10067,15 +10121,15 @@
 
                 switch (alt80) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:65: COMMA expression_value
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:65: COMMA expression_value
             	    {
-            	    COMMA256=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3133); if (failed) return retval;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator3136);
-            	    expression_value257=expression_value();
+            	    COMMA249=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3291); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3294);
+            	    expression_value250=expression_value();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value257.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value250.getTree());
 
             	    }
             	    break;
@@ -10085,11 +10139,11 @@
                 }
             } while (true);
 
-            RIGHT_PAREN258=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3141); if (failed) return retval;
+            RIGHT_PAREN251=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3299); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN258_tree = (Object)adaptor.create(RIGHT_PAREN258);
-            adaptor.addChild(root_0, RIGHT_PAREN258_tree);
+            RIGHT_PAREN251_tree = (Object)adaptor.create(RIGHT_PAREN251);
+            adaptor.addChild(root_0, RIGHT_PAREN251_tree);
             }
 
             }
@@ -10117,23 +10171,23 @@
     };
 
     // $ANTLR start expression_value
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
     public final expression_value_return expression_value() throws RecognitionException {
         expression_value_return retval = new expression_value_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        accessor_path_return accessor_path259 = null;
+        accessor_path_return accessor_path252 = null;
 
-        literal_constraint_return literal_constraint260 = null;
+        literal_constraint_return literal_constraint253 = null;
 
-        paren_chunk_return paren_chunk261 = null;
+        paren_chunk_return paren_chunk254 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:2: ( accessor_path | literal_constraint | paren_chunk )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:2: ( accessor_path | literal_constraint | paren_chunk )
             int alt81=3;
             switch ( input.LA(1) ) {
             case ID:
@@ -10158,48 +10212,48 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("712:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 81, 0, input);
+                    new NoViableAltException("713:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 81, 0, input);
 
                 throw nvae;
             }
 
             switch (alt81) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: accessor_path
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:4: accessor_path
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_accessor_path_in_expression_value3152);
-                    accessor_path259=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_expression_value3310);
+                    accessor_path252=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path259.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path252.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:4: literal_constraint
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:4: literal_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value3157);
-                    literal_constraint260=literal_constraint();
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3315);
+                    literal_constraint253=literal_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint260.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint253.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:4: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:4: paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value3163);
-                    paren_chunk261=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value3321);
+                    paren_chunk254=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk261.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk254.getTree());
 
                     }
                     break;
@@ -10228,27 +10282,27 @@
     };
 
     // $ANTLR start literal_constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:718:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
     public final literal_constraint_return literal_constraint() throws RecognitionException {
         literal_constraint_return retval = new literal_constraint_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token set262=null;
+        Token set255=null;
 
-        Object set262_tree=null;
+        Object set255_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:2: ( STRING | INT | FLOAT | BOOL | NULL )
             // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             root_0 = (Object)adaptor.nil();
 
-            set262=(Token)input.LT(1);
+            set255=(Token)input.LT(1);
             if ( input.LA(1)==STRING||(input.LA(1)>=BOOL && input.LA(1)<=INT)||(input.LA(1)>=FLOAT && input.LA(1)<=NULL) ) {
                 input.consume();
-                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set262));
+                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set255));
                 errorRecovery=false;failed=false;
             }
             else {
@@ -10284,34 +10338,34 @@
     };
 
     // $ANTLR start pattern_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:1: pattern_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:1: pattern_type : id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
     public final pattern_type_return pattern_type() throws RecognitionException {
         pattern_type_return retval = new pattern_type_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID263=null;
-        Token DOT264=null;
-        Token ID265=null;
-        dimension_definition_return dimension_definition266 = null;
+        Token id=null;
+        List list_id=null;
+        dimension_definition_return dimension_definition256 = null;
 
 
-        Object ID263_tree=null;
-        Object DOT264_tree=null;
-        Object ID265_tree=null;
+        Object id_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:4: ID ( DOT ID )* ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
             {
-            ID263=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_pattern_type3205); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID263);
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_pattern_type3365); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:7: ( DOT ID )*
+            if (list_id==null) list_id=new ArrayList();
+            list_id.add(id);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:11: (id+= DOT id+= ID )*
             loop82:
             do {
                 int alt82=2;
@@ -10324,17 +10378,23 @@
 
                 switch (alt82) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:13: id+= DOT id+= ID
             	    {
-            	    DOT264=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3209); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT264);
+            	    id=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3371); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(id);
 
-            	    ID265=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_pattern_type3211); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_ID.add(ID265);
+            	    if (list_id==null) list_id=new ArrayList();
+            	    list_id.add(id);
 
+            	    id=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_pattern_type3375); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(id);
 
+            	    if (list_id==null) list_id=new ArrayList();
+            	    list_id.add(id);
+
+
             	    }
             	    break;
 
@@ -10343,7 +10403,10 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:19: ( dimension_definition )*
+            if ( backtracking==0 ) {
+              	setParaphrasesValue(DroolsParaphareseTypes.PATTERN, buildStringFromTokens(list_id));	
+            }
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:6: ( dimension_definition )*
             loop83:
             do {
                 int alt83=2;
@@ -10356,13 +10419,13 @@
 
                 switch (alt83) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:19: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:6: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3216);
-            	    dimension_definition266=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3390);
+            	    dimension_definition256=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition266.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition256.getTree());
 
             	    }
             	    break;
@@ -10374,7 +10437,7 @@
 
 
             // AST REWRITE
-            // elements: dimension_definition, ID
+            // elements: ID, dimension_definition
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -10384,9 +10447,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 728:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+            // 731:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:6: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:6: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN_TYPE, "VT_PATTERN_TYPE"), root_1);
@@ -10399,7 +10462,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:28: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:28: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -10438,34 +10501,34 @@
     };
 
     // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
     public final data_type_return data_type() throws RecognitionException {
         data_type_return retval = new data_type_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID267=null;
-        Token DOT268=null;
-        Token ID269=null;
-        dimension_definition_return dimension_definition270 = null;
+        Token ID257=null;
+        Token DOT258=null;
+        Token ID259=null;
+        dimension_definition_return dimension_definition260 = null;
 
 
-        Object ID267_tree=null;
-        Object DOT268_tree=null;
-        Object ID269_tree=null;
+        Object ID257_tree=null;
+        Object DOT258_tree=null;
+        Object ID259_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:4: ID ( DOT ID )* ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:4: ID ( DOT ID )* ( dimension_definition )*
             {
-            ID267=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_data_type3242); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID267);
+            ID257=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_data_type3416); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID257);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:7: ( DOT ID )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:7: ( DOT ID )*
             loop84:
             do {
                 int alt84=2;
@@ -10478,15 +10541,15 @@
 
                 switch (alt84) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:9: DOT ID
             	    {
-            	    DOT268=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_data_type3246); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT268);
+            	    DOT258=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_data_type3420); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT258);
 
-            	    ID269=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_data_type3248); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_ID.add(ID269);
+            	    ID259=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_data_type3422); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID259);
 
 
             	    }
@@ -10497,7 +10560,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:19: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:19: ( dimension_definition )*
             loop85:
             do {
                 int alt85=2;
@@ -10510,13 +10573,13 @@
 
                 switch (alt85) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:19: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:19: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type3253);
-            	    dimension_definition270=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type3427);
+            	    dimension_definition260=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition270.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition260.getTree());
 
             	    }
             	    break;
@@ -10538,9 +10601,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 733:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            // 736:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:733:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_DATA_TYPE, "VT_DATA_TYPE"), root_1);
@@ -10553,7 +10616,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:733:25: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:25: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -10592,36 +10655,36 @@
     };
 
     // $ANTLR start dimension_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
     public final dimension_definition_return dimension_definition() throws RecognitionException {
         dimension_definition_return retval = new dimension_definition_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_SQUARE271=null;
-        Token RIGHT_SQUARE272=null;
+        Token LEFT_SQUARE261=null;
+        Token RIGHT_SQUARE262=null;
 
-        Object LEFT_SQUARE271_tree=null;
-        Object RIGHT_SQUARE272_tree=null;
+        Object LEFT_SQUARE261_tree=null;
+        Object RIGHT_SQUARE262_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:737:2: ( LEFT_SQUARE RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:737:4: LEFT_SQUARE RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:4: LEFT_SQUARE RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE271=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3279); if (failed) return retval;
+            LEFT_SQUARE261=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3453); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE271_tree = (Object)adaptor.create(LEFT_SQUARE271);
-            adaptor.addChild(root_0, LEFT_SQUARE271_tree);
+            LEFT_SQUARE261_tree = (Object)adaptor.create(LEFT_SQUARE261);
+            adaptor.addChild(root_0, LEFT_SQUARE261_tree);
             }
-            RIGHT_SQUARE272=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3281); if (failed) return retval;
+            RIGHT_SQUARE262=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3455); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE272_tree = (Object)adaptor.create(RIGHT_SQUARE272);
-            adaptor.addChild(root_0, RIGHT_SQUARE272_tree);
+            RIGHT_SQUARE262_tree = (Object)adaptor.create(RIGHT_SQUARE262);
+            adaptor.addChild(root_0, RIGHT_SQUARE262_tree);
             }
 
             }
@@ -10649,32 +10712,32 @@
     };
 
     // $ANTLR start accessor_path
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
     public final accessor_path_return accessor_path() throws RecognitionException {
         accessor_path_return retval = new accessor_path_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOT274=null;
-        accessor_element_return accessor_element273 = null;
+        Token DOT264=null;
+        accessor_element_return accessor_element263 = null;
 
-        accessor_element_return accessor_element275 = null;
+        accessor_element_return accessor_element265 = null;
 
 
-        Object DOT274_tree=null;
+        Object DOT264_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_accessor_element=new RewriteRuleSubtreeStream(adaptor,"rule accessor_element");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741:4: accessor_element ( DOT accessor_element )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:4: accessor_element ( DOT accessor_element )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path3292);
-            accessor_element273=accessor_element();
+            pushFollow(FOLLOW_accessor_element_in_accessor_path3466);
+            accessor_element263=accessor_element();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accessor_element.add(accessor_element273.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741:21: ( DOT accessor_element )*
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element263.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:21: ( DOT accessor_element )*
             loop86:
             do {
                 int alt86=2;
@@ -10687,17 +10750,17 @@
 
                 switch (alt86) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741:23: DOT accessor_element
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:23: DOT accessor_element
             	    {
-            	    DOT274=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3296); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT274);
+            	    DOT264=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3470); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT264);
 
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3298);
-            	    accessor_element275=accessor_element();
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3472);
+            	    accessor_element265=accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element275.getTree());
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element265.getTree());
 
             	    }
             	    break;
@@ -10719,9 +10782,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 742:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            // 745:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_PATH, "VT_ACCESSOR_PATH"), root_1);
@@ -10767,29 +10830,29 @@
     };
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:748:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
     public final accessor_element_return accessor_element() throws RecognitionException {
         accessor_element_return retval = new accessor_element_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID276=null;
-        square_chunk_return square_chunk277 = null;
+        Token ID266=null;
+        square_chunk_return square_chunk267 = null;
 
 
-        Object ID276_tree=null;
+        Object ID266_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: ID ( square_chunk )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:4: ID ( square_chunk )*
             {
-            ID276=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element3322); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID276);
+            ID266=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element3496); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID266);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:7: ( square_chunk )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:7: ( square_chunk )*
             loop87:
             do {
                 int alt87=2;
@@ -10802,13 +10865,13 @@
 
                 switch (alt87) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:7: square_chunk
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:7: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3324);
-            	    square_chunk277=square_chunk();
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3498);
+            	    square_chunk267=square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk277.getTree());
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk267.getTree());
 
             	    }
             	    break;
@@ -10820,7 +10883,7 @@
 
 
             // AST REWRITE
-            // elements: ID, square_chunk
+            // elements: square_chunk, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -10830,15 +10893,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 747:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            // 750:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:750:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_ELEMENT, "VT_ACCESSOR_ELEMENT"), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:30: ( square_chunk )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:750:30: ( square_chunk )*
                 while ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
@@ -10877,7 +10940,7 @@
     };
 
     // $ANTLR start rhs_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:750:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:753:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
     public final rhs_chunk_return rhs_chunk() throws RecognitionException {
         rhs_chunk_return retval = new rhs_chunk_return();
         retval.start = input.LT(1);
@@ -10892,10 +10955,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:753:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:753:5: rc= rhs_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:756:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:756:5: rc= rhs_chunk_data
             {
-            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3353);
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3527);
             rc=rhs_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -10915,7 +10978,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 754:2: -> VT_RHS_CHUNK[$rc.start,text]
+            // 757:2: -> VT_RHS_CHUNK[$rc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.start), text));
 
@@ -10948,36 +11011,36 @@
     };
 
     // $ANTLR start rhs_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:760:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
     public final rhs_chunk_data_return rhs_chunk_data() throws RecognitionException {
         rhs_chunk_data_return retval = new rhs_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token THEN278=null;
-        Token set279=null;
-        Token END280=null;
-        Token SEMICOLON281=null;
+        Token THEN268=null;
+        Token set269=null;
+        Token END270=null;
+        Token SEMICOLON271=null;
 
-        Object THEN278_tree=null;
-        Object set279_tree=null;
-        Object END280_tree=null;
-        Object SEMICOLON281_tree=null;
+        Object THEN268_tree=null;
+        Object set269_tree=null;
+        Object END270_tree=null;
+        Object SEMICOLON271_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:2: ( THEN (~ END )* END ( SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:4: THEN (~ END )* END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:2: ( THEN (~ END )* END ( SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:4: THEN (~ END )* END ( SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            THEN278=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3372); if (failed) return retval;
+            THEN268=(Token)input.LT(1);
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3546); if (failed) return retval;
             if ( backtracking==0 ) {
-            THEN278_tree = (Object)adaptor.create(THEN278);
-            adaptor.addChild(root_0, THEN278_tree);
+            THEN268_tree = (Object)adaptor.create(THEN268);
+            adaptor.addChild(root_0, THEN268_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:9: (~ END )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:9: (~ END )*
             loop88:
             do {
                 int alt88=2;
@@ -10990,19 +11053,19 @@
 
                 switch (alt88) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:11: ~ END
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:11: ~ END
             	    {
-            	    set279=(Token)input.LT(1);
+            	    set269=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=DOT_STAR)||(input.LA(1)>=STRING && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set279));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set269));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3376);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3550);    throw mse;
             	    }
 
 
@@ -11014,13 +11077,13 @@
                 }
             } while (true);
 
-            END280=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk_data3382); if (failed) return retval;
+            END270=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_rhs_chunk_data3556); if (failed) return retval;
             if ( backtracking==0 ) {
-            END280_tree = (Object)adaptor.create(END280);
-            adaptor.addChild(root_0, END280_tree);
+            END270_tree = (Object)adaptor.create(END270);
+            adaptor.addChild(root_0, END270_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:23: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:23: ( SEMICOLON )?
             int alt89=2;
             int LA89_0 = input.LA(1);
 
@@ -11029,13 +11092,13 @@
             }
             switch (alt89) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:23: SEMICOLON
                     {
-                    SEMICOLON281=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3384); if (failed) return retval;
+                    SEMICOLON271=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3558); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    SEMICOLON281_tree = (Object)adaptor.create(SEMICOLON281);
-                    adaptor.addChild(root_0, SEMICOLON281_tree);
+                    SEMICOLON271_tree = (Object)adaptor.create(SEMICOLON271);
+                    adaptor.addChild(root_0, SEMICOLON271_tree);
                     }
 
                     }
@@ -11069,7 +11132,7 @@
     };
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
     public final curly_chunk_return curly_chunk() throws RecognitionException {
         curly_chunk_return retval = new curly_chunk_return();
         retval.start = input.LT(1);
@@ -11084,10 +11147,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:5: cc= curly_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:767:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:767:5: cc= curly_chunk_data
             {
-            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3401);
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3575);
             cc=curly_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11107,7 +11170,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 765:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            // 768:2: -> VT_CURLY_CHUNK[$cc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.start), text));
 
@@ -11140,36 +11203,36 @@
     };
 
     // $ANTLR start curly_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:771:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
     public final curly_chunk_data_return curly_chunk_data() throws RecognitionException {
         curly_chunk_data_return retval = new curly_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_CURLY282=null;
-        Token set283=null;
-        Token RIGHT_CURLY285=null;
-        curly_chunk_data_return curly_chunk_data284 = null;
+        Token LEFT_CURLY272=null;
+        Token set273=null;
+        Token RIGHT_CURLY275=null;
+        curly_chunk_data_return curly_chunk_data274 = null;
 
 
-        Object LEFT_CURLY282_tree=null;
-        Object set283_tree=null;
-        Object RIGHT_CURLY285_tree=null;
+        Object LEFT_CURLY272_tree=null;
+        Object set273_tree=null;
+        Object RIGHT_CURLY275_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_CURLY282=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3420); if (failed) return retval;
+            LEFT_CURLY272=(Token)input.LT(1);
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3594); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_CURLY282_tree = (Object)adaptor.create(LEFT_CURLY282);
-            adaptor.addChild(root_0, LEFT_CURLY282_tree);
+            LEFT_CURLY272_tree = (Object)adaptor.create(LEFT_CURLY272);
+            adaptor.addChild(root_0, LEFT_CURLY272_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
             loop90:
             do {
                 int alt90=3;
@@ -11185,32 +11248,32 @@
 
                 switch (alt90) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
-            	    set283=(Token)input.LT(1);
+            	    set273=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=THEN)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set283));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set273));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3423);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3597);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:49: curly_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:49: curly_chunk_data
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3437);
-            	    curly_chunk_data284=curly_chunk_data();
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3611);
+            	    curly_chunk_data274=curly_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data284.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data274.getTree());
 
             	    }
             	    break;
@@ -11220,11 +11283,11 @@
                 }
             } while (true);
 
-            RIGHT_CURLY285=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3442); if (failed) return retval;
+            RIGHT_CURLY275=(Token)input.LT(1);
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3616); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_CURLY285_tree = (Object)adaptor.create(RIGHT_CURLY285);
-            adaptor.addChild(root_0, RIGHT_CURLY285_tree);
+            RIGHT_CURLY275_tree = (Object)adaptor.create(RIGHT_CURLY275);
+            adaptor.addChild(root_0, RIGHT_CURLY275_tree);
             }
 
             }
@@ -11252,7 +11315,7 @@
     };
 
     // $ANTLR start paren_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
     public final paren_chunk_return paren_chunk() throws RecognitionException {
         paren_chunk_return retval = new paren_chunk_return();
         retval.start = input.LT(1);
@@ -11267,10 +11330,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:5: pc= paren_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778:5: pc= paren_chunk_data
             {
-            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3458);
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3632);
             pc=paren_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11290,7 +11353,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 776:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 779:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -11323,36 +11386,36 @@
     };
 
     // $ANTLR start paren_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
     public final paren_chunk_data_return paren_chunk_data() throws RecognitionException {
         paren_chunk_data_return retval = new paren_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN286=null;
-        Token set287=null;
-        Token RIGHT_PAREN289=null;
-        paren_chunk_data_return paren_chunk_data288 = null;
+        Token LEFT_PAREN276=null;
+        Token set277=null;
+        Token RIGHT_PAREN279=null;
+        paren_chunk_data_return paren_chunk_data278 = null;
 
 
-        Object LEFT_PAREN286_tree=null;
-        Object set287_tree=null;
-        Object RIGHT_PAREN289_tree=null;
+        Object LEFT_PAREN276_tree=null;
+        Object set277_tree=null;
+        Object RIGHT_PAREN279_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_PAREN286=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3478); if (failed) return retval;
+            LEFT_PAREN276=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3652); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_PAREN286_tree = (Object)adaptor.create(LEFT_PAREN286);
-            adaptor.addChild(root_0, LEFT_PAREN286_tree);
+            LEFT_PAREN276_tree = (Object)adaptor.create(LEFT_PAREN276);
+            adaptor.addChild(root_0, LEFT_PAREN276_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
             loop91:
             do {
                 int alt91=3;
@@ -11368,32 +11431,32 @@
 
                 switch (alt91) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    set287=(Token)input.LT(1);
+            	    set277=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=STRING)||input.LA(1)==COMMA||(input.LA(1)>=COLON && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set287));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set277));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3481);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3655);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:49: paren_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:49: paren_chunk_data
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3495);
-            	    paren_chunk_data288=paren_chunk_data();
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3669);
+            	    paren_chunk_data278=paren_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data288.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data278.getTree());
 
             	    }
             	    break;
@@ -11403,11 +11466,11 @@
                 }
             } while (true);
 
-            RIGHT_PAREN289=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3500); if (failed) return retval;
+            RIGHT_PAREN279=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3674); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN289_tree = (Object)adaptor.create(RIGHT_PAREN289);
-            adaptor.addChild(root_0, RIGHT_PAREN289_tree);
+            RIGHT_PAREN279_tree = (Object)adaptor.create(RIGHT_PAREN279);
+            adaptor.addChild(root_0, RIGHT_PAREN279_tree);
             }
 
             }
@@ -11435,7 +11498,7 @@
     };
 
     // $ANTLR start square_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
     public final square_chunk_return square_chunk() throws RecognitionException {
         square_chunk_return retval = new square_chunk_return();
         retval.start = input.LT(1);
@@ -11450,10 +11513,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:5: sc= square_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:5: sc= square_chunk_data
             {
-            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3517);
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3691);
             sc=square_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11473,7 +11536,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 787:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            // 790:2: -> VT_SQUARE_CHUNK[$sc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.start), text));
 
@@ -11506,36 +11569,36 @@
     };
 
     // $ANTLR start square_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
     public final square_chunk_data_return square_chunk_data() throws RecognitionException {
         square_chunk_data_return retval = new square_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_SQUARE290=null;
-        Token set291=null;
-        Token RIGHT_SQUARE293=null;
-        square_chunk_data_return square_chunk_data292 = null;
+        Token LEFT_SQUARE280=null;
+        Token set281=null;
+        Token RIGHT_SQUARE283=null;
+        square_chunk_data_return square_chunk_data282 = null;
 
 
-        Object LEFT_SQUARE290_tree=null;
-        Object set291_tree=null;
-        Object RIGHT_SQUARE293_tree=null;
+        Object LEFT_SQUARE280_tree=null;
+        Object set281_tree=null;
+        Object RIGHT_SQUARE283_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE290=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3536); if (failed) return retval;
+            LEFT_SQUARE280=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3710); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE290_tree = (Object)adaptor.create(LEFT_SQUARE290);
-            adaptor.addChild(root_0, LEFT_SQUARE290_tree);
+            LEFT_SQUARE280_tree = (Object)adaptor.create(LEFT_SQUARE280);
+            adaptor.addChild(root_0, LEFT_SQUARE280_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
             loop92:
             do {
                 int alt92=3;
@@ -11551,32 +11614,32 @@
 
                 switch (alt92) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
-            	    set291=(Token)input.LT(1);
+            	    set281=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=NULL)||(input.LA(1)>=THEN && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set291));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set281));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3539);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3713);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:52: square_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:52: square_chunk_data
             	    {
-            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3553);
-            	    square_chunk_data292=square_chunk_data();
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3727);
+            	    square_chunk_data282=square_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data292.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data282.getTree());
 
             	    }
             	    break;
@@ -11586,11 +11649,11 @@
                 }
             } while (true);
 
-            RIGHT_SQUARE293=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3558); if (failed) return retval;
+            RIGHT_SQUARE283=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3732); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE293_tree = (Object)adaptor.create(RIGHT_SQUARE293);
-            adaptor.addChild(root_0, RIGHT_SQUARE293_tree);
+            RIGHT_SQUARE283_tree = (Object)adaptor.create(RIGHT_SQUARE283);
+            adaptor.addChild(root_0, RIGHT_SQUARE283_tree);
             }
 
             }
@@ -11618,20 +11681,20 @@
     };
 
     // $ANTLR start date_effective_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
     public final date_effective_key_return date_effective_key() throws RecognitionException {
         date_effective_key_return retval = new date_effective_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID294=null;
-        Token MISC295=null;
-        Token ID296=null;
+        Token ID284=null;
+        Token MISC285=null;
+        Token ID286=null;
 
-        Object ID294_tree=null;
-        Object MISC295_tree=null;
-        Object ID296_tree=null;
+        Object ID284_tree=null;
+        Object MISC285_tree=null;
+        Object ID286_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11639,24 +11702,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_effective_key", "(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))");
             }
-            ID294=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key3577); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID294);
+            ID284=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3751); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID284);
 
-            MISC295=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_effective_key3579); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC295);
+            MISC285=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key3753); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC285);
 
-            ID296=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key3581); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID296);
+            ID286=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3755); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID286);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11673,7 +11736,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 799:2: -> VK_DATE_EFFECTIVE[$start, text]
+            // 802:2: -> VK_DATE_EFFECTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EFFECTIVE, ((Token)retval.start),  text));
 
@@ -11706,20 +11769,20 @@
     };
 
     // $ANTLR start date_expires_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:802:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
     public final date_expires_key_return date_expires_key() throws RecognitionException {
         date_expires_key_return retval = new date_expires_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID297=null;
-        Token MISC298=null;
-        Token ID299=null;
+        Token ID287=null;
+        Token MISC288=null;
+        Token ID289=null;
 
-        Object ID297_tree=null;
-        Object MISC298_tree=null;
-        Object ID299_tree=null;
+        Object ID287_tree=null;
+        Object MISC288_tree=null;
+        Object ID289_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11727,24 +11790,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:808:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:808:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_expires_key", "(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.EXPIRES))");
             }
-            ID297=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key3607); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID297);
+            ID287=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3781); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID287);
 
-            MISC298=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_expires_key3609); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC298);
+            MISC288=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key3783); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC288);
 
-            ID299=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key3611); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID299);
+            ID289=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3785); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID289);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11761,7 +11824,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 806:2: -> VK_DATE_EXPIRES[$start, text]
+            // 809:2: -> VK_DATE_EXPIRES[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EXPIRES, ((Token)retval.start),  text));
 
@@ -11794,24 +11857,24 @@
     };
 
     // $ANTLR start lock_on_active_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
     public final lock_on_active_key_return lock_on_active_key() throws RecognitionException {
         lock_on_active_key_return retval = new lock_on_active_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID300=null;
-        Token MISC301=null;
-        Token ID302=null;
-        Token MISC303=null;
-        Token ID304=null;
+        Token ID290=null;
+        Token MISC291=null;
+        Token ID292=null;
+        Token MISC293=null;
+        Token ID294=null;
 
-        Object ID300_tree=null;
-        Object MISC301_tree=null;
-        Object ID302_tree=null;
-        Object MISC303_tree=null;
-        Object ID304_tree=null;
+        Object ID290_tree=null;
+        Object MISC291_tree=null;
+        Object ID292_tree=null;
+        Object MISC293_tree=null;
+        Object ID294_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11819,32 +11882,32 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:5: {...}? => ID MISC ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:815:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:815:5: {...}? => ID MISC ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "lock_on_active_key", "(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, \"-\") && validateLT(5, DroolsSoftKeywords.ACTIVE))");
             }
-            ID300=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3637); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID300);
+            ID290=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3811); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID290);
 
-            MISC301=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3639); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC301);
+            MISC291=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3813); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC291);
 
-            ID302=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3641); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID302);
+            ID292=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3815); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID292);
 
-            MISC303=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3643); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC303);
+            MISC293=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3817); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC293);
 
-            ID304=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3645); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID304);
+            ID294=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3819); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID294);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11861,7 +11924,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 813:2: -> VK_LOCK_ON_ACTIVE[$start, text]
+            // 816:2: -> VK_LOCK_ON_ACTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_LOCK_ON_ACTIVE, ((Token)retval.start),  text));
 
@@ -11894,20 +11957,20 @@
     };
 
     // $ANTLR start no_loop_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
     public final no_loop_key_return no_loop_key() throws RecognitionException {
         no_loop_key_return retval = new no_loop_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID305=null;
-        Token MISC306=null;
-        Token ID307=null;
+        Token ID295=null;
+        Token MISC296=null;
+        Token ID297=null;
 
-        Object ID305_tree=null;
-        Object MISC306_tree=null;
-        Object ID307_tree=null;
+        Object ID295_tree=null;
+        Object MISC296_tree=null;
+        Object ID297_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11915,24 +11978,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "no_loop_key", "(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.LOOP))");
             }
-            ID305=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key3671); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID305);
+            ID295=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3845); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID295);
 
-            MISC306=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_no_loop_key3673); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC306);
+            MISC296=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key3847); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC296);
 
-            ID307=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key3675); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID307);
+            ID297=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3849); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID297);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11949,7 +12012,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 820:2: -> VK_NO_LOOP[$start, text]
+            // 823:2: -> VK_NO_LOOP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NO_LOOP, ((Token)retval.start),  text));
 
@@ -11982,20 +12045,20 @@
     };
 
     // $ANTLR start auto_focus_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
     public final auto_focus_key_return auto_focus_key() throws RecognitionException {
         auto_focus_key_return retval = new auto_focus_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID308=null;
-        Token MISC309=null;
-        Token ID310=null;
+        Token ID298=null;
+        Token MISC299=null;
+        Token ID300=null;
 
-        Object ID308_tree=null;
-        Object MISC309_tree=null;
-        Object ID310_tree=null;
+        Object ID298_tree=null;
+        Object MISC299_tree=null;
+        Object ID300_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12003,24 +12066,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "auto_focus_key", "(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.FOCUS))");
             }
-            ID308=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key3701); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID308);
+            ID298=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3875); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID298);
 
-            MISC309=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_auto_focus_key3703); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC309);
+            MISC299=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key3877); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC299);
 
-            ID310=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key3705); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID310);
+            ID300=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3879); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID300);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12037,7 +12100,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 827:2: -> VK_AUTO_FOCUS[$start, text]
+            // 830:2: -> VK_AUTO_FOCUS[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AUTO_FOCUS, ((Token)retval.start),  text));
 
@@ -12070,20 +12133,20 @@
     };
 
     // $ANTLR start activation_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:830:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
     public final activation_group_key_return activation_group_key() throws RecognitionException {
         activation_group_key_return retval = new activation_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID311=null;
-        Token MISC312=null;
-        Token ID313=null;
+        Token ID301=null;
+        Token MISC302=null;
+        Token ID303=null;
 
-        Object ID311_tree=null;
-        Object MISC312_tree=null;
-        Object ID313_tree=null;
+        Object ID301_tree=null;
+        Object MISC302_tree=null;
+        Object ID303_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12091,24 +12154,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:836:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:836:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "activation_group_key", "(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID311=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key3731); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID311);
+            ID301=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3905); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID301);
 
-            MISC312=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_activation_group_key3733); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC312);
+            MISC302=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key3907); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC302);
 
-            ID313=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key3735); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID313);
+            ID303=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3909); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID303);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12125,7 +12188,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 834:2: -> VK_ACTIVATION_GROUP[$start, text]
+            // 837:2: -> VK_ACTIVATION_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTIVATION_GROUP, ((Token)retval.start),  text));
 
@@ -12158,20 +12221,20 @@
     };
 
     // $ANTLR start agenda_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
     public final agenda_group_key_return agenda_group_key() throws RecognitionException {
         agenda_group_key_return retval = new agenda_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID314=null;
-        Token MISC315=null;
-        Token ID316=null;
+        Token ID304=null;
+        Token MISC305=null;
+        Token ID306=null;
 
-        Object ID314_tree=null;
-        Object MISC315_tree=null;
-        Object ID316_tree=null;
+        Object ID304_tree=null;
+        Object MISC305_tree=null;
+        Object ID306_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12179,24 +12242,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "agenda_group_key", "(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID314=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key3761); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID314);
+            ID304=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3935); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID304);
 
-            MISC315=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_agenda_group_key3763); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC315);
+            MISC305=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key3937); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC305);
 
-            ID316=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key3765); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID316);
+            ID306=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3939); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID306);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12213,7 +12276,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 841:2: -> VK_AGENDA_GROUP[$start, text]
+            // 844:2: -> VK_AGENDA_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AGENDA_GROUP, ((Token)retval.start),  text));
 
@@ -12246,20 +12309,20 @@
     };
 
     // $ANTLR start ruleflow_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:844:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
     public final ruleflow_group_key_return ruleflow_group_key() throws RecognitionException {
         ruleflow_group_key_return retval = new ruleflow_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID317=null;
-        Token MISC318=null;
-        Token ID319=null;
+        Token ID307=null;
+        Token MISC308=null;
+        Token ID309=null;
 
-        Object ID317_tree=null;
-        Object MISC318_tree=null;
-        Object ID319_tree=null;
+        Object ID307_tree=null;
+        Object MISC308_tree=null;
+        Object ID309_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12267,24 +12330,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:850:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:850:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "ruleflow_group_key", "(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID317=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3791); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID317);
+            ID307=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3965); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID307);
 
-            MISC318=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key3793); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC318);
+            MISC308=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key3967); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC308);
 
-            ID319=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3795); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID319);
+            ID309=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3969); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID309);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12301,7 +12364,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 848:2: -> VK_RULEFLOW_GROUP[$start, text]
+            // 851:2: -> VK_RULEFLOW_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULEFLOW_GROUP, ((Token)retval.start),  text));
 
@@ -12334,7 +12397,7 @@
     };
 
     // $ANTLR start duration_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:854:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
     public final duration_key_return duration_key() throws RecognitionException {
         duration_key_return retval = new duration_key_return();
         retval.start = input.LT(1);
@@ -12347,15 +12410,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:852:2: ({...}? =>id= ID -> VK_DURATION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:852:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:2: ({...}? =>id= ID -> VK_DURATION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DURATION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "duration_key", "(validateIdentifierKey(DroolsSoftKeywords.DURATION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_duration_key3820); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_duration_key3994); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12370,7 +12433,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 852:69: -> VK_DURATION[$id]
+            // 855:69: -> VK_DURATION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DURATION, id));
 
@@ -12403,7 +12466,7 @@
     };
 
     // $ANTLR start package_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:858:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
     public final package_key_return package_key() throws RecognitionException {
         package_key_return retval = new package_key_return();
         retval.start = input.LT(1);
@@ -12416,15 +12479,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:859:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:859:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "package_key", "(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_key3842); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_key4016); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12439,7 +12502,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 856:68: -> VK_PACKAGE[$id]
+            // 859:68: -> VK_PACKAGE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_PACKAGE, id));
 
@@ -12472,7 +12535,7 @@
     };
 
     // $ANTLR start import_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:859:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:862:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
     public final import_key_return import_key() throws RecognitionException {
         import_key_return retval = new import_key_return();
         retval.start = input.LT(1);
@@ -12485,15 +12548,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "import_key", "(validateIdentifierKey(DroolsSoftKeywords.IMPORT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_key3864); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_key4038); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12508,7 +12571,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 860:67: -> VK_IMPORT[$id]
+            // 863:67: -> VK_IMPORT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IMPORT, id));
 
@@ -12541,7 +12604,7 @@
     };
 
     // $ANTLR start dialect_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
     public final dialect_key_return dialect_key() throws RecognitionException {
         dialect_key_return retval = new dialect_key_return();
         retval.start = input.LT(1);
@@ -12554,15 +12617,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:864:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:864:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "dialect_key", "(validateIdentifierKey(DroolsSoftKeywords.DIALECT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dialect_key3886); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_dialect_key4060); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12577,7 +12640,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 864:68: -> VK_DIALECT[$id]
+            // 867:68: -> VK_DIALECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DIALECT, id));
 
@@ -12610,7 +12673,7 @@
     };
 
     // $ANTLR start salience_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:870:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
     public final salience_key_return salience_key() throws RecognitionException {
         salience_key_return retval = new salience_key_return();
         retval.start = input.LT(1);
@@ -12623,15 +12686,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:868:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:868:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "salience_key", "(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_salience_key3908); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_salience_key4082); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12646,7 +12709,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 868:69: -> VK_SALIENCE[$id]
+            // 871:69: -> VK_SALIENCE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SALIENCE, id));
 
@@ -12679,7 +12742,7 @@
     };
 
     // $ANTLR start enabled_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
     public final enabled_key_return enabled_key() throws RecognitionException {
         enabled_key_return retval = new enabled_key_return();
         retval.start = input.LT(1);
@@ -12692,15 +12755,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:875:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:875:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "enabled_key", "(validateIdentifierKey(DroolsSoftKeywords.ENABLED))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enabled_key3930); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_enabled_key4104); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12715,7 +12778,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 872:68: -> VK_ENABLED[$id]
+            // 875:68: -> VK_ENABLED[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENABLED, id));
 
@@ -12748,7 +12811,7 @@
     };
 
     // $ANTLR start attributes_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:875:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
     public final attributes_key_return attributes_key() throws RecognitionException {
         attributes_key_return retval = new attributes_key_return();
         retval.start = input.LT(1);
@@ -12761,15 +12824,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:876:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:876:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "attributes_key", "(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_attributes_key3952); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_attributes_key4126); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12784,7 +12847,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 876:71: -> VK_ATTRIBUTES[$id]
+            // 879:71: -> VK_ATTRIBUTES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ATTRIBUTES, id));
 
@@ -12817,7 +12880,7 @@
     };
 
     // $ANTLR start when_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
     public final when_key_return when_key() throws RecognitionException {
         when_key_return retval = new when_key_return();
         retval.start = input.LT(1);
@@ -12830,15 +12893,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:880:2: ({...}? =>id= ID -> VK_WHEN[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:880:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:883:2: ({...}? =>id= ID -> VK_WHEN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:883:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "when_key", "(validateIdentifierKey(DroolsSoftKeywords.WHEN))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_when_key3974); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_when_key4148); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12853,7 +12916,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 880:65: -> VK_WHEN[$id]
+            // 883:65: -> VK_WHEN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_WHEN, id));
 
@@ -12886,7 +12949,7 @@
     };
 
     // $ANTLR start rule_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:883:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:886:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
     public final rule_key_return rule_key() throws RecognitionException {
         rule_key_return retval = new rule_key_return();
         retval.start = input.LT(1);
@@ -12899,15 +12962,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:2: ({...}? =>id= ID -> VK_RULE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:887:2: ({...}? =>id= ID -> VK_RULE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:887:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "rule_key", "(validateIdentifierKey(DroolsSoftKeywords.RULE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_rule_key3996); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_rule_key4170); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12922,7 +12985,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 884:65: -> VK_RULE[$id]
+            // 887:65: -> VK_RULE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULE, id));
 
@@ -12955,7 +13018,7 @@
     };
 
     // $ANTLR start template_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:887:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:890:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
     public final template_key_return template_key() throws RecognitionException {
         template_key_return retval = new template_key_return();
         retval.start = input.LT(1);
@@ -12968,15 +13031,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:888:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:888:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "template_key", "(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_template_key4018); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_template_key4192); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12991,7 +13054,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 888:69: -> VK_TEMPLATE[$id]
+            // 891:69: -> VK_TEMPLATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_TEMPLATE, id));
 
@@ -13024,7 +13087,7 @@
     };
 
     // $ANTLR start query_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
     public final query_key_return query_key() throws RecognitionException {
         query_key_return retval = new query_key_return();
         retval.start = input.LT(1);
@@ -13037,15 +13100,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:2: ({...}? =>id= ID -> VK_QUERY[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:2: ({...}? =>id= ID -> VK_QUERY[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "query_key", "(validateIdentifierKey(DroolsSoftKeywords.QUERY))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_query_key4040); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_query_key4214); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13060,7 +13123,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 892:66: -> VK_QUERY[$id]
+            // 895:66: -> VK_QUERY[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_QUERY, id));
 
@@ -13093,7 +13156,7 @@
     };
 
     // $ANTLR start declare_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:898:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
     public final declare_key_return declare_key() throws RecognitionException {
         declare_key_return retval = new declare_key_return();
         retval.start = input.LT(1);
@@ -13106,15 +13169,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:896:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:896:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DECLARE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "declare_key", "(validateIdentifierKey(DroolsSoftKeywords.DECLARE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_declare_key4062); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_declare_key4236); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13129,7 +13192,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 896:68: -> VK_DECLARE[$id]
+            // 899:68: -> VK_DECLARE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DECLARE, id));
 
@@ -13162,7 +13225,7 @@
     };
 
     // $ANTLR start function_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:902:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
     public final function_key_return function_key() throws RecognitionException {
         function_key_return retval = new function_key_return();
         retval.start = input.LT(1);
@@ -13175,15 +13238,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FUNCTION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "function_key", "(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_key4084); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_key4258); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13198,7 +13261,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 900:69: -> VK_FUNCTION[$id]
+            // 903:69: -> VK_FUNCTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FUNCTION, id));
 
@@ -13231,7 +13294,7 @@
     };
 
     // $ANTLR start global_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
     public final global_key_return global_key() throws RecognitionException {
         global_key_return retval = new global_key_return();
         retval.start = input.LT(1);
@@ -13244,15 +13307,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "global_key", "(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_key4106); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_key4280); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13267,7 +13330,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 904:67: -> VK_GLOBAL[$id]
+            // 907:67: -> VK_GLOBAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_GLOBAL, id));
 
@@ -13300,7 +13363,7 @@
     };
 
     // $ANTLR start eval_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:910:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
     public final eval_key_return eval_key() throws RecognitionException {
         eval_key_return retval = new eval_key_return();
         retval.start = input.LT(1);
@@ -13313,15 +13376,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:908:2: ({...}? =>id= ID -> VK_EVAL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:908:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "eval_key", "(validateIdentifierKey(DroolsSoftKeywords.EVAL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_eval_key4128); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_eval_key4302); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13336,7 +13399,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 908:65: -> VK_EVAL[$id]
+            // 911:65: -> VK_EVAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EVAL, id));
 
@@ -13369,7 +13432,7 @@
     };
 
     // $ANTLR start contains_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:914:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
     public final contains_key_return contains_key() throws RecognitionException {
         contains_key_return retval = new contains_key_return();
         retval.start = input.LT(1);
@@ -13382,15 +13445,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "contains_key", "(validateIdentifierKey(DroolsSoftKeywords.CONTAINS))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_contains_key4150); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_contains_key4324); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13405,7 +13468,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 912:69: -> VK_CONTAINS[$id]
+            // 915:69: -> VK_CONTAINS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, id));
 
@@ -13438,7 +13501,7 @@
     };
 
     // $ANTLR start matches_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:918:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
     public final matches_key_return matches_key() throws RecognitionException {
         matches_key_return retval = new matches_key_return();
         retval.start = input.LT(1);
@@ -13451,15 +13514,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:916:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:916:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "matches_key", "(validateIdentifierKey(DroolsSoftKeywords.MATCHES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_matches_key4172); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_matches_key4346); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13474,7 +13537,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 916:68: -> VK_MATCHES[$id]
+            // 919:68: -> VK_MATCHES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MATCHES, id));
 
@@ -13507,7 +13570,7 @@
     };
 
     // $ANTLR start excludes_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
     public final excludes_key_return excludes_key() throws RecognitionException {
         excludes_key_return retval = new excludes_key_return();
         retval.start = input.LT(1);
@@ -13520,15 +13583,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "excludes_key", "(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_excludes_key4194); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_excludes_key4368); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13543,7 +13606,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 920:69: -> VK_EXCLUDES[$id]
+            // 923:69: -> VK_EXCLUDES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, id));
 
@@ -13576,7 +13639,7 @@
     };
 
     // $ANTLR start soundslike_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
     public final soundslike_key_return soundslike_key() throws RecognitionException {
         soundslike_key_return retval = new soundslike_key_return();
         retval.start = input.LT(1);
@@ -13589,15 +13652,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "soundslike_key", "(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_soundslike_key4216); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_soundslike_key4390); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13612,7 +13675,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 924:71: -> VK_SOUNDSLIKE[$id]
+            // 927:71: -> VK_SOUNDSLIKE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, id));
 
@@ -13645,7 +13708,7 @@
     };
 
     // $ANTLR start memberof_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:930:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
     public final memberof_key_return memberof_key() throws RecognitionException {
         memberof_key_return retval = new memberof_key_return();
         retval.start = input.LT(1);
@@ -13658,15 +13721,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "memberof_key", "(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_memberof_key4238); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_memberof_key4412); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13681,7 +13744,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 928:69: -> VK_MEMBEROF[$id]
+            // 931:69: -> VK_MEMBEROF[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, id));
 
@@ -13714,7 +13777,7 @@
     };
 
     // $ANTLR start not_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:934:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
     public final not_key_return not_key() throws RecognitionException {
         not_key_return retval = new not_key_return();
         retval.start = input.LT(1);
@@ -13727,15 +13790,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:2: ({...}? =>id= ID -> VK_NOT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "not_key", "(validateIdentifierKey(DroolsSoftKeywords.NOT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_not_key4260); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_not_key4434); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13750,7 +13813,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 932:64: -> VK_NOT[$id]
+            // 935:64: -> VK_NOT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NOT, id));
 
@@ -13783,7 +13846,7 @@
     };
 
     // $ANTLR start in_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:938:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
     public final in_key_return in_key() throws RecognitionException {
         in_key_return retval = new in_key_return();
         retval.start = input.LT(1);
@@ -13796,15 +13859,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:936:2: ({...}? =>id= ID -> VK_IN[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:936:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "in_key", "(validateIdentifierKey(DroolsSoftKeywords.IN))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_in_key4282); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_in_key4456); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13819,7 +13882,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 936:63: -> VK_IN[$id]
+            // 939:63: -> VK_IN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IN, id));
 
@@ -13852,7 +13915,7 @@
     };
 
     // $ANTLR start or_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:942:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
     public final or_key_return or_key() throws RecognitionException {
         or_key_return retval = new or_key_return();
         retval.start = input.LT(1);
@@ -13865,15 +13928,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:2: ({...}? =>id= ID -> VK_OR[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "or_key", "(validateIdentifierKey(DroolsSoftKeywords.OR))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_or_key4304); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_or_key4478); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13888,7 +13951,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 940:63: -> VK_OR[$id]
+            // 943:63: -> VK_OR[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_OR, id));
 
@@ -13921,7 +13984,7 @@
     };
 
     // $ANTLR start and_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
     public final and_key_return and_key() throws RecognitionException {
         and_key_return retval = new and_key_return();
         retval.start = input.LT(1);
@@ -13934,15 +13997,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:2: ({...}? =>id= ID -> VK_AND[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "and_key", "(validateIdentifierKey(DroolsSoftKeywords.AND))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_and_key4326); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_and_key4500); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13957,7 +14020,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 944:64: -> VK_AND[$id]
+            // 947:64: -> VK_AND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AND, id));
 
@@ -13990,7 +14053,7 @@
     };
 
     // $ANTLR start exists_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:950:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
     public final exists_key_return exists_key() throws RecognitionException {
         exists_key_return retval = new exists_key_return();
         retval.start = input.LT(1);
@@ -14003,15 +14066,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EXISTS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "exists_key", "(validateIdentifierKey(DroolsSoftKeywords.EXISTS))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_exists_key4348); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_exists_key4522); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14026,7 +14089,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 948:67: -> VK_EXISTS[$id]
+            // 951:67: -> VK_EXISTS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXISTS, id));
 
@@ -14059,7 +14122,7 @@
     };
 
     // $ANTLR start forall_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:954:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
     public final forall_key_return forall_key() throws RecognitionException {
         forall_key_return retval = new forall_key_return();
         retval.start = input.LT(1);
@@ -14072,15 +14135,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:2: ({...}? =>id= ID -> VK_FORALL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FORALL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "forall_key", "(validateIdentifierKey(DroolsSoftKeywords.FORALL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_forall_key4370); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_forall_key4544); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14095,7 +14158,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 952:67: -> VK_FORALL[$id]
+            // 955:67: -> VK_FORALL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FORALL, id));
 
@@ -14128,7 +14191,7 @@
     };
 
     // $ANTLR start from_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:958:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
     public final from_key_return from_key() throws RecognitionException {
         from_key_return retval = new from_key_return();
         retval.start = input.LT(1);
@@ -14141,15 +14204,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:2: ({...}? =>id= ID -> VK_FROM[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:2: ({...}? =>id= ID -> VK_FROM[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "from_key", "(validateIdentifierKey(DroolsSoftKeywords.FROM))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_key4392); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_key4566); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14164,7 +14227,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 956:65: -> VK_FROM[$id]
+            // 959:65: -> VK_FROM[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FROM, id));
 
@@ -14197,20 +14260,20 @@
     };
 
     // $ANTLR start entry_point_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
     public final entry_point_key_return entry_point_key() throws RecognitionException {
         entry_point_key_return retval = new entry_point_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID320=null;
-        Token MISC321=null;
-        Token ID322=null;
+        Token ID310=null;
+        Token MISC311=null;
+        Token ID312=null;
 
-        Object ID320_tree=null;
-        Object MISC321_tree=null;
-        Object ID322_tree=null;
+        Object ID310_tree=null;
+        Object MISC311_tree=null;
+        Object ID312_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -14218,24 +14281,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:965:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:965:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.POINT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "entry_point_key", "(validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.POINT))");
             }
-            ID320=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4415); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID320);
+            ID310=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4589); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID310);
 
-            MISC321=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_entry_point_key4417); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC321);
+            MISC311=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key4591); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC311);
 
-            ID322=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4419); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID322);
+            ID312=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4593); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID312);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -14252,7 +14315,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 963:2: -> VK_ENTRY_POINT[$start, text]
+            // 966:2: -> VK_ENTRY_POINT[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((Token)retval.start),  text));
 
@@ -14285,7 +14348,7 @@
     };
 
     // $ANTLR start accumulate_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:966:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:969:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
     public final accumulate_key_return accumulate_key() throws RecognitionException {
         accumulate_key_return retval = new accumulate_key_return();
         retval.start = input.LT(1);
@@ -14298,15 +14361,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "accumulate_key", "(validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_key4444); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_key4618); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14321,7 +14384,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 967:71: -> VK_ACCUMULATE[$id]
+            // 970:71: -> VK_ACCUMULATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACCUMULATE, id));
 
@@ -14354,7 +14417,7 @@
     };
 
     // $ANTLR start init_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
     public final init_key_return init_key() throws RecognitionException {
         init_key_return retval = new init_key_return();
         retval.start = input.LT(1);
@@ -14367,15 +14430,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:2: ({...}? =>id= ID -> VK_INIT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:2: ({...}? =>id= ID -> VK_INIT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "init_key", "(validateIdentifierKey(DroolsSoftKeywords.INIT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_init_key4466); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_init_key4640); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14390,7 +14453,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 971:65: -> VK_INIT[$id]
+            // 974:65: -> VK_INIT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_INIT, id));
 
@@ -14423,7 +14486,7 @@
     };
 
     // $ANTLR start action_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:977:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
     public final action_key_return action_key() throws RecognitionException {
         action_key_return retval = new action_key_return();
         retval.start = input.LT(1);
@@ -14436,15 +14499,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:2: ({...}? =>id= ID -> VK_ACTION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACTION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "action_key", "(validateIdentifierKey(DroolsSoftKeywords.ACTION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_action_key4488); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_action_key4662); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14459,7 +14522,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 975:67: -> VK_ACTION[$id]
+            // 978:67: -> VK_ACTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTION, id));
 
@@ -14492,7 +14555,7 @@
     };
 
     // $ANTLR start reverse_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:981:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
     public final reverse_key_return reverse_key() throws RecognitionException {
         reverse_key_return retval = new reverse_key_return();
         retval.start = input.LT(1);
@@ -14505,15 +14568,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "reverse_key", "(validateIdentifierKey(DroolsSoftKeywords.REVERSE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_reverse_key4510); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_reverse_key4684); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14528,7 +14591,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 979:68: -> VK_REVERSE[$id]
+            // 982:68: -> VK_REVERSE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_REVERSE, id));
 
@@ -14561,7 +14624,7 @@
     };
 
     // $ANTLR start result_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
     public final result_key_return result_key() throws RecognitionException {
         result_key_return retval = new result_key_return();
         retval.start = input.LT(1);
@@ -14574,15 +14637,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:2: ({...}? =>id= ID -> VK_RESULT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "result_key", "(validateIdentifierKey(DroolsSoftKeywords.RESULT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_result_key4532); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_result_key4706); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14597,7 +14660,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 983:67: -> VK_RESULT[$id]
+            // 986:67: -> VK_RESULT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RESULT, id));
 
@@ -14630,7 +14693,7 @@
     };
 
     // $ANTLR start collect_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
     public final collect_key_return collect_key() throws RecognitionException {
         collect_key_return retval = new collect_key_return();
         retval.start = input.LT(1);
@@ -14643,15 +14706,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.COLLECT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "collect_key", "(validateIdentifierKey(DroolsSoftKeywords.COLLECT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_collect_key4554); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_collect_key4728); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14666,7 +14729,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 987:68: -> VK_COLLECT[$id]
+            // 990:68: -> VK_COLLECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_COLLECT, id));
 
@@ -14695,11 +14758,11 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:5: ( LEFT_PAREN or_key )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:6: LEFT_PAREN or_key
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:5: ( LEFT_PAREN or_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:6: LEFT_PAREN or_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11491); if (failed) return ;
-        pushFollow(FOLLOW_or_key_in_synpred11493);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11638); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred11640);
         or_key();
         _fsp--;
         if (failed) return ;
@@ -14710,7 +14773,7 @@
 
     // $ANTLR start synpred2
     public final void synpred2_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:5: ( or_key | DOUBLE_PIPE )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: ( or_key | DOUBLE_PIPE )
         int alt93=2;
         int LA93_0 = input.LA(1);
 
@@ -14723,15 +14786,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("486:5: synpred2 : ( or_key | DOUBLE_PIPE );", 93, 0, input);
+                new NoViableAltException("485:5: synpred2 : ( or_key | DOUBLE_PIPE );", 93, 0, input);
 
             throw nvae;
         }
         switch (alt93) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:6: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:6: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred21540);
+                pushFollow(FOLLOW_or_key_in_synpred21687);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14739,9 +14802,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:13: DOUBLE_PIPE
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:13: DOUBLE_PIPE
                 {
-                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21542); if (failed) return ;
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21689); if (failed) return ;
 
                 }
                 break;
@@ -14751,11 +14814,11 @@
 
     // $ANTLR start synpred3
     public final void synpred3_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:5: ( LEFT_PAREN and_key )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:6: LEFT_PAREN and_key
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:5: ( LEFT_PAREN and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:6: LEFT_PAREN and_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31593); if (failed) return ;
-        pushFollow(FOLLOW_and_key_in_synpred31595);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31740); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred31742);
         and_key();
         _fsp--;
         if (failed) return ;
@@ -14766,7 +14829,7 @@
 
     // $ANTLR start synpred4
     public final void synpred4_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:5: ( and_key | DOUBLE_AMPER )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: ( and_key | DOUBLE_AMPER )
         int alt94=2;
         int LA94_0 = input.LA(1);
 
@@ -14779,15 +14842,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("496:5: synpred4 : ( and_key | DOUBLE_AMPER );", 94, 0, input);
+                new NoViableAltException("495:5: synpred4 : ( and_key | DOUBLE_AMPER );", 94, 0, input);
 
             throw nvae;
         }
         switch (alt94) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:6: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:6: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred41642);
+                pushFollow(FOLLOW_and_key_in_synpred41789);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14795,9 +14858,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:14: DOUBLE_AMPER
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:14: DOUBLE_AMPER
                 {
-                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41644); if (failed) return ;
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41791); if (failed) return ;
 
                 }
                 break;
@@ -14807,10 +14870,10 @@
 
     // $ANTLR start synpred5
     public final void synpred5_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:4: ( SEMICOLON )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:5: SEMICOLON
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:4: ( SEMICOLON )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:5: SEMICOLON
         {
-        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred51746); if (failed) return ;
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred51893); if (failed) return ;
 
         }
     }
@@ -14818,11 +14881,11 @@
 
     // $ANTLR start synpred6
     public final void synpred6_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:12: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:13: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:13: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred61778); if (failed) return ;
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:24: ( or_key | and_key )
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred61925); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:24: ( or_key | and_key )
         int alt95=2;
         int LA95_0 = input.LA(1);
 
@@ -14838,7 +14901,7 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("514:24: ( or_key | and_key )", 95, 1, input);
+                    new NoViableAltException("513:24: ( or_key | and_key )", 95, 1, input);
 
                 throw nvae;
             }
@@ -14846,15 +14909,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("514:24: ( or_key | and_key )", 95, 0, input);
+                new NoViableAltException("513:24: ( or_key | and_key )", 95, 0, input);
 
             throw nvae;
         }
         switch (alt95) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:25: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:25: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred61781);
+                pushFollow(FOLLOW_or_key_in_synpred61928);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14862,9 +14925,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:32: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:32: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred61783);
+                pushFollow(FOLLOW_and_key_in_synpred61930);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14881,11 +14944,11 @@
 
     // $ANTLR start synpred7
     public final void synpred7_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:6: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:6: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred71865); if (failed) return ;
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:17: ( or_key | and_key )
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred72012); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:17: ( or_key | and_key )
         int alt96=2;
         int LA96_0 = input.LA(1);
 
@@ -14901,7 +14964,7 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("522:17: ( or_key | and_key )", 96, 1, input);
+                    new NoViableAltException("521:17: ( or_key | and_key )", 96, 1, input);
 
                 throw nvae;
             }
@@ -14909,15 +14972,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("522:17: ( or_key | and_key )", 96, 0, input);
+                new NoViableAltException("521:17: ( or_key | and_key )", 96, 0, input);
 
             throw nvae;
         }
         switch (alt96) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:18: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:18: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred71868);
+                pushFollow(FOLLOW_or_key_in_synpred72015);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14925,9 +14988,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:25: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:25: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred71870);
+                pushFollow(FOLLOW_and_key_in_synpred72017);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14944,10 +15007,10 @@
 
     // $ANTLR start synpred8
     public final void synpred8_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:5: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:6: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:6: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82366); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82513); if (failed) return ;
 
         }
     }
@@ -14955,10 +15018,10 @@
 
     // $ANTLR start synpred9
     public final void synpred9_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:6: ( LEFT_SQUARE )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:8: LEFT_SQUARE
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:6: ( LEFT_SQUARE )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:8: LEFT_SQUARE
         {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92427); if (failed) return ;
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92574); if (failed) return ;
 
         }
     }
@@ -14966,10 +15029,10 @@
 
     // $ANTLR start synpred10
     public final void synpred10_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:6: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:8: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:6: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:8: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102449); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102596); if (failed) return ;
 
         }
     }
@@ -14977,10 +15040,10 @@
 
     // $ANTLR start synpred11
     public final void synpred11_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:26: ( DOUBLE_PIPE )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:27: DOUBLE_PIPE
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:26: ( DOUBLE_PIPE )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:27: DOUBLE_PIPE
         {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred112902); if (failed) return ;
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred113060); if (failed) return ;
 
         }
     }
@@ -14988,10 +15051,10 @@
 
     // $ANTLR start synpred12
     public final void synpred12_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:27: ( DOUBLE_AMPER )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:28: DOUBLE_AMPER
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:27: ( DOUBLE_AMPER )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:28: DOUBLE_AMPER
         {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred122928); if (failed) return ;
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred123086); if (failed) return ;
 
         }
     }
@@ -15397,7 +15460,7 @@
             this.transition = DFA5_transition;
         }
         public String getDescription() {
-            return "293:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );";
+            return "267:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -15627,7 +15690,7 @@
                         int index5_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.SALIEN!
 CE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||(validateIdentifierKey(Drool!
 sSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftK
eywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {s = 1;}
+                        if ( (LA5_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPOR!
 T)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||(validateIdentifierKey(Drool!
 sSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftK
eywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {s = 1;}
 
                          
                         input.seek(index5_0);
@@ -16245,7 +16308,7 @@
                         s = -1;
                         if ( (LA5_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT!
 (2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 2;}
 
-                        else if ( (LA5_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIde!
 ntifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 3;}
+                        else if ( (LA5_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIde!
 ntifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 3;}
 
                         else if ( (LA5_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 4;}
 
@@ -16913,7 +16976,7 @@
                         s = -1;
                         if ( (LA5_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 8;}
 
-                        else if ( (LA5_3==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "funct!
 ion") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateL!
 T(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT))
)||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeyword!
 s.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(Drools!
 SoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "fu
nction") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeyw!
 ords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(Dro!
 olsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, 
"function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && vali!
 dateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impor!
 t") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftK
eywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(D!
 roolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impo!
 rt") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoft
Keywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(!
 DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIde!
 ntifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && 
validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "im!
 port") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(valida!
 teIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import"
) && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1!
 , "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(val!
 idateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impo
rt") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateL!
 T(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||!
 ((validateLT(1, "import") && validateLT(2, "function") )&&(validateIde
ntifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(v!
 alidateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") !
 )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1
, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((va!
 lidateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPO!
 RT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(vali
dateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {s = 9;}
+                        else if ( (LA5_3==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "funct!
 ion") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateL!
 T(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT))
)||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeyword!
 s.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(Drools!
 SoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "fu
nction") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeyw!
 ords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(Dro!
 olsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, 
"function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && vali!
 dateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impor!
 t") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftK
eywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(D!
 roolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impo!
 rt") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoft
Keywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(!
 DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIde!
 ntifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && 
validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "im!
 port") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(valida!
 teIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import"
) && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1!
 , "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(val!
 idateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impo
rt") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateL!
 T(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||!
 ((validateLT(1, "import") && validateLT(2, "function") )&&(validateIde
ntifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(v!
 alidateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") !
 )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1
, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((va!
 lidateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPO!
 RT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(vali
dateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {s = 9;}
 
                         else if ( (LA5_3==END) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
 
@@ -17527,7 +17590,7 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "340:23: ( parameters )?";
+            return "327:23: ( parameters )?";
         }
     }
     static final String DFA17_eotS =
@@ -17581,7 +17644,7 @@
             this.transition = DFA17_transition;
         }
         public String getDescription() {
-            return "357:4: ( data_type )?";
+            return "346:4: ( data_type )?";
         }
     }
     static final String DFA24_eotS =
@@ -17660,7 +17723,7 @@
             this.transition = DFA24_transition;
         }
         public String getDescription() {
-            return "387:21: ( rule_attributes )?";
+            return "382:21: ( rule_attributes )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -18020,7 +18083,7 @@
             this.transition = DFA30_transition;
         }
         public String getDescription() {
-            return "()* loopback of 402:45: ( ( COMMA )? attr= rule_attribute )*";
+            return "()* loopback of 399:45: ( ( COMMA )? attr= rule_attribute )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -18456,7 +18519,7 @@
             this.transition = DFA47_transition;
         }
         public String getDescription() {
-            return "514:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "513:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -18547,7 +18610,7 @@
 
                         else if ( (LA47_2==LEFT_PAREN) ) {s = 6;}
 
-                        else if ( (LA47_2==ID) && (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierK!
 ey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
+                        else if ( (LA47_2==ID) && (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
 
                         else if ( (LA47_2==DOT) ) {s = 8;}
 
@@ -18609,7 +18672,7 @@
                         int index47_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL))))) ) {s = 7;}
+                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT))))) ) {s = 7;}
 
                         else if ( (true) ) {s = 14;}
 
@@ -18822,7 +18885,7 @@
             this.transition = DFA48_transition;
         }
         public String getDescription() {
-            return "522:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "521:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -18913,7 +18976,7 @@
 
                         else if ( (LA48_2==LEFT_PAREN) ) {s = 6;}
 
-                        else if ( (LA48_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(!
 DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))))) {s = 7;}
+                        else if ( (LA48_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
 
                         else if ( (LA48_2==DOT) ) {s = 8;}
 
@@ -18945,7 +19008,7 @@
                         int index48_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT))))) ) {s = 7;}
+                        if ( ((synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL))))) ) {s = 7;}
 
                         else if ( (true) ) {s = 14;}
 
@@ -19062,7 +19125,7 @@
             this.transition = DFA53_transition;
         }
         public String getDescription() {
-            return "556:3: ( accumulate_init_clause | accumulate_id_clause )";
+            return "555:3: ( accumulate_init_clause | accumulate_id_clause )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -19176,7 +19239,7 @@
             this.transition = DFA57_transition;
         }
         public String getDescription() {
-            return "567:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
+            return "566:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -19382,7 +19445,7 @@
             this.transition = DFA74_transition;
         }
         public String getDescription() {
-            return "()* loopback of 674:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*";
+            return "()* loopback of 675:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -19691,7 +19754,7 @@
             this.transition = DFA75_transition;
         }
         public String getDescription() {
-            return "()* loopback of 678:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*";
+            return "()* loopback of 679:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
@@ -19915,414 +19978,414 @@
     public static final BitSet FOLLOW_package_statement_in_compilation_unit400 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
     public static final BitSet FOLLOW_statement_in_compilation_unit405 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
     public static final BitSet FOLLOW_EOF_in_compilation_unit410 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_package_key_in_package_statement450 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_package_id_in_package_statement452 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_package_statement454 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_id476 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_DOT_in_package_id480 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_package_id482 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_rule_attribute_in_statement507 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_import_statement_in_statement514 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_statement520 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_statement526 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_statement532 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_template_in_statement537 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_in_statement542 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_in_statement547 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_import_statement558 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_import_name_in_import_statement560 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_import_statement562 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_function_import_statement586 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_function_key_in_function_import_statement588 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement590 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement592 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_name617 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
-    public static final BitSet FOLLOW_DOT_in_import_name621 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_import_name623 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
-    public static final BitSet FOLLOW_DOT_STAR_in_import_name628 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_key_in_global654 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_data_type_in_global656 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_global_id_in_global658 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_global660 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_id686 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_key_in_function704 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_data_type_in_function706 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_function_id_in_function709 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_parameters_in_function711 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_curly_chunk_in_function713 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_id743 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_key_in_query761 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_query_id_in_query763 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
-    public static final BitSet FOLLOW_parameters_in_query765 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query768 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_END_in_query770 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_query772 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_id804 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_query_id817 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters833 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters840 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_COMMA_in_parameters843 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters845 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters854 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_param_definition878 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_argument_in_param_definition881 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument892 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_argument894 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_template_key_in_template907 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_template_id_in_template909 = new BitSet(new long[]{0x0000000000000000L,0x0000000000600000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_template_slot_in_template916 = new BitSet(new long[]{0x0000000000000000L,0x0000000002400000L});
-    public static final BitSet FOLLOW_END_in_template921 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template923 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_id953 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_template_id966 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_template_slot983 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_slot_id_in_template_slot985 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template_slot987 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_slot_id1012 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_key_in_rule1030 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_rule_id_in_rule1032 = new BitSet(new long[]{0x0000000000000000L,0x0000800000400000L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule1034 = new BitSet(new long[]{0x0000000000000000L,0x0000800000400000L});
-    public static final BitSet FOLLOW_when_part_in_rule1037 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_in_rule1040 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_when_key_in_when_part1069 = new BitSet(new long[]{0x0000000000000002L,0x0000000048400000L});
-    public static final BitSet FOLLOW_COLON_in_when_part1071 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1074 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_id1095 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_rule_id1108 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1126 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
-    public static final BitSet FOLLOW_COLON_in_rule_attributes1128 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1133 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_rule_attributes1137 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1142 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute1170 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute1176 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1183 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1190 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1197 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1203 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_in_rule_attribute1209 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_in_rule_attribute1215 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_in_rule_attribute1221 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1227 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1233 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_in_rule_attribute1238 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_key_in_date_effective1250 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_date_effective1253 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_key_in_date_expires1264 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_date_expires1267 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_key_in_enabled1281 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_enabled1284 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_salience_key_in_salience1296 = new BitSet(new long[]{0x0000000000000000L,0x0000000108000000L});
-    public static final BitSet FOLLOW_INT_in_salience1303 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_salience1312 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_key_in_no_loop1328 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1331 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1343 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1346 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_key_in_activation_group1360 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1363 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1374 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_ruleflow_group1377 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1388 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1391 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_key_in_duration1402 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
-    public static final BitSet FOLLOW_INT_in_duration1405 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_key_in_dialect1419 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_dialect1422 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1440 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_lock_on_active1443 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1455 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1476 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1497 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1501 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1503 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1506 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1527 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1549 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1556 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1561 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1599 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1603 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1605 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1608 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1629 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1651 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and1658 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1663 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1701 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1707 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1713 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary1719 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary1725 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary1728 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary1730 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_pattern_source_in_lhs_unary1736 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary1750 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_exists_key_in_lhs_exist1764 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1788 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist1795 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1797 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist1799 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist1812 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_not_key_in_lhs_not1858 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not1875 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not1882 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not1884 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not1886 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not1894 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_eval_key_in_lhs_eval1933 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval1937 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forall_key_in_lhs_forall1961 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall1963 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall1965 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall1968 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2000 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_from_key_in_pattern_source2009 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2025 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_pattern_source2041 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2058 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_pattern_source2074 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2102 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2108 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2110 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2118 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2124 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2132 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2161 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2166 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2168 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2172 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2176 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2178 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2184 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2188 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2190 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2196 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2200 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2249 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2253 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_key_in_collect_statement2275 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2279 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_pattern_source_in_collect_statement2281 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2283 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2305 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2307 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entrypoint_id2330 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_entrypoint_id2343 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source2359 = new BitSet(new long[]{0x0000000000000002L,0x0000000008800000L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source2372 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source2379 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain2411 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_expression_chain2413 = new BitSet(new long[]{0x0000000000000002L,0x0000200008800000L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain2433 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2455 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain2466 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2499 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern2512 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_fact_binding2532 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding2538 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2545 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2547 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2549 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression2588 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2600 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2606 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression2611 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_pattern_type_in_fact2640 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2642 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
-    public static final BitSet FOLLOW_constraints_in_fact2644 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2647 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints2672 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
-    public static final BitSet FOLLOW_COMMA_in_constraints2676 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_constraint_in_constraints2679 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
-    public static final BitSet FOLLOW_or_constr_in_constraint2693 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2704 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2708 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2711 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2726 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2730 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2733 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_eval_key_in_unary_constr2754 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_unary_constr2757 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr2762 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2767 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr2770 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2772 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_field_constraint2786 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint2788 = new BitSet(new long[]{0x0000000000000002L,0x000007F808400000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2792 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ARROW_in_field_constraint2798 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_field_constraint2800 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint2854 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2856 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_label2880 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
-    public static final BitSet FOLLOW_COLON_in_label2882 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2898 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2906 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2909 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2924 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2932 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2935 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2957 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2962 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2967 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2970 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2972 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EQUAL_in_simple_operator2984 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GREATER_in_simple_operator2990 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator2996 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_LESS_in_simple_operator3002 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3008 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3014 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_not_key_in_simple_operator3020 = new BitSet(new long[]{0x0000000000000000L,0x0000040000400000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3023 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3026 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3029 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3032 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3036 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3041 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3044 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3047 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3053 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_excludes_key_in_simple_operator3059 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3065 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3071 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3077 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3083 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3089 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3092 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3095 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator3099 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3114 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_not_key_in_compound_operator3119 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3121 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3126 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3129 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator3133 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3136 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3141 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value3152 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value3157 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value3163 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_key_in_package_statement461 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_package_id_in_package_statement463 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_package_statement465 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_id489 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_DOT_in_package_id495 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_package_id499 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement527 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement534 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement546 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement552 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement557 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement562 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement567 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_import_statement589 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_import_name_in_import_statement591 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_import_statement594 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_function_import_statement629 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_function_key_in_function_import_statement631 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement633 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement636 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_name665 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
+    public static final BitSet FOLLOW_DOT_in_import_name671 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_import_name675 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name682 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_key_in_global722 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_data_type_in_global724 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_global_id_in_global726 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_global728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_id754 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_key_in_function786 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_data_type_in_function788 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_function_id_in_function791 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_parameters_in_function793 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function795 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_id825 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_key_in_query857 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_query_id_in_query859 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
+    public static final BitSet FOLLOW_parameters_in_query861 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query864 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_END_in_query866 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_query868 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_id900 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_query_id916 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters935 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters942 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_COMMA_in_parameters945 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters947 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters956 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_param_definition980 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_argument_in_param_definition983 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument994 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument996 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
+    public static final BitSet FOLLOW_template_key_in_template1020 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_template_id_in_template1022 = new BitSet(new long[]{0x0000000000000000L,0x0000000000600000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template1024 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_template_slot_in_template1029 = new BitSet(new long[]{0x0000000000000000L,0x0000000002400000L});
+    public static final BitSet FOLLOW_END_in_template1034 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template1036 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_id1066 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_template_id1082 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_template_slot1102 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_slot_id_in_template_slot1104 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template_slot1106 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_slot_id1131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_key_in_rule1160 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_rule_id_in_rule1162 = new BitSet(new long[]{0x0000000000000000L,0x0000800000400000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule1164 = new BitSet(new long[]{0x0000000000000000L,0x0000800000400000L});
+    public static final BitSet FOLLOW_when_part_in_rule1167 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_in_rule1170 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_when_key_in_when_part1199 = new BitSet(new long[]{0x0000000000000002L,0x0000000048400000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1201 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1204 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_id1225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_rule_id1241 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1262 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_rule_attributes1264 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1269 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes1273 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1278 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1317 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1323 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1330 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1337 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1344 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1350 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1356 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1368 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1374 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1380 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1385 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_key_in_date_effective1397 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1400 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_key_in_date_expires1411 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1414 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_key_in_enabled1428 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1431 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_salience_key_in_salience1443 = new BitSet(new long[]{0x0000000000000000L,0x0000000108000000L});
+    public static final BitSet FOLLOW_INT_in_salience1450 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_salience1459 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_key_in_no_loop1475 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1478 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1490 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1493 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_key_in_activation_group1507 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1510 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1521 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1524 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1535 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_key_in_duration1549 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
+    public static final BitSet FOLLOW_INT_in_duration1552 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_key_in_dialect1566 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_dialect1569 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1587 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active1590 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1602 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1623 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1644 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1648 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1650 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1653 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1674 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1696 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1703 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1708 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1746 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1750 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1752 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1755 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1776 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1798 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and1805 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1810 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1848 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1854 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1860 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary1866 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary1872 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary1875 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary1877 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary1883 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary1897 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist1911 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1935 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist1942 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1944 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist1946 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist1959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not2005 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2022 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2029 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2031 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2033 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2041 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval2080 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2084 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall2108 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2110 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2112 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2115 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2147 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_from_key_in_pattern_source2156 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source2188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2205 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source2221 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2249 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2253 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2255 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2257 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2265 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2271 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2308 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2313 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2315 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2319 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2323 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2325 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2331 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2335 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2337 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2343 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2347 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2396 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2400 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_key_in_collect_statement2422 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2426 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement2428 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2430 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2452 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2454 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entrypoint_id2477 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_entrypoint_id2490 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source2506 = new BitSet(new long[]{0x0000000000000002L,0x0000000008800000L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source2519 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source2526 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain2558 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain2560 = new BitSet(new long[]{0x0000000000000002L,0x0000200008800000L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain2580 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2602 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain2613 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2646 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern2659 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding2679 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding2685 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2692 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2694 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2696 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2735 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2747 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2753 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2758 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_pattern_type_in_fact2798 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2800 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
+    public static final BitSet FOLLOW_constraints_in_fact2802 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2805 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints2830 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
+    public static final BitSet FOLLOW_COMMA_in_constraints2834 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_constraint_in_constraints2837 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
+    public static final BitSet FOLLOW_or_constr_in_constraint2851 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2862 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2866 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2869 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2884 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2888 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2891 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr2912 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr2915 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr2920 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2925 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr2928 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2930 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint2944 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint2946 = new BitSet(new long[]{0x0000000000000002L,0x000007F808400000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2950 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint2956 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint2958 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint3012 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3014 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label3038 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_label3040 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3056 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective3064 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3067 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3082 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3090 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3093 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3115 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3120 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3125 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3128 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator3142 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator3148 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3154 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_LESS_in_simple_operator3160 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3166 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3172 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_not_key_in_simple_operator3178 = new BitSet(new long[]{0x0000000000000000L,0x0000040000400000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3181 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3184 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3187 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3190 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3194 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3199 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3202 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3205 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3211 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator3217 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3223 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3229 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3235 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3241 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3247 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3250 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3253 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3257 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3272 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator3277 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3279 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3284 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3287 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator3291 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3294 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3299 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value3310 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3315 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value3321 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_set_in_literal_constraint0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3205 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_DOT_in_pattern_type3209 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3211 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3216 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_ID_in_data_type3242 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_DOT_in_data_type3246 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_data_type3248 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type3253 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3279 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3281 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3292 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path3296 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3298 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_ID_in_accessor_element3322 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element3324 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3353 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3372 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk_data3376 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk_data3382 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3384 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3401 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3420 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk_data3423 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3437 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3442 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3458 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3478 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk_data3481 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3495 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3500 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3517 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3536 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk_data3539 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3553 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3558 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key3577 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_effective_key3579 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key3581 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key3607 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_expires_key3609 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key3611 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3637 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3639 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3641 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3643 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3645 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key3671 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_no_loop_key3673 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key3675 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key3701 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_auto_focus_key3703 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key3705 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key3731 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_activation_group_key3733 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key3735 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key3761 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_agenda_group_key3763 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key3765 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3791 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key3793 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3795 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_duration_key3820 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_key3842 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_key3864 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dialect_key3886 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_salience_key3908 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enabled_key3930 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_attributes_key3952 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_when_key3974 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_key3996 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_key4018 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_key4040 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_declare_key4062 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_key4084 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_key4106 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_eval_key4128 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_contains_key4150 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_matches_key4172 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_excludes_key4194 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_soundslike_key4216 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_memberof_key4238 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_not_key4260 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_in_key4282 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_or_key4304 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_and_key4326 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_exists_key4348 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_forall_key4370 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_key4392 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4415 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_entry_point_key4417 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4419 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_key4444 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_init_key4466 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_action_key4488 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_reverse_key4510 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_result_key4532 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_collect_key4554 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11491 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_synpred11493 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_or_key_in_synpred21540 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21542 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31593 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_and_key_in_synpred31595 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred41642 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41644 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMICOLON_in_synpred51746 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred61778 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_synpred61781 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred61783 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred71865 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_synpred71868 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred71870 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82366 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92427 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102449 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred112902 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred122928 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3365 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
+    public static final BitSet FOLLOW_DOT_in_pattern_type3371 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3375 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
+    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3390 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
+    public static final BitSet FOLLOW_ID_in_data_type3416 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
+    public static final BitSet FOLLOW_DOT_in_data_type3420 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_data_type3422 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type3427 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3453 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3455 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3466 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path3470 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3472 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_ID_in_accessor_element3496 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element3498 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3527 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3546 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk_data3550 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk_data3556 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3558 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3594 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data3597 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3611 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3616 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3632 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3652 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data3655 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3669 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3674 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3691 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3710 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk_data3713 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3727 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3732 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3751 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_effective_key3753 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3755 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3781 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_expires_key3783 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3785 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3811 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3813 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3815 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3817 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3819 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3845 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_no_loop_key3847 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3849 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3875 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_auto_focus_key3877 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3879 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3905 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_activation_group_key3907 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3909 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3935 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_agenda_group_key3937 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3939 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3965 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key3967 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3969 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_duration_key3994 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_key4016 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_key4038 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dialect_key4060 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_salience_key4082 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enabled_key4104 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_attributes_key4126 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_when_key4148 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_key4170 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_key4192 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_key4214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_declare_key4236 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_key4258 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_key4280 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key4302 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key4324 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key4346 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key4368 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key4390 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key4412 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key4434 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key4456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key4478 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key4500 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key4522 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key4544 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_key4566 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4589 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key4591 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4593 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_key4618 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_init_key4640 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key4662 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key4684 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key4706 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_collect_key4728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11638 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_synpred11640 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred21687 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21689 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31740 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_and_key_in_synpred31742 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred41789 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41791 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred51893 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred61925 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_synpred61928 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred61930 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred72012 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_synpred72015 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred72017 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82513 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92574 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102596 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred113060 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred123086 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Added: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DroolsParserExceptionFactory.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DroolsParserExceptionFactory.java	                        (rev 0)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DroolsParserExceptionFactory.java	2008-06-06 03:00:23 UTC (rev 20351)
@@ -0,0 +1,314 @@
+package org.drools.lang;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
+import java.util.Map.Entry;
+
+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.RecognitionException;
+import org.antlr.runtime.Token;
+import org.drools.compiler.DroolsParserException;
+
+/**
+ * Helper class that generates DroolsParserException with user friendly error
+ * messages.
+ * 
+ * @author porcelli
+ * @see DroolsParserException
+ */
+public class DroolsParserExceptionFactory {
+	public final static String MISMATCHED_TOKEN_MESSAGE_COMPLETE = "Line %1$d:%2$d mismatched input '%3$s' expecting '%4$s'%5$s";
+	public final static String MISMATCHED_TOKEN_MESSAGE_PART = "Line %1$d:%2$d mismatched input '%3$s'%4$s";
+	public final static String MISMATCHED_TREE_NODE_MESSAGE_COMPLETE = "Line %1$d:%2$d mismatched tree node '%3$s' expecting '%4$s'%5$s";
+	public final static String MISMATCHED_TREE_NODE_MESSAGE_PART = "Line %1$d:%2$d mismatched tree node '%3$s'%4$s";
+	public final static String NO_VIABLE_ALT_MESSAGE = "Line %1$d:%2$d no viable alternative at input '%3$s'%4$s";
+	public final static String EARLY_EXIT_MESSAGE = "Line %1$d:%2$d required (...)+ loop did not match anything at input '%3$s'%4$s";
+	public final static String MISMATCHED_SET_MESSAGE = "Line %1$d:%2$d mismatched input '%3$' expecting set '%4$s'%5$s.";
+	public final static String MISMATCHED_NOT_SET_MESSAGE = "Line %1$d:%2$d mismatched input '%3$' expecting set '%4$s'%5$s";
+	public final static String FAILED_PREDICATE_MESSAGE = "Line %1$d:%2$d rule '%3$s' failed predicate: {%4$s}?%5$s";
+	public final static String TRAILING_SEMI_COLON_NOT_ALLOWED_MESSAGE = "Line %1$d:%2$d trailing semi-colon not allowed%3$s";
+	public final static String PARSER_LOCATION_MESSAGE_COMPLETE = " in %1$s %2$s";
+	public final static String PARSER_LOCATION_MESSAGE_PART = " in %1$s";
+
+	public static final String[] parserLocations = new String[] { "package",
+			"import", "function import", "global", "function", "query",
+			"template", "rule", "rule attribute", "pattern" };
+
+	private String[] tokenNames = null;
+	private Stack<Map<Integer, String>> paraphrases = null;
+
+	/**
+	 * DroolsParserErrorMessages constructor.
+	 * 
+	 * @param tokenNames
+	 *            tokenNames generated by ANTLR
+	 * @param paraphrases
+	 *            paraphrases parser structure
+	 */
+	public DroolsParserExceptionFactory(String[] tokenNames,
+			Stack<Map<Integer, String>> paraphrases) {
+		this.tokenNames = tokenNames;
+		this.paraphrases = paraphrases;
+	}
+
+	/**
+	 * This method creates a DroolsParserException for trailing semicolon
+	 * exception, full of information.
+	 * 
+	 * @param line
+	 *            line number
+	 * @param column
+	 *            column position
+	 * @param offset
+	 *            char offset
+	 * @return DroolsParserException filled.
+	 */
+	public DroolsParserException createTrailingSemicolonException(int line,
+			int column, int offset) {
+		String message = String
+				.format(
+						DroolsParserExceptionFactory.TRAILING_SEMI_COLON_NOT_ALLOWED_MESSAGE,
+						line, column, formatParserLocation());
+
+		return new DroolsParserException("ERR 108", message, line, column,
+				offset, null);
+	}
+
+	/**
+	 * This method creates a DroolsParserException full of information.
+	 * 
+	 * @param e
+	 *            original exception
+	 * @return DroolsParserException filled.
+	 */
+	public DroolsParserException createDroolsException(RecognitionException e) {
+		List<String> codeAndMessage = createErrorMessage(e);
+		return new DroolsParserException(codeAndMessage.get(1), codeAndMessage
+				.get(0), e.line, e.charPositionInLine, e.index, e);
+	}
+
+	/**
+	 * This will take a RecognitionException, and create a sensible error
+	 * message out of it
+	 */
+	private List<String> createErrorMessage(RecognitionException e) {
+		List<String> codeAndMessage = new ArrayList<String>(2);
+		String message = "";
+		if (e instanceof MismatchedTokenException) {
+			MismatchedTokenException mte = (MismatchedTokenException) e;
+			if (mte.expecting >= 0 && mte.expecting < tokenNames.length) {
+				message = String
+						.format(
+								DroolsParserExceptionFactory.MISMATCHED_TOKEN_MESSAGE_COMPLETE,
+								e.line, e.charPositionInLine,
+								getBetterToken(e.token),
+								getBetterToken(mte.expecting),
+								formatParserLocation());
+				codeAndMessage.add(message);
+				codeAndMessage.add("ERR 101");
+			} else {
+				message = String
+						.format(
+								DroolsParserExceptionFactory.MISMATCHED_TOKEN_MESSAGE_PART,
+								e.line, e.charPositionInLine,
+								getBetterToken(e.token), formatParserLocation());
+				codeAndMessage.add(message);
+				codeAndMessage.add("ERR 101");
+			}
+		} else if (e instanceof MismatchedTreeNodeException) {
+			MismatchedTreeNodeException mtne = (MismatchedTreeNodeException) e;
+			if (mtne.expecting >= 0 && mtne.expecting < tokenNames.length) {
+				message = String
+						.format(
+								DroolsParserExceptionFactory.MISMATCHED_TREE_NODE_MESSAGE_COMPLETE,
+								e.line, e.charPositionInLine,
+								getBetterToken(e.token),
+								getBetterToken(mtne.expecting),
+								formatParserLocation());
+				codeAndMessage.add(message);
+				codeAndMessage.add("ERR 102");
+			} else {
+				message = String
+						.format(
+								DroolsParserExceptionFactory.MISMATCHED_TREE_NODE_MESSAGE_PART,
+								e.line, e.charPositionInLine,
+								getBetterToken(e.token), formatParserLocation());
+				codeAndMessage.add(message);
+				codeAndMessage.add("ERR 102");
+			}
+		} else if (e instanceof NoViableAltException) {
+			// NoViableAltException nvae = (NoViableAltException) e;
+			message = String.format(
+					DroolsParserExceptionFactory.NO_VIABLE_ALT_MESSAGE, e.line,
+					e.charPositionInLine, getBetterToken(e.token),
+					formatParserLocation());
+			codeAndMessage.add(message);
+			codeAndMessage.add("ERR 103");
+		} else if (e instanceof EarlyExitException) {
+			// EarlyExitException eee = (EarlyExitException) e;
+			message = String.format(
+					DroolsParserExceptionFactory.EARLY_EXIT_MESSAGE, e.line,
+					e.charPositionInLine, getBetterToken(e.token),
+					formatParserLocation());
+			codeAndMessage.add(message);
+			codeAndMessage.add("ERR 104");
+		} else if (e instanceof MismatchedSetException) {
+			MismatchedSetException mse = (MismatchedSetException) e;
+			message = String.format(
+					DroolsParserExceptionFactory.MISMATCHED_SET_MESSAGE, e.line,
+					e.charPositionInLine, getBetterToken(e.token),
+					mse.expecting, formatParserLocation());
+			codeAndMessage.add(message);
+			codeAndMessage.add("ERR 105");
+		} else if (e instanceof MismatchedNotSetException) {
+			MismatchedNotSetException mse = (MismatchedNotSetException) e;
+			message = String.format(
+					DroolsParserExceptionFactory.MISMATCHED_NOT_SET_MESSAGE,
+					e.line, e.charPositionInLine, getBetterToken(e.token),
+					mse.expecting, formatParserLocation());
+			codeAndMessage.add(message);
+			codeAndMessage.add("ERR 106");
+		} else if (e instanceof FailedPredicateException) {
+			FailedPredicateException fpe = (FailedPredicateException) e;
+			message = String.format(
+					DroolsParserExceptionFactory.FAILED_PREDICATE_MESSAGE, e.line,
+					e.charPositionInLine, fpe.ruleName, fpe.predicateText,
+					formatParserLocation());
+			codeAndMessage.add(message);
+			codeAndMessage.add("ERR 107");
+		}
+		if (codeAndMessage.get(0).length() == 0) {
+			codeAndMessage.add("?????");
+		}
+		return codeAndMessage;
+	}
+
+	/**
+	 * This will take Paraphrases stack, and create a sensible location
+	 */
+	private String formatParserLocation() {
+		StringBuilder sb = new StringBuilder();
+		for (Map<Integer, String> map : paraphrases) {
+			for (Entry<Integer, String> activeEntry : map.entrySet()) {
+				if (activeEntry.getValue().length() == 0) {
+					sb.append(String.format(PARSER_LOCATION_MESSAGE_PART,
+							parserLocations[activeEntry.getKey()]));
+				} else {
+					sb.append(String.format(PARSER_LOCATION_MESSAGE_COMPLETE,
+							parserLocations[activeEntry.getKey()], activeEntry
+									.getValue()));
+				}
+			}
+		}
+		return sb.toString();
+	}
+
+	/**
+	 * Helper method that creates a user friendly token definition
+	 * 
+	 * @param token
+	 *            token
+	 * @return user friendly token definition
+	 */
+	private String getBetterToken(Token token) {
+		return getBetterToken(token.getType(), token.getText());
+	}
+
+	/**
+	 * Helper method that creates a user friendly token definition
+	 * 
+	 * @param tokenType
+	 *            token type
+	 * @return user friendly token definition
+	 */
+	private String getBetterToken(int tokenType) {
+		return getBetterToken(tokenType, null);
+	}
+
+	/**
+	 * Helper method that creates a user friendly token definition
+	 * 
+	 * @param tokenType
+	 *            token type
+	 * @param defaultValue
+	 *            default value for identifier token, may be null
+	 * @return user friendly token definition
+	 */
+	private String getBetterToken(int tokenType, String defaultValue) {
+		switch (tokenType) {
+		case DRLLexer.INT:
+			return defaultValue == null ? "int" : defaultValue;
+		case DRLLexer.FLOAT:
+			return defaultValue == null ? "float" : defaultValue;
+		case DRLLexer.STRING:
+			return defaultValue == null ? "string" : defaultValue;
+		case DRLLexer.BOOL:
+			return defaultValue == null ? "boolean" : defaultValue;
+		case DRLLexer.NULL:
+			return "null";
+		case DRLLexer.THEN:
+			return "then";
+		case DRLLexer.END:
+			return "end";
+		case DRLLexer.GRAVE_ACCENT:
+			return "`";
+		case DRLLexer.SEMICOLON:
+			return ";";
+		case DRLLexer.DOT_STAR:
+			return ".*";
+		case DRLLexer.COLON:
+			return ":";
+		case DRLLexer.EQUAL:
+			return "==";
+		case DRLLexer.NOT_EQUAL:
+			return "!=";
+		case DRLLexer.GREATER:
+			return ">";
+		case DRLLexer.GREATER_EQUAL:
+			return ">=";
+		case DRLLexer.LESS:
+			return "<";
+		case DRLLexer.LESS_EQUAL:
+			return "<=";
+		case DRLLexer.ARROW:
+			return "->";
+		case DRLLexer.ID:
+			return defaultValue == null ? "identifier" : defaultValue;
+		case DRLLexer.LEFT_PAREN:
+			return "(";
+		case DRLLexer.RIGHT_PAREN:
+			return ")";
+		case DRLLexer.LEFT_SQUARE:
+			return "[";
+		case DRLLexer.RIGHT_SQUARE:
+			return "]";
+		case DRLLexer.LEFT_CURLY:
+			return "{";
+		case DRLLexer.RIGHT_CURLY:
+			return "}";
+		case DRLLexer.COMMA:
+			return ",";
+		case DRLLexer.DOT:
+			return ".";
+		case DRLLexer.DOUBLE_AMPER:
+			return "&&";
+		case DRLLexer.DOUBLE_PIPE:
+			return "||";
+		case DRLLexer.MISC:
+			return defaultValue == null ? "misc" : defaultValue;
+		case DRLLexer.EOF:
+			return "<eof>";
+		default:
+			return tokenType > tokenNames.length ? "unknown"
+					: tokenNames[tokenType];
+		}
+	}
+}
\ No newline at end of file

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-06-06 02:47:12 UTC (rev 20350)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-06-06 03:00:23 UTC (rev 20351)
@@ -101,7 +101,7 @@
 @parser::header {
 	package org.drools.lang;
 	
-	import java.util.Iterator;
+	import org.drools.compiler.DroolsParserException;
 }
 
 @lexer::header {
@@ -127,145 +127,116 @@
 }
 
 @parser::members {
-	private List errors = new ArrayList();
+	private Stack<Map<Integer, String>> paraphrases = new Stack<Map<Integer, String>>();
+	private List<DroolsParserException> errors = new ArrayList<DroolsParserException>();
+	private DroolsParserExceptionFactory errorMessageFactory = new DroolsParserExceptionFactory(tokenNames, paraphrases);
 	private String source = "unknown";
-	private int lineOffset = 0;
 
-	private boolean validateLT(int LTNumber, String text){
-		if (null == input) return false;
-		if (null == input.LT(LTNumber)) return false;
-		if (null == input.LT(LTNumber).getText()) return false;
-
+	private boolean validateLT(int LTNumber, String text) {
+		if (null == input)
+			return false;
+		if (null == input.LT(LTNumber))
+			return false;
+		if (null == input.LT(LTNumber).getText())
+			return false;
+	
 		String text2Validate = input.LT(LTNumber).getText();
 		return text2Validate.equalsIgnoreCase(text);
 	}
-
-	private boolean validateIdentifierKey(String text){
+	
+	private boolean validateIdentifierKey(String text) {
 		return validateLT(1, text);
 	}
 	
-    void checkTrailingSemicolon(String text, int line) {
-    	if (text.trim().endsWith( ";" ) ) {
-    		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
-    	}
-    }
-
-    private String safeSubstring( String text, int start, int end ) {
-        return text.substring( Math.min( start, text.length() ), Math.min( Math.max( start, end ), text.length() ) );
-    }
+	void checkTrailingSemicolon(String text, Token token) {
+		if (text.trim().endsWith(";")) {
+			errors.add(errorMessageFactory
+					.createTrailingSemicolonException(((DroolsToken) token)
+							.getLine(), ((DroolsToken) token)
+							.getCharPositionInLine(), ((DroolsToken) token)
+							.getStopIndex()));
+		}
+	}
 	
-	private int offset(int line) {
-		return line + lineOffset;
+	private String safeSubstring(String text, int start, int end) {
+		return text.substring(Math.min(start, text.length()), Math.min(Math
+				.max(start, end), text.length()));
 	}
+	
+	public void reportError(RecognitionException ex) {
+		// if we've already reported an error and have not matched a token
+		// yet successfully, don't report any errors.
+		if (errorRecovery) {
+			return;
+		}
+		errorRecovery = true;
+	
+		errors.add(errorMessageFactory.createDroolsException(ex));
+	}
+	
+	/** return the raw DroolsParserException errors */
+	public List<DroolsParserException> getErrors() {
+		return errors;
+	}
+	
+	/** Return a list of pretty strings summarising the errors */
+	public List<String> getErrorMessages() {
+		List<String> messages = new ArrayList<String>(errors.size());
+	
+		for (DroolsParserException activeException : errors) {
+			messages.add(activeException.getMessage());
+		}
+	
+		return messages;
+	}
+	
+	/** return true if any parser errors were accumulated */
+	public boolean hasErrors() {
+		return !errors.isEmpty();
+	}
 
 	/**
-	 * This will set the offset to record when reparsing. Normally is zero of course 
+	 * Method that adds a paraphrase type into paraphrases stack.
+	 * 
+	 * @param type
+	 *            paraphrase type
 	 */
-	public void setLineOffset(int i) {
-	 	this.lineOffset = i;
+	private void pushParaphrases(int type) {
+		Map<Integer, String> activeMap = new HashMap<Integer, String>();
+		activeMap.put(type, "");
+		paraphrases.push(activeMap);
 	}
-	
-	public void reportError(RecognitionException ex) {
-	        // if we've already reported an error and have not matched a token
-                // yet successfully, don't report any errors.
-                if ( errorRecovery ) {
-                        return;
-                }
-                errorRecovery = true;
 
-		ex.line = offset(ex.line); //add the offset if there is one
-		errors.add( ex ); 
+	/**
+	 * Method that sets paraphrase value for a type into paraphrases stack.
+	 * 
+	 * @param type
+	 *            paraphrase type
+	 * @param value
+	 *            paraphrase value
+	 */
+	private void setParaphrasesValue(int type, String value) {
+		paraphrases.peek().put(type, value);
 	}
-     	
- 	/** return the raw RecognitionException errors */
- 	public List getErrors() {
- 		return errors;
- 	}
- 	
- 	/** Return a list of pretty strings summarising the errors */
- 	public List getErrorMessages() {
- 		List messages = new ArrayList();
-	for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
- 	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
- 	     	}
- 	     	return messages;
- 	}
- 	
- 	/** return true if any parser errors were accumulated */
- 	public boolean hasErrors() {
-	return ! errors.isEmpty();
- 	}
- 	
- 	/** This will take a RecognitionException, and create a sensible error message out of it */
- 	public String createErrorMessage(RecognitionException e)
-    {
-	StringBuffer message = new StringBuffer();		
-            message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
-            if ( e instanceof MismatchedTokenException ) {
-                    MismatchedTokenException mte = (MismatchedTokenException)e;
-                    if( mte.expecting >=0 && mte.expecting < tokenNames.length ) {
-                        message.append("mismatched token: "+
-                                                       e.token+
-                                                       "; expecting type "+
-                                                       tokenNames[mte.expecting]);
-                    } else {
-                        message.append("mismatched token: "+
-                                                       e.token+
-                                                       ";");
-                    }
-            }
-            else if ( e instanceof MismatchedTreeNodeException ) {
-                    MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
-                    if( mtne.expecting >=0 && mtne.expecting < tokenNames.length ) {
-                        message.append("mismatched tree node: "+
-                                                       mtne.toString() +
-                                                       "; expecting type "+
-                                                       tokenNames[mtne.expecting]);
-                    } else {
-                        message.append("mismatched tree node: "+
-                                                       mtne.toString() +
-                                                       ";");
-                    }
-            }
-            else if ( e instanceof NoViableAltException ) {
-                    NoViableAltException nvae = (NoViableAltException)e;
-		message.append( "Unexpected token '" + e.token.getText() + "'" );
-                    /*
-                    message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
-                                                       " state "+nvae.stateNumber+
-                                                       " (decision="+nvae.decisionNumber+
-                                                       ") no viable alt; token="+
-                                                       e.token);
-                                                       */
-            }
-            else if ( e instanceof EarlyExitException ) {
-                    EarlyExitException eee = (EarlyExitException)e;
-                    message.append("required (...)+ loop (decision="+
-                                                       eee.decisionNumber+
-                                                       ") did not match anything; token="+
-                                                       e.token);
-            }
-            else if ( e instanceof MismatchedSetException ) {
-                    MismatchedSetException mse = (MismatchedSetException)e;
-                    message.append("mismatched token '"+
-                                                       e.token+
-                                                       "' expecting set "+mse.expecting);
-            }
-            else if ( e instanceof MismatchedNotSetException ) {
-                    MismatchedNotSetException mse = (MismatchedNotSetException)e;
-                    message.append("mismatched token '"+
-                                                       e.token+
-                                                       "' expecting set "+mse.expecting);
-            }
-            else if ( e instanceof FailedPredicateException ) {
-                    FailedPredicateException fpe = (FailedPredicateException)e;
-                    message.append("rule "+fpe.ruleName+" failed predicate: {"+
-                                                       fpe.predicateText+"}?");
-            } else if (e instanceof GeneralParseException) {
-		message.append(" " + e.getMessage());
+
+	/**
+	 * Helper method that creates a string from a token list.
+	 * 
+	 * @param tokenList
+	 *            token list
+	 * @return string
+	 */
+	private String buildStringFromTokens(List<Token> tokenList) {
+		StringBuilder sb = new StringBuilder();
+		if (null != tokenList) {
+			for (Token activeToken : tokenList) {
+				if (null != activeToken) {
+					sb.append(activeToken.getText());
+				}
+			}
+		}
+		return sb.toString();
 	}
-           	return message.toString();
-    }
 }
 
 compilation_unit
@@ -281,12 +252,15 @@
 	}
 
 package_statement
+ at init  { pushParaphrases(DroolsParaphareseTypes.PACKAGE); }
+ at after { paraphrases.pop(); }
 	:	package_key package_id SEMICOLON?
 		-> ^(package_key package_id)
 	;
 
 package_id
-	:	ID ( DOT ID )*
+	:	id+=ID ( id+=DOT id+=ID )*
+	{	setParaphrasesValue(DroolsParaphareseTypes.PACKAGE, buildStringFromTokens($id));	}
 		-> ^(VT_PACKAGE_ID ID+)
 	;
 
@@ -302,48 +276,63 @@
 	;
 
 import_statement
-	:	import_key import_name SEMICOLON?
+ at init  { pushParaphrases(DroolsParaphareseTypes.IMPORT); }
+ at after { paraphrases.pop(); }
+	:	import_key import_name[DroolsParaphareseTypes.IMPORT] SEMICOLON?
 		-> ^(import_key import_name)
 	;
 
 function_import_statement
-	:	imp=import_key function_key import_name SEMICOLON?
+ at init  { pushParaphrases(DroolsParaphareseTypes.FUNCTION_IMPORT); }
+ at after { paraphrases.pop(); }
+	:	imp=import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] SEMICOLON?
 		-> ^(VT_FUNCTION_IMPORT[$imp.start] function_key import_name)
 	;
 
-import_name
-	:	ID ( DOT ID )* DOT_STAR?
+import_name [int importType]
+	:	id+=ID ( id+=DOT id+=ID )* id+=DOT_STAR?
+	{	setParaphrasesValue($importType, buildStringFromTokens($id));	}
 		-> ^(VT_IMPORT_ID ID+ DOT_STAR?)
 	;
 
 global
+ at init  { pushParaphrases(DroolsParaphareseTypes.GLOBAL); }
+ at after { paraphrases.pop(); }
 	:	global_key data_type global_id SEMICOLON?
 		-> ^(global_key data_type global_id)
 	;
 
 global_id
 	:	id=ID
+	{	setParaphrasesValue(DroolsParaphareseTypes.GLOBAL, $id.text);	}
 		-> VT_GLOBAL_ID[$id]
 	;
 
 function
+ at init  { pushParaphrases(DroolsParaphareseTypes.FUNCTION); }
+ at after { paraphrases.pop(); }
 	:	function_key data_type? function_id parameters curly_chunk
 		-> ^(function_key data_type? function_id parameters curly_chunk)
 	;
 
 function_id
 	:	id=ID
+	{	setParaphrasesValue(DroolsParaphareseTypes.FUNCTION, $id.text);	}
 		-> VT_FUNCTION_ID[$id]
 	;
 
 query
+ at init  { pushParaphrases(DroolsParaphareseTypes.QUERY); }
+ at after { paraphrases.pop(); }
 	:	query_key query_id parameters? normal_lhs_block END SEMICOLON?
 		-> ^(query_key query_id parameters? normal_lhs_block END)
 	;
 
 query_id
-	: 	value=ID	-> VT_QUERY_ID[$value]
-	| 	value=STRING	-> VT_QUERY_ID[$value]
+	: 	id=ID
+	{	setParaphrasesValue(DroolsParaphareseTypes.QUERY, $id.text);	} -> VT_QUERY_ID[$id]
+	| 	id=STRING
+	{	setParaphrasesValue(DroolsParaphareseTypes.QUERY, $id.text);	} -> VT_QUERY_ID[$id]
 	;
 
 parameters
@@ -363,6 +352,8 @@
 
 
 template
+ at init  { pushParaphrases(DroolsParaphareseTypes.TEMPLATE); }
+ at after { paraphrases.pop(); }
 	:	template_key template_id SEMICOLON?
 		template_slot+
 		END SEMICOLON?
@@ -370,8 +361,10 @@
 	;
 
 template_id
-	: 	value=ID	-> VT_TEMPLATE_ID[$value]
-	| 	value=STRING	-> VT_TEMPLATE_ID[$value]
+	: 	id=ID
+	{	setParaphrasesValue(DroolsParaphareseTypes.TEMPLATE, $id.text);	} -> VT_TEMPLATE_ID[$id]
+	| 	id=STRING
+	{	setParaphrasesValue(DroolsParaphareseTypes.TEMPLATE, $id.text);	} -> VT_TEMPLATE_ID[$id]
 	;
 
 template_slot
@@ -384,6 +377,8 @@
 	;
 
 rule
+ at init  { pushParaphrases(DroolsParaphareseTypes.RULE); }
+ at after { paraphrases.pop(); }
 	:	rule_key rule_id rule_attributes? when_part? rhs_chunk
 		-> ^(rule_key rule_id rule_attributes? when_part? rhs_chunk)
 	;
@@ -394,8 +389,10 @@
 	;
 
 rule_id
-	: 	value=ID	-> VT_RULE_ID[$value]
-	| 	value=STRING	-> VT_RULE_ID[$value]
+	: 	id=ID
+	{	setParaphrasesValue(DroolsParaphareseTypes.RULE, $id.text);	} -> VT_RULE_ID[$id]
+	| 	id=STRING
+	{	setParaphrasesValue(DroolsParaphareseTypes.RULE, $id.text);	} -> VT_RULE_ID[$id]
 	;
 
 rule_attributes
@@ -404,6 +401,8 @@
 	;
 
 rule_attribute
+ at init  { pushParaphrases(DroolsParaphareseTypes.RULE_ATTRIBUTE); }
+ at after { paraphrases.pop(); }
 	:	salience 
 	|	no_loop  
 	|	agenda_group  
@@ -528,7 +527,7 @@
 lhs_eval
 	:	ev=eval_key pc=paren_chunk
 	{	String body = safeSubstring( $pc.text, 1, $pc.text.length()-1 );
-		checkTrailingSemicolon( body, offset(($ev.start).getLine()) );	}
+		checkTrailingSemicolon( body, $ev.start );	}
 		-> ^(eval_key paren_chunk)
 	;
 
@@ -630,6 +629,8 @@
 	;
 
 fact
+ at init  { pushParaphrases(DroolsParaphareseTypes.PATTERN); }
+ at after { paraphrases.pop(); }
 	:	pattern_type LEFT_PAREN constraints? RIGHT_PAREN
 	->	^(VT_FACT pattern_type constraints? RIGHT_PAREN)
 	;
@@ -724,7 +725,9 @@
 	;
 
 pattern_type
-	:	ID ( DOT ID )* dimension_definition*
+	:	id+=ID ( id+=DOT id+=ID )* 
+	{	setParaphrasesValue(DroolsParaphareseTypes.PATTERN, buildStringFromTokens($id));	} 
+	    dimension_definition*
 		-> ^(VT_PATTERN_TYPE ID+ dimension_definition*)
 	;
 
@@ -1071,7 +1074,6 @@
 	:	':'
 	;
 
-
 EQUAL
 	:	'=='
 	;




More information about the jboss-svn-commits mailing list