[jboss-svn-commits] JBL Code SVN: r5467 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/lang main/resources/org/drools/lang test/java/org/drools/lang test/resources/org/drools/lang

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 4 06:51:42 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-08-04 06:51:30 -0400 (Fri, 04 Aug 2006)
New Revision: 5467

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/test_Templates.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Log:
JBRULES-330 - fact templates are go

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java	2006-08-04 10:33:01 UTC (rev 5466)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java	2006-08-04 10:51:30 UTC (rev 5467)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-01 15:50:19
+// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-04 11:44:11
 
 	package org.drools.lang;
 	import java.util.List;
@@ -15,7 +15,7 @@
 
 public class RuleParser extends Parser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "EOL", "ID", "INT", "BOOL", "STRING", "FLOAT", "MISC", "WS", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "\';\'", "\'package\'", "\'import\'", "\'.\'", "\'.*\'", "\'expander\'", "\'global\'", "\'function\'", "\'(\'", "\',\'", "\')\'", "\'{\'", "\'}\'", "\'query\'", "\'end\'", "\'rule\'", "\'when\'", "\':\'", "\'then\'", "\'attributes\'", "\'salience\'", "\'no-loop\'", "\'auto-focus\'", "\'activation-group\'", "\'agenda-group\'", "\'duration\'", "\'or\'", "\'||\'", "\'&\'", "\'|\'", "\'null\'", "\'->\'", "\'and\'", "\'&&\'", "\'exists\'", "\'not\'", "\'eval\'", "\'[\'", "\']\'", "\'use\'", "\'==\'", "\'=\'", "\'>\'", "\'>=\'", "\'<\'", "\'<=\'", "\'!=\'", "\'contains\'", "\'matches\'", "\'excludes\'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "EOL", "ID", "INT", "BOOL", "STRING", "FLOAT", "MISC", "WS", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "\';\'", "\'package\'", "\'import\'", "\'.\'", "\'.*\'", "\'expander\'", "\'global\'", "\'function\'", "\'(\'", "\',\'", "\')\'", "\'{\'", "\'}\'", "\'query\'", "\'end\'", "\'template\'", "\'rule\'", "\'when\'", "\':\'", "\'then\'", "\'attributes\'", "\'salience\'", "\'no-loop\'", "\'auto-focus\'", "\'activation-group\'", "\'agenda-group\'", "\'duration\'", "\'or\'", "\'||\'", "\'&\'", "\'|\'", "\'null\'", "\'->\'", "\'and\'", "\'&&\'", "\'exists\'", "\'not\'", "\'eval\'", "\'[\'", "\']\'", "\'use\'", "\'==\'", "\'=\'", "\'>\'", "\'>=\'", "\'<\'", "\'<=\'", "\'!=\'", "\'contains\'", "\'matches\'", "\'excludes\'"
     };
     public static final int BOOL=7;
     public static final int INT=6;
@@ -332,16 +332,18 @@
 
 
     // $ANTLR start compilation_unit
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:256:1: compilation_unit : opt_eol prolog (r= rule | q= query | extra_statement )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:256:1: compilation_unit : opt_eol prolog (r= rule | q= query | t= template | extra_statement )* ;
     public void compilation_unit() throws RecognitionException {   
         RuleDescr r = null;
 
         QueryDescr q = null;
 
+        FactTemplateDescr t = null;
 
+
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:257:17: ( opt_eol prolog (r= rule | q= query | extra_statement )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:257:17: opt_eol prolog (r= rule | q= query | extra_statement )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:257:17: ( opt_eol prolog (r= rule | q= query | t= template | extra_statement )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:257:17: opt_eol prolog (r= rule | q= query | t= template | extra_statement )*
             {
             following.push(FOLLOW_opt_eol_in_compilation_unit57);
             opt_eol();
@@ -351,10 +353,10 @@
             prolog();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:259:17: (r= rule | q= query | extra_statement )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:259:17: (r= rule | q= query | t= template | extra_statement )*
             loop2:
             do {
-                int alt2=4;
+                int alt2=5;
                 alt2 = dfa2.predict(input); 
                 switch (alt2) {
             	case 1 :
@@ -380,9 +382,20 @@
             	    }
             	    break;
             	case 3 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:261:25: extra_statement
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:261:25: t= template
             	    {
-            	    following.push(FOLLOW_extra_statement_in_compilation_unit91);
+            	    following.push(FOLLOW_template_in_compilation_unit93);
+            	    t=template();
+            	    following.pop();
+
+            	    this.packageDescr.addFactTemplate ( t ); 
+
+            	    }
+            	    break;
+            	case 4 :
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:262:25: extra_statement
+            	    {
+            	    following.push(FOLLOW_extra_statement_in_compilation_unit101);
             	    extra_statement();
             	    following.pop();
 
@@ -411,7 +424,7 @@
 
 
     // $ANTLR start prolog
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:265:1: prolog : opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:266:1: prolog : opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol ;
     public void prolog() throws RecognitionException {   
         String name = null;
 
@@ -420,33 +433,33 @@
         		String packageName = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:269:17: ( opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:269:17: opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:270:17: ( opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:270:17: opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_prolog115);
+            following.push(FOLLOW_opt_eol_in_prolog125);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:270:17: (name= package_statement )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:271:17: (name= package_statement )?
             int alt3=2;
             int LA3_0 = input.LA(1);
             if ( LA3_0==16 ) {
                 alt3=1;
             }
-            else if ( LA3_0==-1||LA3_0==EOL||LA3_0==15||LA3_0==17||(LA3_0>=20 && LA3_0<=22)||LA3_0==28||LA3_0==30 ) {
+            else if ( LA3_0==-1||LA3_0==EOL||LA3_0==15||LA3_0==17||(LA3_0>=20 && LA3_0<=22)||LA3_0==28||(LA3_0>=30 && LA3_0<=31) ) {
                 alt3=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("270:17: (name= package_statement )?", 3, 0, input);
+                    new NoViableAltException("271:17: (name= package_statement )?", 3, 0, input);
 
                 throw nvae;
             }
             switch (alt3) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:270:19: name= package_statement
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:271:19: name= package_statement
                     {
-                    following.push(FOLLOW_package_statement_in_prolog123);
+                    following.push(FOLLOW_package_statement_in_prolog133);
                     name=package_statement();
                     following.pop();
 
@@ -460,16 +473,16 @@
              
             			this.packageDescr = new PackageDescr( name ); 
             		
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:274:17: ( extra_statement | expander )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:275:17: ( extra_statement | expander )*
             loop4:
             do {
                 int alt4=3;
                 alt4 = dfa4.predict(input); 
                 switch (alt4) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:274:25: extra_statement
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:275:25: extra_statement
             	    {
-            	    following.push(FOLLOW_extra_statement_in_prolog138);
+            	    following.push(FOLLOW_extra_statement_in_prolog148);
             	    extra_statement();
             	    following.pop();
 
@@ -477,9 +490,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:275:25: expander
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:276:25: expander
             	    {
-            	    following.push(FOLLOW_expander_in_prolog144);
+            	    following.push(FOLLOW_expander_in_prolog154);
             	    expander();
             	    following.pop();
 
@@ -492,7 +505,7 @@
                 }
             } while (true);
 
-            following.push(FOLLOW_opt_eol_in_prolog156);
+            following.push(FOLLOW_opt_eol_in_prolog166);
             opt_eol();
             following.pop();
 
@@ -512,7 +525,7 @@
 
 
     // $ANTLR start package_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:281:1: package_statement returns [String packageName] : 'package' opt_eol name= dotted_name ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:282:1: package_statement returns [String packageName] : 'package' opt_eol name= dotted_name ( ';' )? opt_eol ;
     public String package_statement() throws RecognitionException {   
         String packageName;
         String name = null;
@@ -522,45 +535,45 @@
         		packageName = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:286:17: ( 'package' opt_eol name= dotted_name ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:286:17: 'package' opt_eol name= dotted_name ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:287:17: ( 'package' opt_eol name= dotted_name ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:287:17: 'package' opt_eol name= dotted_name ( ';' )? opt_eol
             {
-            match(input,16,FOLLOW_16_in_package_statement180); 
-            following.push(FOLLOW_opt_eol_in_package_statement182);
+            match(input,16,FOLLOW_16_in_package_statement190); 
+            following.push(FOLLOW_opt_eol_in_package_statement192);
             opt_eol();
             following.pop();
 
-            following.push(FOLLOW_dotted_name_in_package_statement186);
+            following.push(FOLLOW_dotted_name_in_package_statement196);
             name=dotted_name();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:286:52: ( ';' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:287:52: ( ';' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
             if ( LA5_0==15 ) {
                 alt5=1;
             }
-            else if ( LA5_0==-1||LA5_0==EOL||LA5_0==17||(LA5_0>=20 && LA5_0<=22)||LA5_0==28||LA5_0==30 ) {
+            else if ( LA5_0==-1||LA5_0==EOL||LA5_0==17||(LA5_0>=20 && LA5_0<=22)||LA5_0==28||(LA5_0>=30 && LA5_0<=31) ) {
                 alt5=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("286:52: ( \';\' )?", 5, 0, input);
+                    new NoViableAltException("287:52: ( \';\' )?", 5, 0, input);
 
                 throw nvae;
             }
             switch (alt5) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:286:52: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:287:52: ';'
                     {
-                    match(input,15,FOLLOW_15_in_package_statement188); 
+                    match(input,15,FOLLOW_15_in_package_statement198); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_package_statement191);
+            following.push(FOLLOW_opt_eol_in_package_statement201);
             opt_eol();
             following.pop();
 
@@ -583,51 +596,51 @@
 
 
     // $ANTLR start import_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:292:1: import_statement : 'import' opt_eol name= import_name ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:293:1: import_statement : 'import' opt_eol name= import_name ( ';' )? opt_eol ;
     public void import_statement() throws RecognitionException {   
         String name = null;
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:293:17: ( 'import' opt_eol name= import_name ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:293:17: 'import' opt_eol name= import_name ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:294:17: ( 'import' opt_eol name= import_name ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:294:17: 'import' opt_eol name= import_name ( ';' )? opt_eol
             {
-            match(input,17,FOLLOW_17_in_import_statement207); 
-            following.push(FOLLOW_opt_eol_in_import_statement209);
+            match(input,17,FOLLOW_17_in_import_statement217); 
+            following.push(FOLLOW_opt_eol_in_import_statement219);
             opt_eol();
             following.pop();
 
-            following.push(FOLLOW_import_name_in_import_statement213);
+            following.push(FOLLOW_import_name_in_import_statement223);
             name=import_name();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:293:51: ( ';' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:294:51: ( ';' )?
             int alt6=2;
             int LA6_0 = input.LA(1);
             if ( LA6_0==15 ) {
                 alt6=1;
             }
-            else if ( LA6_0==-1||LA6_0==EOL||LA6_0==17||(LA6_0>=20 && LA6_0<=22)||LA6_0==28||LA6_0==30 ) {
+            else if ( LA6_0==-1||LA6_0==EOL||LA6_0==17||(LA6_0>=20 && LA6_0<=22)||LA6_0==28||(LA6_0>=30 && LA6_0<=31) ) {
                 alt6=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("293:51: ( \';\' )?", 6, 0, input);
+                    new NoViableAltException("294:51: ( \';\' )?", 6, 0, input);
 
                 throw nvae;
             }
             switch (alt6) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:293:51: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:294:51: ';'
                     {
-                    match(input,15,FOLLOW_15_in_import_statement215); 
+                    match(input,15,FOLLOW_15_in_import_statement225); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_import_statement218);
+            following.push(FOLLOW_opt_eol_in_import_statement228);
             opt_eol();
             following.pop();
 
@@ -651,7 +664,7 @@
 
 
     // $ANTLR start import_name
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:300:1: import_name returns [String name] : id= ID ( '.' id= ID )* (star= '.*' )? ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:301:1: import_name returns [String name] : id= ID ( '.' id= ID )* (star= '.*' )? ;
     public String import_name() throws RecognitionException {   
         String name;
         Token id=null;
@@ -661,13 +674,13 @@
         		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:305:17: (id= ID ( '.' id= ID )* (star= '.*' )? )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:305:17: id= ID ( '.' id= ID )* (star= '.*' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:306:17: (id= ID ( '.' id= ID )* (star= '.*' )? )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:306:17: id= ID ( '.' id= ID )* (star= '.*' )?
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_name249); 
+            match(input,ID,FOLLOW_ID_in_import_name259); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:305:46: ( '.' id= ID )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:306:46: ( '.' id= ID )*
             loop7:
             do {
                 int alt7=2;
@@ -679,11 +692,11 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:305:48: '.' id= ID
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:306:48: '.' id= ID
             	    {
-            	    match(input,18,FOLLOW_18_in_import_name255); 
+            	    match(input,18,FOLLOW_18_in_import_name265); 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_import_name259); 
+            	    match(input,ID,FOLLOW_ID_in_import_name269); 
             	     name = name + "." + id.getText(); 
 
             	    }
@@ -694,27 +707,27 @@
                 }
             } while (true);
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:305:99: (star= '.*' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:306:99: (star= '.*' )?
             int alt8=2;
             int LA8_0 = input.LA(1);
             if ( LA8_0==19 ) {
                 alt8=1;
             }
-            else if ( LA8_0==-1||LA8_0==EOL||LA8_0==15||LA8_0==17||(LA8_0>=20 && LA8_0<=22)||LA8_0==28||LA8_0==30 ) {
+            else if ( LA8_0==-1||LA8_0==EOL||LA8_0==15||LA8_0==17||(LA8_0>=20 && LA8_0<=22)||LA8_0==28||(LA8_0>=30 && LA8_0<=31) ) {
                 alt8=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("305:99: (star= \'.*\' )?", 8, 0, input);
+                    new NoViableAltException("306:99: (star= \'.*\' )?", 8, 0, input);
 
                 throw nvae;
             }
             switch (alt8) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:305:100: star= '.*'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:306:100: star= '.*'
                     {
                     star=(Token)input.LT(1);
-                    match(input,19,FOLLOW_19_in_import_name269); 
+                    match(input,19,FOLLOW_19_in_import_name279); 
                      name = name + star.getText(); 
 
                     }
@@ -738,7 +751,7 @@
 
 
     // $ANTLR start expander
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:307:1: expander : 'expander' (name= dotted_name )? ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:308:1: expander : 'expander' (name= dotted_name )? ( ';' )? opt_eol ;
     public void expander() throws RecognitionException {   
         String name = null;
 
@@ -747,30 +760,30 @@
         		String config=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:311:17: ( 'expander' (name= dotted_name )? ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:311:17: 'expander' (name= dotted_name )? ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:17: ( 'expander' (name= dotted_name )? ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:17: 'expander' (name= dotted_name )? ( ';' )? opt_eol
             {
-            match(input,20,FOLLOW_20_in_expander289); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:311:28: (name= dotted_name )?
+            match(input,20,FOLLOW_20_in_expander299); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:28: (name= dotted_name )?
             int alt9=2;
             int LA9_0 = input.LA(1);
             if ( LA9_0==ID ) {
                 alt9=1;
             }
-            else if ( LA9_0==-1||LA9_0==EOL||LA9_0==15||LA9_0==17||(LA9_0>=20 && LA9_0<=22)||LA9_0==28||LA9_0==30 ) {
+            else if ( LA9_0==-1||LA9_0==EOL||LA9_0==15||LA9_0==17||(LA9_0>=20 && LA9_0<=22)||LA9_0==28||(LA9_0>=30 && LA9_0<=31) ) {
                 alt9=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("311:28: (name= dotted_name )?", 9, 0, input);
+                    new NoViableAltException("312:28: (name= dotted_name )?", 9, 0, input);
 
                 throw nvae;
             }
             switch (alt9) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:311:29: name= dotted_name
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:29: name= dotted_name
                     {
-                    following.push(FOLLOW_dotted_name_in_expander294);
+                    following.push(FOLLOW_dotted_name_in_expander304);
                     name=dotted_name();
                     following.pop();
 
@@ -780,33 +793,33 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:311:48: ( ';' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:48: ( ';' )?
             int alt10=2;
             int LA10_0 = input.LA(1);
             if ( LA10_0==15 ) {
                 alt10=1;
             }
-            else if ( LA10_0==-1||LA10_0==EOL||LA10_0==17||(LA10_0>=20 && LA10_0<=22)||LA10_0==28||LA10_0==30 ) {
+            else if ( LA10_0==-1||LA10_0==EOL||LA10_0==17||(LA10_0>=20 && LA10_0<=22)||LA10_0==28||(LA10_0>=30 && LA10_0<=31) ) {
                 alt10=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("311:48: ( \';\' )?", 10, 0, input);
+                    new NoViableAltException("312:48: ( \';\' )?", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:311:48: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:48: ';'
                     {
-                    match(input,15,FOLLOW_15_in_expander298); 
+                    match(input,15,FOLLOW_15_in_expander308); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_expander301);
+            following.push(FOLLOW_opt_eol_in_expander311);
             opt_eol();
             following.pop();
 
@@ -833,7 +846,7 @@
 
 
     // $ANTLR start global
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:321:1: global : 'global' type= dotted_name id= ID ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:322:1: global : 'global' type= dotted_name id= ID ( ';' )? opt_eol ;
     public void global() throws RecognitionException {   
         Token id=null;
         String type = null;
@@ -842,43 +855,43 @@
 
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:325:17: ( 'global' type= dotted_name id= ID ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:325:17: 'global' type= dotted_name id= ID ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:326:17: ( 'global' type= dotted_name id= ID ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:326:17: 'global' type= dotted_name id= ID ( ';' )? opt_eol
             {
-            match(input,21,FOLLOW_21_in_global325); 
-            following.push(FOLLOW_dotted_name_in_global329);
+            match(input,21,FOLLOW_21_in_global335); 
+            following.push(FOLLOW_dotted_name_in_global339);
             type=dotted_name();
             following.pop();
 
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global333); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:325:49: ( ';' )?
+            match(input,ID,FOLLOW_ID_in_global343); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:326:49: ( ';' )?
             int alt11=2;
             int LA11_0 = input.LA(1);
             if ( LA11_0==15 ) {
                 alt11=1;
             }
-            else if ( LA11_0==-1||LA11_0==EOL||LA11_0==17||(LA11_0>=20 && LA11_0<=22)||LA11_0==28||LA11_0==30 ) {
+            else if ( LA11_0==-1||LA11_0==EOL||LA11_0==17||(LA11_0>=20 && LA11_0<=22)||LA11_0==28||(LA11_0>=30 && LA11_0<=31) ) {
                 alt11=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("325:49: ( \';\' )?", 11, 0, input);
+                    new NoViableAltException("326:49: ( \';\' )?", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:325:49: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:326:49: ';'
                     {
-                    match(input,15,FOLLOW_15_in_global335); 
+                    match(input,15,FOLLOW_15_in_global345); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_global338);
+            following.push(FOLLOW_opt_eol_in_global348);
             opt_eol();
             following.pop();
 
@@ -901,7 +914,7 @@
 
 
     // $ANTLR start function
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:331:1: function : 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:332:1: function : 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol ;
     public void function() throws RecognitionException {   
         Token name=null;
         String retType = null;
@@ -917,22 +930,22 @@
         		FunctionDescr f = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:336:17: ( 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:336:17: 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:337:17: ( 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:337:17: 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol
             {
-            match(input,22,FOLLOW_22_in_function362); 
-            following.push(FOLLOW_opt_eol_in_function364);
+            match(input,22,FOLLOW_22_in_function372); 
+            following.push(FOLLOW_opt_eol_in_function374);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:336:36: (retType= dotted_name )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:337:36: (retType= dotted_name )?
             int alt12=2;
             alt12 = dfa12.predict(input); 
             switch (alt12) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:336:37: retType= dotted_name
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:337:37: retType= dotted_name
                     {
-                    following.push(FOLLOW_dotted_name_in_function369);
+                    following.push(FOLLOW_dotted_name_in_function379);
                     retType=dotted_name();
                     following.pop();
 
@@ -942,13 +955,13 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_function373);
+            following.push(FOLLOW_opt_eol_in_function383);
             opt_eol();
             following.pop();
 
             name=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function377); 
-            following.push(FOLLOW_opt_eol_in_function379);
+            match(input,ID,FOLLOW_ID_in_function387); 
+            following.push(FOLLOW_opt_eol_in_function389);
             opt_eol();
             following.pop();
 
@@ -956,12 +969,12 @@
             			//System.err.println( "function :: " + name.getText() );
             			f = new FunctionDescr( name.getText(), retType );
             		
-            match(input,23,FOLLOW_23_in_function388); 
-            following.push(FOLLOW_opt_eol_in_function390);
+            match(input,23,FOLLOW_23_in_function398); 
+            following.push(FOLLOW_opt_eol_in_function400);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:342:25: ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:343:25: ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
             if ( (LA16_0>=EOL && LA16_0<=ID)||LA16_0==15 ) {
@@ -972,22 +985,22 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("342:25: ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( \',\' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )?", 16, 0, input);
+                    new NoViableAltException("343:25: ( (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( \',\' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )* )?", 16, 0, input);
 
                 throw nvae;
             }
             switch (alt16) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:342:33: (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:343:33: (paramType= dotted_name )? opt_eol paramName= argument opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )*
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:342:33: (paramType= dotted_name )?
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:343:33: (paramType= dotted_name )?
                     int alt13=2;
                     alt13 = dfa13.predict(input); 
                     switch (alt13) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:342:34: paramType= dotted_name
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:343:34: paramType= dotted_name
                             {
-                            following.push(FOLLOW_dotted_name_in_function400);
+                            following.push(FOLLOW_dotted_name_in_function410);
                             paramType=dotted_name();
                             following.pop();
 
@@ -997,22 +1010,22 @@
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_function404);
+                    following.push(FOLLOW_opt_eol_in_function414);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_argument_in_function408);
+                    following.push(FOLLOW_argument_in_function418);
                     paramName=argument();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_function410);
+                    following.push(FOLLOW_opt_eol_in_function420);
                     opt_eol();
                     following.pop();
 
 
                     					f.addParameter( paramType, paramName );
                     				
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:346:33: ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:347:33: ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol )*
                     loop15:
                     do {
                         int alt15=2;
@@ -1024,21 +1037,21 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:346:41: ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:347:41: ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument opt_eol
                     	    {
-                    	    match(input,24,FOLLOW_24_in_function424); 
-                    	    following.push(FOLLOW_opt_eol_in_function426);
+                    	    match(input,24,FOLLOW_24_in_function434); 
+                    	    following.push(FOLLOW_opt_eol_in_function436);
                     	    opt_eol();
                     	    following.pop();
 
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:346:53: (paramType= dotted_name )?
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:347:53: (paramType= dotted_name )?
                     	    int alt14=2;
                     	    alt14 = dfa14.predict(input); 
                     	    switch (alt14) {
                     	        case 1 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:346:54: paramType= dotted_name
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:347:54: paramType= dotted_name
                     	            {
-                    	            following.push(FOLLOW_dotted_name_in_function431);
+                    	            following.push(FOLLOW_dotted_name_in_function441);
                     	            paramType=dotted_name();
                     	            following.pop();
 
@@ -1048,15 +1061,15 @@
 
                     	    }
 
-                    	    following.push(FOLLOW_opt_eol_in_function435);
+                    	    following.push(FOLLOW_opt_eol_in_function445);
                     	    opt_eol();
                     	    following.pop();
 
-                    	    following.push(FOLLOW_argument_in_function439);
+                    	    following.push(FOLLOW_argument_in_function449);
                     	    paramName=argument();
                     	    following.pop();
 
-                    	    following.push(FOLLOW_opt_eol_in_function441);
+                    	    following.push(FOLLOW_opt_eol_in_function451);
                     	    opt_eol();
                     	    following.pop();
 
@@ -1078,24 +1091,24 @@
 
             }
 
-            match(input,25,FOLLOW_25_in_function466); 
-            following.push(FOLLOW_opt_eol_in_function470);
+            match(input,25,FOLLOW_25_in_function476); 
+            following.push(FOLLOW_opt_eol_in_function480);
             opt_eol();
             following.pop();
 
-            match(input,26,FOLLOW_26_in_function474); 
-            following.push(FOLLOW_curly_chunk_in_function481);
+            match(input,26,FOLLOW_26_in_function484); 
+            following.push(FOLLOW_curly_chunk_in_function491);
             body=curly_chunk();
             following.pop();
 
 
             				f.setText( body );
             			
-            match(input,27,FOLLOW_27_in_function490); 
+            match(input,27,FOLLOW_27_in_function500); 
 
             			packageDescr.addFunction( f );
             		
-            following.push(FOLLOW_opt_eol_in_function498);
+            following.push(FOLLOW_opt_eol_in_function508);
             opt_eol();
             following.pop();
 
@@ -1115,7 +1128,7 @@
 
 
     // $ANTLR start query
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:367:1: query returns [QueryDescr query] : opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:368:1: query returns [QueryDescr query] : opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol ;
     public QueryDescr query() throws RecognitionException {   
         QueryDescr query;
         Token loc=null;
@@ -1126,20 +1139,20 @@
         		query = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:372:17: ( opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:372:17: opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:373:17: ( opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:373:17: opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_query522);
+            following.push(FOLLOW_opt_eol_in_query532);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,28,FOLLOW_28_in_query528); 
-            following.push(FOLLOW_word_in_query532);
+            match(input,28,FOLLOW_28_in_query538); 
+            following.push(FOLLOW_word_in_query542);
             queryName=word();
             following.pop();
 
-            following.push(FOLLOW_opt_eol_in_query534);
+            following.push(FOLLOW_opt_eol_in_query544);
             opt_eol();
             following.pop();
 
@@ -1149,7 +1162,7 @@
             			AndDescr lhs = new AndDescr(); query.setLhs( lhs ); 
             			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
             int alt17=2;
             switch ( input.LA(1) ) {
             case 23:
@@ -1162,7 +1175,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 1, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 1, input);
 
                     throw nvae;
                 }
@@ -1177,7 +1190,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 2, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 2, input);
 
                     throw nvae;
                 }
@@ -1192,12 +1205,12 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 3, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 3, input);
 
                     throw nvae;
                 }
                 break;
-            case 49:
+            case 50:
                 int LA17_4 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1207,12 +1220,12 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 4, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 4, input);
 
                     throw nvae;
                 }
                 break;
-            case 50:
+            case 51:
                 int LA17_5 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1222,12 +1235,12 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 5, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 5, input);
 
                     throw nvae;
                 }
                 break;
-            case 51:
+            case 52:
                 int LA17_6 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1237,7 +1250,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 6, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 6, input);
 
                     throw nvae;
                 }
@@ -1252,7 +1265,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 7, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 7, input);
 
                     throw nvae;
                 }
@@ -1267,7 +1280,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 8, input);
+                        new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 8, input);
 
                     throw nvae;
                 }
@@ -1312,7 +1325,7 @@
             case 46:
             case 47:
             case 48:
-            case 52:
+            case 49:
             case 53:
             case 54:
             case 55:
@@ -1325,23 +1338,24 @@
             case 62:
             case 63:
             case 64:
+            case 65:
                 alt17=1;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("380:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 0, input);
+                    new NoViableAltException("381:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 17, 0, input);
 
                 throw nvae;
             }
 
             switch (alt17) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:381:25: {...}? expander_lhs_block[lhs]
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:382:25: {...}? expander_lhs_block[lhs]
                     {
                     if ( !( expander != null ) ) {
                         throw new FailedPredicateException(input, "query", " expander != null ");
                     }
-                    following.push(FOLLOW_expander_lhs_block_in_query550);
+                    following.push(FOLLOW_expander_lhs_block_in_query560);
                     expander_lhs_block(lhs);
                     following.pop();
 
@@ -1349,9 +1363,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:382:27: normal_lhs_block[lhs]
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:383:27: normal_lhs_block[lhs]
                     {
-                    following.push(FOLLOW_normal_lhs_block_in_query558);
+                    following.push(FOLLOW_normal_lhs_block_in_query568);
                     normal_lhs_block(lhs);
                     following.pop();
 
@@ -1361,8 +1375,8 @@
 
             }
 
-            match(input,29,FOLLOW_29_in_query573); 
-            following.push(FOLLOW_opt_eol_in_query575);
+            match(input,29,FOLLOW_29_in_query583); 
+            following.push(FOLLOW_opt_eol_in_query585);
             opt_eol();
             following.pop();
 
@@ -1381,8 +1395,141 @@
     // $ANTLR end query
 
 
+    // $ANTLR start template
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:389:1: template returns [FactTemplateDescr template] : opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL ;
+    public FactTemplateDescr template() throws RecognitionException {   
+        FactTemplateDescr template;
+        Token loc=null;
+        Token templateName=null;
+        FieldTemplateDescr slot = null;
+
+
+
+        		template = null;		
+        	
+        try {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:394:17: ( opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:394:17: opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL
+            {
+            following.push(FOLLOW_opt_eol_in_template609);
+            opt_eol();
+            following.pop();
+
+            loc=(Token)input.LT(1);
+            match(input,30,FOLLOW_30_in_template615); 
+            templateName=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_template619); 
+            match(input,EOL,FOLLOW_EOL_in_template621); 
+
+            			template = new FactTemplateDescr(templateName.getText());
+            			template.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );			
+            		
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:400:17: (slot= template_slot )+
+            int cnt18=0;
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+                if ( LA18_0==ID ) {
+                    alt18=1;
+                }
+
+
+                switch (alt18) {
+            	case 1 :
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:401:25: slot= template_slot
+            	    {
+            	    following.push(FOLLOW_template_slot_in_template636);
+            	    slot=template_slot();
+            	    following.pop();
+
+
+            	    				template.addFieldTemplate(slot);
+            	    			
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt18 >= 1 ) break loop18;
+                        EarlyExitException eee =
+                            new EarlyExitException(18, input);
+                        throw eee;
+                }
+                cnt18++;
+            } while (true);
+
+            match(input,29,FOLLOW_29_in_template651); 
+            match(input,EOL,FOLLOW_EOL_in_template653); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return template;
+    }
+    // $ANTLR end template
+
+
+    // $ANTLR start template_slot
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:409:1: template_slot returns [FieldTemplateDescr field] : fieldType= dotted_name name= ID (EOL|';');
+    public FieldTemplateDescr template_slot() throws RecognitionException {   
+        FieldTemplateDescr field;
+        Token name=null;
+        String fieldType = null;
+
+
+
+        		field = null;
+        	
+        try {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:415:18: (fieldType= dotted_name name= ID (EOL|';'))
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:415:18: fieldType= dotted_name name= ID (EOL|';')
+            {
+            following.push(FOLLOW_dotted_name_in_template_slot685);
+            fieldType=dotted_name();
+            following.pop();
+
+            name=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_template_slot689); 
+            if ( input.LA(1)==EOL||input.LA(1)==15 ) {
+                input.consume();
+                errorRecovery=false;
+            }
+            else {
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_template_slot693);    throw mse;
+            }
+
+
+            			
+            			
+            			field = new FieldTemplateDescr(name.getText(), fieldType);
+            			field.setLocation( offset(name.getLine()), name.getCharPositionInLine() );
+            		
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return field;
+    }
+    // $ANTLR end template_slot
+
+
     // $ANTLR start rule
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:388:1: rule returns [RuleDescr rule] : opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )? 'end' opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:424:1: rule returns [RuleDescr rule] : opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )? 'end' opt_eol ;
     public RuleDescr rule() throws RecognitionException {   
         RuleDescr rule;
         Token loc=null;
@@ -1395,20 +1542,20 @@
         		String consequence = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:394:17: ( opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )? 'end' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:394:17: opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )? 'end' opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:430:17: ( opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )? 'end' opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:430:17: opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )? 'end' opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_rule598);
+            following.push(FOLLOW_opt_eol_in_rule728);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,30,FOLLOW_30_in_rule604); 
-            following.push(FOLLOW_word_in_rule608);
+            match(input,31,FOLLOW_31_in_rule734); 
+            following.push(FOLLOW_word_in_rule738);
             ruleName=word();
             following.pop();
 
-            following.push(FOLLOW_opt_eol_in_rule610);
+            following.push(FOLLOW_opt_eol_in_rule740);
             opt_eol();
             following.pop();
 
@@ -1417,45 +1564,45 @@
             			rule = new RuleDescr( ruleName, null ); 
             			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:401:17: ( rule_attributes[rule] )?
-            int alt18=2;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:437:17: ( rule_attributes[rule] )?
+            int alt19=2;
             switch ( input.LA(1) ) {
-            case 32:
-            case 34:
-                alt18=1;
+            case 33:
+            case 35:
+                alt19=1;
                 break;
             case EOL:
             case 15:
             case 24:
-            case 35:
             case 36:
             case 37:
             case 38:
             case 39:
             case 40:
-                alt18=1;
+            case 41:
+                alt19=1;
                 break;
-            case 31:
-                alt18=1;
+            case 32:
+                alt19=1;
                 break;
-            case 33:
-                alt18=1;
+            case 34:
+                alt19=1;
                 break;
             case 29:
-                alt18=1;
+                alt19=1;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("401:17: ( rule_attributes[rule] )?", 18, 0, input);
+                    new NoViableAltException("437:17: ( rule_attributes[rule] )?", 19, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt18) {
+            switch (alt19) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:401:25: rule_attributes[rule]
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:437:25: rule_attributes[rule]
                     {
-                    following.push(FOLLOW_rule_attributes_in_rule621);
+                    following.push(FOLLOW_rule_attributes_in_rule751);
                     rule_attributes(rule);
                     following.pop();
 
@@ -1465,89 +1612,89 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_rule631);
+            following.push(FOLLOW_opt_eol_in_rule761);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:404:17: ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )?
-            int alt25=2;
-            int LA25_0 = input.LA(1);
-            if ( LA25_0==EOL||LA25_0==15||LA25_0==31||LA25_0==33 ) {
-                alt25=1;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:17: ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )? )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
+            if ( LA26_0==EOL||LA26_0==15||LA26_0==32||LA26_0==34 ) {
+                alt26=1;
             }
-            else if ( LA25_0==29 ) {
-                alt25=1;
+            else if ( LA26_0==29 ) {
+                alt26=1;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("404:17: ( (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . )* )? )?", 25, 0, input);
+                    new NoViableAltException("440:17: ( (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . )* )? )?", 26, 0, input);
 
                 throw nvae;
             }
-            switch (alt25) {
+            switch (alt26) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:404:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )?
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )?
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:404:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?
-                    int alt21=2;
-                    int LA21_0 = input.LA(1);
-                    if ( LA21_0==31 ) {
-                        alt21=1;
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?
+                    int alt22=2;
+                    int LA22_0 = input.LA(1);
+                    if ( LA22_0==32 ) {
+                        alt22=1;
                     }
-                    else if ( LA21_0==EOL||LA21_0==15||LA21_0==29||LA21_0==33 ) {
-                        alt21=2;
+                    else if ( LA22_0==EOL||LA22_0==15||LA22_0==29||LA22_0==34 ) {
+                        alt22=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("404:18: (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?", 21, 0, input);
+                            new NoViableAltException("440:18: (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?", 22, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt21) {
+                    switch (alt22) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:404:25: loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:25: loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
                             {
                             loc=(Token)input.LT(1);
-                            match(input,31,FOLLOW_31_in_rule640); 
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:404:36: ( ':' )?
-                            int alt19=2;
-                            int LA19_0 = input.LA(1);
-                            if ( LA19_0==32 ) {
-                                int LA19_1 = input.LA(2);
+                            match(input,32,FOLLOW_32_in_rule770); 
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:36: ( ':' )?
+                            int alt20=2;
+                            int LA20_0 = input.LA(1);
+                            if ( LA20_0==33 ) {
+                                int LA20_1 = input.LA(2);
                                 if ( !( expander != null ) ) {
-                                    alt19=1;
+                                    alt20=1;
                                 }
                                 else if (  expander != null  ) {
-                                    alt19=2;
+                                    alt20=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("404:36: ( \':\' )?", 19, 1, input);
+                                        new NoViableAltException("440:36: ( \':\' )?", 20, 1, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( (LA19_0>=EOL && LA19_0<=31)||(LA19_0>=33 && LA19_0<=64) ) {
-                                alt19=2;
+                            else if ( (LA20_0>=EOL && LA20_0<=32)||(LA20_0>=34 && LA20_0<=65) ) {
+                                alt20=2;
                             }
                             else {
                                 NoViableAltException nvae =
-                                    new NoViableAltException("404:36: ( \':\' )?", 19, 0, input);
+                                    new NoViableAltException("440:36: ( \':\' )?", 20, 0, input);
 
                                 throw nvae;
                             }
-                            switch (alt19) {
+                            switch (alt20) {
                                 case 1 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:404:36: ':'
+                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:36: ':'
                                     {
-                                    match(input,32,FOLLOW_32_in_rule642); 
+                                    match(input,33,FOLLOW_33_in_rule772); 
 
                                     }
                                     break;
 
                             }
 
-                            following.push(FOLLOW_opt_eol_in_rule645);
+                            following.push(FOLLOW_opt_eol_in_rule775);
                             opt_eol();
                             following.pop();
 
@@ -1555,140 +1702,140 @@
                             				AndDescr lhs = new AndDescr(); rule.setLhs( lhs ); 
                             				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                             			
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
-                            int alt20=2;
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
+                            int alt21=2;
                             switch ( input.LA(1) ) {
                             case 23:
-                                int LA20_1 = input.LA(2);
+                                int LA21_1 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 1, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 1, input);
 
                                     throw nvae;
                                 }
                                 break;
                             case EOL:
-                                int LA20_2 = input.LA(2);
+                                int LA21_2 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 2, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 2, input);
 
                                     throw nvae;
                                 }
                                 break;
                             case 15:
-                                int LA20_3 = input.LA(2);
+                                int LA21_3 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 3, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 3, input);
 
                                     throw nvae;
                                 }
                                 break;
-                            case 33:
-                                int LA20_4 = input.LA(2);
+                            case 34:
+                                int LA21_4 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 4, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 4, input);
 
                                     throw nvae;
                                 }
                                 break;
                             case 29:
-                                int LA20_5 = input.LA(2);
+                                int LA21_5 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 5, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 5, input);
 
                                     throw nvae;
                                 }
                                 break;
-                            case 49:
-                                int LA20_6 = input.LA(2);
+                            case 50:
+                                int LA21_6 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 6, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 6, input);
 
                                     throw nvae;
                                 }
                                 break;
-                            case 50:
-                                int LA20_7 = input.LA(2);
+                            case 51:
+                                int LA21_7 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 7, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 7, input);
 
                                     throw nvae;
                                 }
                                 break;
-                            case 51:
-                                int LA20_8 = input.LA(2);
+                            case 52:
+                                int LA21_8 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 8, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 8, input);
 
                                     throw nvae;
                                 }
                                 break;
                             case ID:
-                                int LA20_9 = input.LA(2);
+                                int LA21_9 = input.LA(2);
                                 if (  expander != null  ) {
-                                    alt20=1;
+                                    alt21=1;
                                 }
                                 else if ( true ) {
-                                    alt20=2;
+                                    alt21=2;
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 9, input);
+                                        new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 9, input);
 
                                     throw nvae;
                                 }
@@ -1717,7 +1864,7 @@
                             case 30:
                             case 31:
                             case 32:
-                            case 34:
+                            case 33:
                             case 35:
                             case 36:
                             case 37:
@@ -1732,7 +1879,7 @@
                             case 46:
                             case 47:
                             case 48:
-                            case 52:
+                            case 49:
                             case 53:
                             case 54:
                             case 55:
@@ -1745,23 +1892,24 @@
                             case 62:
                             case 63:
                             case 64:
-                                alt20=1;
+                            case 65:
+                                alt21=1;
                                 break;
                             default:
                                 NoViableAltException nvae =
-                                    new NoViableAltException("409:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 20, 0, input);
+                                    new NoViableAltException("445:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 21, 0, input);
 
                                 throw nvae;
                             }
 
-                            switch (alt20) {
+                            switch (alt21) {
                                 case 1 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:410:33: {...}? expander_lhs_block[lhs]
+                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:446:33: {...}? expander_lhs_block[lhs]
                                     {
                                     if ( !( expander != null ) ) {
                                         throw new FailedPredicateException(input, "rule", " expander != null ");
                                     }
-                                    following.push(FOLLOW_expander_lhs_block_in_rule663);
+                                    following.push(FOLLOW_expander_lhs_block_in_rule793);
                                     expander_lhs_block(lhs);
                                     following.pop();
 
@@ -1769,9 +1917,9 @@
                                     }
                                     break;
                                 case 2 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:411:35: normal_lhs_block[lhs]
+                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:35: normal_lhs_block[lhs]
                                     {
-                                    following.push(FOLLOW_normal_lhs_block_in_rule672);
+                                    following.push(FOLLOW_normal_lhs_block_in_rule802);
                                     normal_lhs_block(lhs);
                                     following.pop();
 
@@ -1787,77 +1935,77 @@
 
                     }
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:415:17: ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )?
-                    int alt24=2;
-                    int LA24_0 = input.LA(1);
-                    if ( LA24_0==EOL||LA24_0==15||LA24_0==33 ) {
-                        alt24=1;
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:451:17: ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )* )?
+                    int alt25=2;
+                    int LA25_0 = input.LA(1);
+                    if ( LA25_0==EOL||LA25_0==15||LA25_0==34 ) {
+                        alt25=1;
                     }
-                    else if ( LA24_0==29 ) {
-                        alt24=2;
+                    else if ( LA25_0==29 ) {
+                        alt25=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("415:17: ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . )* )?", 24, 0, input);
+                            new NoViableAltException("451:17: ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . )* )?", 25, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt24) {
+                    switch (alt25) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:415:19: opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )*
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:451:19: opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . )*
                             {
-                            following.push(FOLLOW_opt_eol_in_rule695);
+                            following.push(FOLLOW_opt_eol_in_rule825);
                             opt_eol();
                             following.pop();
 
                             loc=(Token)input.LT(1);
-                            match(input,33,FOLLOW_33_in_rule699); 
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:415:38: ( ':' )?
-                            int alt22=2;
-                            int LA22_0 = input.LA(1);
-                            if ( LA22_0==32 ) {
-                                alt22=1;
+                            match(input,34,FOLLOW_34_in_rule829); 
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:451:38: ( ':' )?
+                            int alt23=2;
+                            int LA23_0 = input.LA(1);
+                            if ( LA23_0==33 ) {
+                                alt23=1;
                             }
-                            else if ( (LA22_0>=EOL && LA22_0<=31)||(LA22_0>=33 && LA22_0<=64) ) {
-                                alt22=2;
+                            else if ( (LA23_0>=EOL && LA23_0<=32)||(LA23_0>=34 && LA23_0<=65) ) {
+                                alt23=2;
                             }
                             else {
                                 NoViableAltException nvae =
-                                    new NoViableAltException("415:38: ( \':\' )?", 22, 0, input);
+                                    new NoViableAltException("451:38: ( \':\' )?", 23, 0, input);
 
                                 throw nvae;
                             }
-                            switch (alt22) {
+                            switch (alt23) {
                                 case 1 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:415:38: ':'
+                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:451:38: ':'
                                     {
-                                    match(input,32,FOLLOW_32_in_rule701); 
+                                    match(input,33,FOLLOW_33_in_rule831); 
 
                                     }
                                     break;
 
                             }
 
-                            following.push(FOLLOW_opt_eol_in_rule705);
+                            following.push(FOLLOW_opt_eol_in_rule835);
                             opt_eol();
                             following.pop();
 
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:416:25: ( options {greedy=false; } : any= . )*
-                            loop23:
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:452:25: ( options {greedy=false; } : any= . )*
+                            loop24:
                             do {
-                                int alt23=2;
-                                int LA23_0 = input.LA(1);
-                                if ( LA23_0==29 ) {
-                                    alt23=2;
+                                int alt24=2;
+                                int LA24_0 = input.LA(1);
+                                if ( LA24_0==29 ) {
+                                    alt24=2;
                                 }
-                                else if ( (LA23_0>=EOL && LA23_0<=28)||(LA23_0>=30 && LA23_0<=64) ) {
-                                    alt23=1;
+                                else if ( (LA24_0>=EOL && LA24_0<=28)||(LA24_0>=30 && LA24_0<=65) ) {
+                                    alt24=1;
                                 }
 
 
-                                switch (alt23) {
+                                switch (alt24) {
                             	case 1 :
-                            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:416:52: any= .
+                            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:452:52: any= .
                             	    {
                             	    any=(Token)input.LT(1);
                             	    matchAny(input); 
@@ -1869,7 +2017,7 @@
                             	    break;
 
                             	default :
-                            	    break loop23;
+                            	    break loop24;
                                 }
                             } while (true);
 
@@ -1894,8 +2042,8 @@
 
             }
 
-            match(input,29,FOLLOW_29_in_rule751); 
-            following.push(FOLLOW_opt_eol_in_rule753);
+            match(input,29,FOLLOW_29_in_rule881); 
+            following.push(FOLLOW_opt_eol_in_rule883);
             opt_eol();
             following.pop();
 
@@ -1918,36 +2066,36 @@
 
 
     // $ANTLR start extra_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:437:1: extra_statement : ( import_statement | global | function ) ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:473:1: extra_statement : ( import_statement | global | function ) ;
     public void extra_statement() throws RecognitionException {   
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:439:9: ( ( import_statement | global | function ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:439:9: ( import_statement | global | function )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:475:9: ( ( import_statement | global | function ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:475:9: ( import_statement | global | function )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:439:9: ( import_statement | global | function )
-            int alt26=3;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:475:9: ( import_statement | global | function )
+            int alt27=3;
             switch ( input.LA(1) ) {
             case 17:
-                alt26=1;
+                alt27=1;
                 break;
             case 21:
-                alt26=2;
+                alt27=2;
                 break;
             case 22:
-                alt26=3;
+                alt27=3;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("439:9: ( import_statement | global | function )", 26, 0, input);
+                    new NoViableAltException("475:9: ( import_statement | global | function )", 27, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt26) {
+            switch (alt27) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:439:17: import_statement
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:475:17: import_statement
                     {
-                    following.push(FOLLOW_import_statement_in_extra_statement773);
+                    following.push(FOLLOW_import_statement_in_extra_statement903);
                     import_statement();
                     following.pop();
 
@@ -1955,9 +2103,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:17: global
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:476:17: global
                     {
-                    following.push(FOLLOW_global_in_extra_statement778);
+                    following.push(FOLLOW_global_in_extra_statement908);
                     global();
                     following.pop();
 
@@ -1965,9 +2113,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:441:17: function
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:477:17: function
                     {
-                    following.push(FOLLOW_function_in_extra_statement783);
+                    following.push(FOLLOW_function_in_extra_statement913);
                     function();
                     following.pop();
 
@@ -1993,116 +2141,116 @@
 
 
     // $ANTLR start rule_attributes
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:445:1: rule_attributes[RuleDescr rule] : ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:481:1: rule_attributes[RuleDescr rule] : ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* ;
     public void rule_attributes(RuleDescr rule) throws RecognitionException {   
         AttributeDescr a = null;
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:25: ( ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:25: ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:25: ( ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:25: ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:25: ( 'attributes' )?
-            int alt27=2;
-            int LA27_0 = input.LA(1);
-            if ( LA27_0==34 ) {
-                alt27=1;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:25: ( 'attributes' )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+            if ( LA28_0==35 ) {
+                alt28=1;
             }
-            else if ( LA27_0==EOL||LA27_0==15||LA27_0==24||LA27_0==29||(LA27_0>=31 && LA27_0<=33)||(LA27_0>=35 && LA27_0<=40) ) {
-                alt27=2;
+            else if ( LA28_0==EOL||LA28_0==15||LA28_0==24||LA28_0==29||(LA28_0>=32 && LA28_0<=34)||(LA28_0>=36 && LA28_0<=41) ) {
+                alt28=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("447:25: ( \'attributes\' )?", 27, 0, input);
+                    new NoViableAltException("483:25: ( \'attributes\' )?", 28, 0, input);
 
                 throw nvae;
             }
-            switch (alt27) {
+            switch (alt28) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:25: 'attributes'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:25: 'attributes'
                     {
-                    match(input,34,FOLLOW_34_in_rule_attributes802); 
+                    match(input,35,FOLLOW_35_in_rule_attributes932); 
 
                     }
                     break;
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:39: ( ':' )?
-            int alt28=2;
-            int LA28_0 = input.LA(1);
-            if ( LA28_0==32 ) {
-                alt28=1;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:39: ( ':' )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
+            if ( LA29_0==33 ) {
+                alt29=1;
             }
-            else if ( LA28_0==EOL||LA28_0==15||LA28_0==24||LA28_0==29||LA28_0==31||LA28_0==33||(LA28_0>=35 && LA28_0<=40) ) {
-                alt28=2;
+            else if ( LA29_0==EOL||LA29_0==15||LA29_0==24||LA29_0==29||LA29_0==32||LA29_0==34||(LA29_0>=36 && LA29_0<=41) ) {
+                alt29=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("447:39: ( \':\' )?", 28, 0, input);
+                    new NoViableAltException("483:39: ( \':\' )?", 29, 0, input);
 
                 throw nvae;
             }
-            switch (alt28) {
+            switch (alt29) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:39: ':'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:39: ':'
                     {
-                    match(input,32,FOLLOW_32_in_rule_attributes805); 
+                    match(input,33,FOLLOW_33_in_rule_attributes935); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_rule_attributes808);
+            following.push(FOLLOW_opt_eol_in_rule_attributes938);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:448:25: ( ( ',' )? a= rule_attribute opt_eol )*
-            loop30:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:484:25: ( ( ',' )? a= rule_attribute opt_eol )*
+            loop31:
             do {
-                int alt30=2;
-                int LA30_0 = input.LA(1);
-                if ( LA30_0==24||(LA30_0>=35 && LA30_0<=40) ) {
-                    alt30=1;
+                int alt31=2;
+                int LA31_0 = input.LA(1);
+                if ( LA31_0==24||(LA31_0>=36 && LA31_0<=41) ) {
+                    alt31=1;
                 }
 
 
-                switch (alt30) {
+                switch (alt31) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:448:33: ( ',' )? a= rule_attribute opt_eol
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:484:33: ( ',' )? a= rule_attribute opt_eol
             	    {
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:448:33: ( ',' )?
-            	    int alt29=2;
-            	    int LA29_0 = input.LA(1);
-            	    if ( LA29_0==24 ) {
-            	        alt29=1;
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:484:33: ( ',' )?
+            	    int alt30=2;
+            	    int LA30_0 = input.LA(1);
+            	    if ( LA30_0==24 ) {
+            	        alt30=1;
             	    }
-            	    else if ( (LA29_0>=35 && LA29_0<=40) ) {
-            	        alt29=2;
+            	    else if ( (LA30_0>=36 && LA30_0<=41) ) {
+            	        alt30=2;
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("448:33: ( \',\' )?", 29, 0, input);
+            	            new NoViableAltException("484:33: ( \',\' )?", 30, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt29) {
+            	    switch (alt30) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:448:33: ','
+            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:484:33: ','
             	            {
-            	            match(input,24,FOLLOW_24_in_rule_attributes815); 
+            	            match(input,24,FOLLOW_24_in_rule_attributes945); 
 
             	            }
             	            break;
 
             	    }
 
-            	    following.push(FOLLOW_rule_attribute_in_rule_attributes820);
+            	    following.push(FOLLOW_rule_attribute_in_rule_attributes950);
             	    a=rule_attribute();
             	    following.pop();
 
-            	    following.push(FOLLOW_opt_eol_in_rule_attributes822);
+            	    following.push(FOLLOW_opt_eol_in_rule_attributes952);
             	    opt_eol();
             	    following.pop();
 
@@ -2114,7 +2262,7 @@
             	    break;
 
             	default :
-            	    break loop30;
+            	    break loop31;
                 }
             } while (true);
 
@@ -2134,7 +2282,7 @@
 
 
     // $ANTLR start rule_attribute
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:455:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:491:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );
     public AttributeDescr rule_attribute() throws RecognitionException {   
         AttributeDescr d;
         AttributeDescr a = null;
@@ -2144,39 +2292,39 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:460:25: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus )
-            int alt31=6;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:496:25: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus )
+            int alt32=6;
             switch ( input.LA(1) ) {
-            case 35:
-                alt31=1;
-                break;
             case 36:
-                alt31=2;
+                alt32=1;
                 break;
-            case 39:
-                alt31=3;
+            case 37:
+                alt32=2;
                 break;
             case 40:
-                alt31=4;
+                alt32=3;
                 break;
+            case 41:
+                alt32=4;
+                break;
+            case 39:
+                alt32=5;
+                break;
             case 38:
-                alt31=5;
+                alt32=6;
                 break;
-            case 37:
-                alt31=6;
-                break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("455:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );", 31, 0, input);
+                    new NoViableAltException("491:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );", 32, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt31) {
+            switch (alt32) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:460:25: a= salience
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:496:25: a= salience
                     {
-                    following.push(FOLLOW_salience_in_rule_attribute861);
+                    following.push(FOLLOW_salience_in_rule_attribute991);
                     a=salience();
                     following.pop();
 
@@ -2185,9 +2333,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:461:25: a= no_loop
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:497:25: a= no_loop
                     {
-                    following.push(FOLLOW_no_loop_in_rule_attribute871);
+                    following.push(FOLLOW_no_loop_in_rule_attribute1001);
                     a=no_loop();
                     following.pop();
 
@@ -2196,9 +2344,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:462:25: a= agenda_group
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:498:25: a= agenda_group
                     {
-                    following.push(FOLLOW_agenda_group_in_rule_attribute882);
+                    following.push(FOLLOW_agenda_group_in_rule_attribute1012);
                     a=agenda_group();
                     following.pop();
 
@@ -2207,9 +2355,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:463:25: a= duration
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:499:25: a= duration
                     {
-                    following.push(FOLLOW_duration_in_rule_attribute895);
+                    following.push(FOLLOW_duration_in_rule_attribute1025);
                     a=duration();
                     following.pop();
 
@@ -2218,9 +2366,9 @@
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:464:25: a= activation_group
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:500:25: a= activation_group
                     {
-                    following.push(FOLLOW_activation_group_in_rule_attribute909);
+                    following.push(FOLLOW_activation_group_in_rule_attribute1039);
                     a=activation_group();
                     following.pop();
 
@@ -2229,9 +2377,9 @@
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:465:25: a= auto_focus
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:501:25: a= auto_focus
                     {
-                    following.push(FOLLOW_auto_focus_in_rule_attribute920);
+                    following.push(FOLLOW_auto_focus_in_rule_attribute1050);
                     a=auto_focus();
                     following.pop();
 
@@ -2254,7 +2402,7 @@
 
 
     // $ANTLR start salience
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:469:1: salience returns [AttributeDescr d ] : loc= 'salience' opt_eol i= INT ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:505:1: salience returns [AttributeDescr d ] : loc= 'salience' opt_eol i= INT ( ';' )? opt_eol ;
     public AttributeDescr salience() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
@@ -2264,44 +2412,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:474:17: (loc= 'salience' opt_eol i= INT ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:474:17: loc= 'salience' opt_eol i= INT ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:510:17: (loc= 'salience' opt_eol i= INT ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:510:17: loc= 'salience' opt_eol i= INT ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,35,FOLLOW_35_in_salience953); 
-            following.push(FOLLOW_opt_eol_in_salience955);
+            match(input,36,FOLLOW_36_in_salience1083); 
+            following.push(FOLLOW_opt_eol_in_salience1085);
             opt_eol();
             following.pop();
 
             i=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_salience959); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:474:46: ( ';' )?
-            int alt32=2;
-            int LA32_0 = input.LA(1);
-            if ( LA32_0==15 ) {
-                alt32=1;
+            match(input,INT,FOLLOW_INT_in_salience1089); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:510:46: ( ';' )?
+            int alt33=2;
+            int LA33_0 = input.LA(1);
+            if ( LA33_0==15 ) {
+                alt33=1;
             }
-            else if ( LA32_0==EOL||LA32_0==24||LA32_0==29||LA32_0==31||LA32_0==33||(LA32_0>=35 && LA32_0<=40) ) {
-                alt32=2;
+            else if ( LA33_0==EOL||LA33_0==24||LA33_0==29||LA33_0==32||LA33_0==34||(LA33_0>=36 && LA33_0<=41) ) {
+                alt33=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("474:46: ( \';\' )?", 32, 0, input);
+                    new NoViableAltException("510:46: ( \';\' )?", 33, 0, input);
 
                 throw nvae;
             }
-            switch (alt32) {
+            switch (alt33) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:474:46: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:510:46: ';'
                     {
-                    match(input,15,FOLLOW_15_in_salience961); 
+                    match(input,15,FOLLOW_15_in_salience1091); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_salience964);
+            following.push(FOLLOW_opt_eol_in_salience1094);
             opt_eol();
             following.pop();
 
@@ -2325,7 +2473,7 @@
 
 
     // $ANTLR start no_loop
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:481:1: no_loop returns [AttributeDescr d] : ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:517:1: no_loop returns [AttributeDescr d] : ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) );
     public AttributeDescr no_loop() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
@@ -2335,70 +2483,70 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:17: ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) )
-            int alt35=2;
-            int LA35_0 = input.LA(1);
-            if ( LA35_0==36 ) {
-                int LA35_1 = input.LA(2);
-                if ( LA35_1==BOOL ) {
-                    alt35=2;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:522:17: ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) )
+            int alt36=2;
+            int LA36_0 = input.LA(1);
+            if ( LA36_0==37 ) {
+                int LA36_1 = input.LA(2);
+                if ( LA36_1==BOOL ) {
+                    alt36=2;
                 }
-                else if ( LA35_1==EOL||LA35_1==15||LA35_1==24||LA35_1==29||LA35_1==31||LA35_1==33||(LA35_1>=35 && LA35_1<=40) ) {
-                    alt35=1;
+                else if ( LA36_1==EOL||LA36_1==15||LA36_1==24||LA36_1==29||LA36_1==32||LA36_1==34||(LA36_1>=36 && LA36_1<=41) ) {
+                    alt36=1;
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("481:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 35, 1, input);
+                        new NoViableAltException("517:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 36, 1, input);
 
                     throw nvae;
                 }
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("481:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 35, 0, input);
+                    new NoViableAltException("517:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 36, 0, input);
 
                 throw nvae;
             }
-            switch (alt35) {
+            switch (alt36) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:522:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:487:25: loc= 'no-loop' opt_eol ( ';' )? opt_eol
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:522:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:523:25: loc= 'no-loop' opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,36,FOLLOW_36_in_no_loop999); 
-                    following.push(FOLLOW_opt_eol_in_no_loop1001);
+                    match(input,37,FOLLOW_37_in_no_loop1129); 
+                    following.push(FOLLOW_opt_eol_in_no_loop1131);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:487:47: ( ';' )?
-                    int alt33=2;
-                    int LA33_0 = input.LA(1);
-                    if ( LA33_0==15 ) {
-                        alt33=1;
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:523:47: ( ';' )?
+                    int alt34=2;
+                    int LA34_0 = input.LA(1);
+                    if ( LA34_0==15 ) {
+                        alt34=1;
                     }
-                    else if ( LA33_0==EOL||LA33_0==24||LA33_0==29||LA33_0==31||LA33_0==33||(LA33_0>=35 && LA33_0<=40) ) {
-                        alt33=2;
+                    else if ( LA34_0==EOL||LA34_0==24||LA34_0==29||LA34_0==32||LA34_0==34||(LA34_0>=36 && LA34_0<=41) ) {
+                        alt34=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("487:47: ( \';\' )?", 33, 0, input);
+                            new NoViableAltException("523:47: ( \';\' )?", 34, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt33) {
+                    switch (alt34) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:487:47: ';'
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:523:47: ';'
                             {
-                            match(input,15,FOLLOW_15_in_no_loop1003); 
+                            match(input,15,FOLLOW_15_in_no_loop1133); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_no_loop1006);
+                    following.push(FOLLOW_opt_eol_in_no_loop1136);
                     opt_eol();
                     following.pop();
 
@@ -2413,46 +2561,46 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:494:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:530:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:494:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:495:25: loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:530:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:531:25: loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,36,FOLLOW_36_in_no_loop1031); 
+                    match(input,37,FOLLOW_37_in_no_loop1161); 
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1035); 
-                    following.push(FOLLOW_opt_eol_in_no_loop1037);
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1165); 
+                    following.push(FOLLOW_opt_eol_in_no_loop1167);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:495:54: ( ';' )?
-                    int alt34=2;
-                    int LA34_0 = input.LA(1);
-                    if ( LA34_0==15 ) {
-                        alt34=1;
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:531:54: ( ';' )?
+                    int alt35=2;
+                    int LA35_0 = input.LA(1);
+                    if ( LA35_0==15 ) {
+                        alt35=1;
                     }
-                    else if ( LA34_0==EOL||LA34_0==24||LA34_0==29||LA34_0==31||LA34_0==33||(LA34_0>=35 && LA34_0<=40) ) {
-                        alt34=2;
+                    else if ( LA35_0==EOL||LA35_0==24||LA35_0==29||LA35_0==32||LA35_0==34||(LA35_0>=36 && LA35_0<=41) ) {
+                        alt35=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("495:54: ( \';\' )?", 34, 0, input);
+                            new NoViableAltException("531:54: ( \';\' )?", 35, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt34) {
+                    switch (alt35) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:495:54: ';'
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:531:54: ';'
                             {
-                            match(input,15,FOLLOW_15_in_no_loop1039); 
+                            match(input,15,FOLLOW_15_in_no_loop1169); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_no_loop1042);
+                    following.push(FOLLOW_opt_eol_in_no_loop1172);
                     opt_eol();
                     following.pop();
 
@@ -2481,7 +2629,7 @@
 
 
     // $ANTLR start auto_focus
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:505:1: auto_focus returns [AttributeDescr d] : ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:541:1: auto_focus returns [AttributeDescr d] : ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) );
     public AttributeDescr auto_focus() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
@@ -2491,70 +2639,70 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:510:17: ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) )
-            int alt38=2;
-            int LA38_0 = input.LA(1);
-            if ( LA38_0==37 ) {
-                int LA38_1 = input.LA(2);
-                if ( LA38_1==BOOL ) {
-                    alt38=2;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:546:17: ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) )
+            int alt39=2;
+            int LA39_0 = input.LA(1);
+            if ( LA39_0==38 ) {
+                int LA39_1 = input.LA(2);
+                if ( LA39_1==BOOL ) {
+                    alt39=2;
                 }
-                else if ( LA38_1==EOL||LA38_1==15||LA38_1==24||LA38_1==29||LA38_1==31||LA38_1==33||(LA38_1>=35 && LA38_1<=40) ) {
-                    alt38=1;
+                else if ( LA39_1==EOL||LA39_1==15||LA39_1==24||LA39_1==29||LA39_1==32||LA39_1==34||(LA39_1>=36 && LA39_1<=41) ) {
+                    alt39=1;
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("505:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 38, 1, input);
+                        new NoViableAltException("541:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 39, 1, input);
 
                     throw nvae;
                 }
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("505:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 38, 0, input);
+                    new NoViableAltException("541:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 39, 0, input);
 
                 throw nvae;
             }
-            switch (alt38) {
+            switch (alt39) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:510:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:546:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:510:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:511:25: loc= 'auto-focus' opt_eol ( ';' )? opt_eol
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:546:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:547:25: loc= 'auto-focus' opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,37,FOLLOW_37_in_auto_focus1088); 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1090);
+                    match(input,38,FOLLOW_38_in_auto_focus1218); 
+                    following.push(FOLLOW_opt_eol_in_auto_focus1220);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:511:50: ( ';' )?
-                    int alt36=2;
-                    int LA36_0 = input.LA(1);
-                    if ( LA36_0==15 ) {
-                        alt36=1;
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:547:50: ( ';' )?
+                    int alt37=2;
+                    int LA37_0 = input.LA(1);
+                    if ( LA37_0==15 ) {
+                        alt37=1;
                     }
-                    else if ( LA36_0==EOL||LA36_0==24||LA36_0==29||LA36_0==31||LA36_0==33||(LA36_0>=35 && LA36_0<=40) ) {
-                        alt36=2;
+                    else if ( LA37_0==EOL||LA37_0==24||LA37_0==29||LA37_0==32||LA37_0==34||(LA37_0>=36 && LA37_0<=41) ) {
+                        alt37=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("511:50: ( \';\' )?", 36, 0, input);
+                            new NoViableAltException("547:50: ( \';\' )?", 37, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt36) {
+                    switch (alt37) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:511:50: ';'
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:547:50: ';'
                             {
-                            match(input,15,FOLLOW_15_in_auto_focus1092); 
+                            match(input,15,FOLLOW_15_in_auto_focus1222); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1095);
+                    following.push(FOLLOW_opt_eol_in_auto_focus1225);
                     opt_eol();
                     following.pop();
 
@@ -2569,46 +2717,46 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:518:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:554:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:518:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:519:25: loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:554:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:555:25: loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,37,FOLLOW_37_in_auto_focus1120); 
+                    match(input,38,FOLLOW_38_in_auto_focus1250); 
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1124); 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1126);
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1254); 
+                    following.push(FOLLOW_opt_eol_in_auto_focus1256);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:519:57: ( ';' )?
-                    int alt37=2;
-                    int LA37_0 = input.LA(1);
-                    if ( LA37_0==15 ) {
-                        alt37=1;
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:555:57: ( ';' )?
+                    int alt38=2;
+                    int LA38_0 = input.LA(1);
+                    if ( LA38_0==15 ) {
+                        alt38=1;
                     }
-                    else if ( LA37_0==EOL||LA37_0==24||LA37_0==29||LA37_0==31||LA37_0==33||(LA37_0>=35 && LA37_0<=40) ) {
-                        alt37=2;
+                    else if ( LA38_0==EOL||LA38_0==24||LA38_0==29||LA38_0==32||LA38_0==34||(LA38_0>=36 && LA38_0<=41) ) {
+                        alt38=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("519:57: ( \';\' )?", 37, 0, input);
+                            new NoViableAltException("555:57: ( \';\' )?", 38, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt37) {
+                    switch (alt38) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:519:57: ';'
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:555:57: ';'
                             {
-                            match(input,15,FOLLOW_15_in_auto_focus1128); 
+                            match(input,15,FOLLOW_15_in_auto_focus1258); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1131);
+                    following.push(FOLLOW_opt_eol_in_auto_focus1261);
                     opt_eol();
                     following.pop();
 
@@ -2637,7 +2785,7 @@
 
 
     // $ANTLR start activation_group
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:529:1: activation_group returns [AttributeDescr d] : loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:565:1: activation_group returns [AttributeDescr d] : loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol ;
     public AttributeDescr activation_group() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
@@ -2647,44 +2795,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:534:17: (loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:534:17: loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:570:17: (loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:570:17: loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,38,FOLLOW_38_in_activation_group1173); 
-            following.push(FOLLOW_opt_eol_in_activation_group1175);
+            match(input,39,FOLLOW_39_in_activation_group1303); 
+            following.push(FOLLOW_opt_eol_in_activation_group1305);
             opt_eol();
             following.pop();
 
             name=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1179); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:534:60: ( ';' )?
-            int alt39=2;
-            int LA39_0 = input.LA(1);
-            if ( LA39_0==15 ) {
-                alt39=1;
+            match(input,STRING,FOLLOW_STRING_in_activation_group1309); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:570:60: ( ';' )?
+            int alt40=2;
+            int LA40_0 = input.LA(1);
+            if ( LA40_0==15 ) {
+                alt40=1;
             }
-            else if ( LA39_0==EOL||LA39_0==24||LA39_0==29||LA39_0==31||LA39_0==33||(LA39_0>=35 && LA39_0<=40) ) {
-                alt39=2;
+            else if ( LA40_0==EOL||LA40_0==24||LA40_0==29||LA40_0==32||LA40_0==34||(LA40_0>=36 && LA40_0<=41) ) {
+                alt40=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("534:60: ( \';\' )?", 39, 0, input);
+                    new NoViableAltException("570:60: ( \';\' )?", 40, 0, input);
 
                 throw nvae;
             }
-            switch (alt39) {
+            switch (alt40) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:534:60: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:570:60: ';'
                     {
-                    match(input,15,FOLLOW_15_in_activation_group1181); 
+                    match(input,15,FOLLOW_15_in_activation_group1311); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_activation_group1184);
+            following.push(FOLLOW_opt_eol_in_activation_group1314);
             opt_eol();
             following.pop();
 
@@ -2708,7 +2856,7 @@
 
 
     // $ANTLR start agenda_group
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:541:1: agenda_group returns [AttributeDescr d] : loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:577:1: agenda_group returns [AttributeDescr d] : loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol ;
     public AttributeDescr agenda_group() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
@@ -2718,44 +2866,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:546:17: (loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:546:17: loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:582:17: (loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:582:17: loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,39,FOLLOW_39_in_agenda_group1213); 
-            following.push(FOLLOW_opt_eol_in_agenda_group1215);
+            match(input,40,FOLLOW_40_in_agenda_group1343); 
+            following.push(FOLLOW_opt_eol_in_agenda_group1345);
             opt_eol();
             following.pop();
 
             name=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1219); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:546:56: ( ';' )?
-            int alt40=2;
-            int LA40_0 = input.LA(1);
-            if ( LA40_0==15 ) {
-                alt40=1;
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1349); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:582:56: ( ';' )?
+            int alt41=2;
+            int LA41_0 = input.LA(1);
+            if ( LA41_0==15 ) {
+                alt41=1;
             }
-            else if ( LA40_0==EOL||LA40_0==24||LA40_0==29||LA40_0==31||LA40_0==33||(LA40_0>=35 && LA40_0<=40) ) {
-                alt40=2;
+            else if ( LA41_0==EOL||LA41_0==24||LA41_0==29||LA41_0==32||LA41_0==34||(LA41_0>=36 && LA41_0<=41) ) {
+                alt41=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("546:56: ( \';\' )?", 40, 0, input);
+                    new NoViableAltException("582:56: ( \';\' )?", 41, 0, input);
 
                 throw nvae;
             }
-            switch (alt40) {
+            switch (alt41) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:546:56: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:582:56: ';'
                     {
-                    match(input,15,FOLLOW_15_in_agenda_group1221); 
+                    match(input,15,FOLLOW_15_in_agenda_group1351); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_agenda_group1224);
+            following.push(FOLLOW_opt_eol_in_agenda_group1354);
             opt_eol();
             following.pop();
 
@@ -2779,7 +2927,7 @@
 
 
     // $ANTLR start duration
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:554:1: duration returns [AttributeDescr d] : loc= 'duration' opt_eol i= INT ( ';' )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:590:1: duration returns [AttributeDescr d] : loc= 'duration' opt_eol i= INT ( ';' )? opt_eol ;
     public AttributeDescr duration() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
@@ -2789,44 +2937,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:559:17: (loc= 'duration' opt_eol i= INT ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:559:17: loc= 'duration' opt_eol i= INT ( ';' )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:595:17: (loc= 'duration' opt_eol i= INT ( ';' )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:595:17: loc= 'duration' opt_eol i= INT ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,40,FOLLOW_40_in_duration1256); 
-            following.push(FOLLOW_opt_eol_in_duration1258);
+            match(input,41,FOLLOW_41_in_duration1386); 
+            following.push(FOLLOW_opt_eol_in_duration1388);
             opt_eol();
             following.pop();
 
             i=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1262); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:559:46: ( ';' )?
-            int alt41=2;
-            int LA41_0 = input.LA(1);
-            if ( LA41_0==15 ) {
-                alt41=1;
+            match(input,INT,FOLLOW_INT_in_duration1392); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:595:46: ( ';' )?
+            int alt42=2;
+            int LA42_0 = input.LA(1);
+            if ( LA42_0==15 ) {
+                alt42=1;
             }
-            else if ( LA41_0==EOL||LA41_0==24||LA41_0==29||LA41_0==31||LA41_0==33||(LA41_0>=35 && LA41_0<=40) ) {
-                alt41=2;
+            else if ( LA42_0==EOL||LA42_0==24||LA42_0==29||LA42_0==32||LA42_0==34||(LA42_0>=36 && LA42_0<=41) ) {
+                alt42=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("559:46: ( \';\' )?", 41, 0, input);
+                    new NoViableAltException("595:46: ( \';\' )?", 42, 0, input);
 
                 throw nvae;
             }
-            switch (alt41) {
+            switch (alt42) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:559:46: ';'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:595:46: ';'
                     {
-                    match(input,15,FOLLOW_15_in_duration1264); 
+                    match(input,15,FOLLOW_15_in_duration1394); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_duration1267);
+            following.push(FOLLOW_opt_eol_in_duration1397);
             opt_eol();
             following.pop();
 
@@ -2850,34 +2998,34 @@
 
 
     // $ANTLR start normal_lhs_block
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:567:1: normal_lhs_block[AndDescr descrs] : (d= lhs opt_eol )* opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:603:1: normal_lhs_block[AndDescr descrs] : (d= lhs opt_eol )* opt_eol ;
     public void normal_lhs_block(AndDescr descrs) throws RecognitionException {   
         PatternDescr d = null;
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:569:17: ( (d= lhs opt_eol )* opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:569:17: (d= lhs opt_eol )* opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:605:17: ( (d= lhs opt_eol )* opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:605:17: (d= lhs opt_eol )* opt_eol
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:569:17: (d= lhs opt_eol )*
-            loop42:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:605:17: (d= lhs opt_eol )*
+            loop43:
             do {
-                int alt42=2;
-                int LA42_0 = input.LA(1);
-                if ( LA42_0==ID||LA42_0==23||(LA42_0>=49 && LA42_0<=51) ) {
-                    alt42=1;
+                int alt43=2;
+                int LA43_0 = input.LA(1);
+                if ( LA43_0==ID||LA43_0==23||(LA43_0>=50 && LA43_0<=52) ) {
+                    alt43=1;
                 }
 
 
-                switch (alt42) {
+                switch (alt43) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:569:25: d= lhs opt_eol
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:605:25: d= lhs opt_eol
             	    {
-            	    following.push(FOLLOW_lhs_in_normal_lhs_block1293);
+            	    following.push(FOLLOW_lhs_in_normal_lhs_block1423);
             	    d=lhs();
             	    following.pop();
 
-            	    following.push(FOLLOW_opt_eol_in_normal_lhs_block1295);
+            	    following.push(FOLLOW_opt_eol_in_normal_lhs_block1425);
             	    opt_eol();
             	    following.pop();
 
@@ -2887,11 +3035,11 @@
             	    break;
 
             	default :
-            	    break loop42;
+            	    break loop43;
                 }
             } while (true);
 
-            following.push(FOLLOW_opt_eol_in_normal_lhs_block1307);
+            following.push(FOLLOW_opt_eol_in_normal_lhs_block1437);
             opt_eol();
             following.pop();
 
@@ -2911,7 +3059,7 @@
 
 
     // $ANTLR start expander_lhs_block
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:577:1: expander_lhs_block[AndDescr descrs] : ( options {greedy=false; } : text= paren_chunk loc= EOL )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:613:1: expander_lhs_block[AndDescr descrs] : ( options {greedy=false; } : text= paren_chunk loc= EOL )* ;
     public void expander_lhs_block(AndDescr descrs) throws RecognitionException {   
         Token loc=null;
         String text = null;
@@ -2922,22 +3070,22 @@
         		String eol = System.getProperty( "line.separator" );
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:583:17: ( ( options {greedy=false; } : text= paren_chunk loc= EOL )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:583:17: ( options {greedy=false; } : text= paren_chunk loc= EOL )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:619:17: ( ( options {greedy=false; } : text= paren_chunk loc= EOL )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:619:17: ( options {greedy=false; } : text= paren_chunk loc= EOL )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:583:17: ( options {greedy=false; } : text= paren_chunk loc= EOL )*
-            loop43:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:619:17: ( options {greedy=false; } : text= paren_chunk loc= EOL )*
+            loop44:
             do {
-                int alt43=2;
+                int alt44=2;
                 switch ( input.LA(1) ) {
                 case 29:
-                    alt43=2;
+                    alt44=2;
                     break;
                 case EOL:
-                    alt43=2;
+                    alt44=2;
                     break;
-                case 33:
-                    alt43=2;
+                case 34:
+                    alt44=2;
                     break;
                 case ID:
                 case INT:
@@ -2965,7 +3113,7 @@
                 case 30:
                 case 31:
                 case 32:
-                case 34:
+                case 33:
                 case 35:
                 case 36:
                 case 37:
@@ -2996,24 +3144,25 @@
                 case 62:
                 case 63:
                 case 64:
-                    alt43=1;
+                case 65:
+                    alt44=1;
                     break;
                 case 15:
-                    alt43=2;
+                    alt44=2;
                     break;
 
                 }
 
-                switch (alt43) {
+                switch (alt44) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:584:25: text= paren_chunk loc= EOL
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:620:25: text= paren_chunk loc= EOL
             	    {
-            	    following.push(FOLLOW_paren_chunk_in_expander_lhs_block1348);
+            	    following.push(FOLLOW_paren_chunk_in_expander_lhs_block1478);
             	    text=paren_chunk();
             	    following.pop();
 
             	    loc=(Token)input.LT(1);
-            	    match(input,EOL,FOLLOW_EOL_in_expander_lhs_block1352); 
+            	    match(input,EOL,FOLLOW_EOL_in_expander_lhs_block1482); 
 
             	    				//only expand non null
             	    				if (text != null) {
@@ -3030,7 +3179,7 @@
             	    break;
 
             	default :
-            	    break loop43;
+            	    break loop44;
                 }
             } while (true);
 
@@ -3055,7 +3204,7 @@
 
 
     // $ANTLR start lhs
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:609:1: lhs returns [PatternDescr d] : l= lhs_or ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:645:1: lhs returns [PatternDescr d] : l= lhs_or ;
     public PatternDescr lhs() throws RecognitionException {   
         PatternDescr d;
         PatternDescr l = null;
@@ -3065,10 +3214,10 @@
         		d=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:613:17: (l= lhs_or )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:613:17: l= lhs_or
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:649:17: (l= lhs_or )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:649:17: l= lhs_or
             {
-            following.push(FOLLOW_lhs_or_in_lhs1404);
+            following.push(FOLLOW_lhs_or_in_lhs1534);
             l=lhs_or();
             following.pop();
 
@@ -3089,7 +3238,7 @@
 
 
     // $ANTLR start lhs_column
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:617:1: lhs_column returns [PatternDescr d] : (f= fact_binding | f= fact );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:653:1: lhs_column returns [PatternDescr d] : (f= fact_binding | f= fact );
     public PatternDescr lhs_column() throws RecognitionException {   
         PatternDescr d;
         PatternDescr f = null;
@@ -3099,14 +3248,14 @@
         		d=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:621:17: (f= fact_binding | f= fact )
-            int alt44=2;
-            alt44 = dfa44.predict(input); 
-            switch (alt44) {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:657:17: (f= fact_binding | f= fact )
+            int alt45=2;
+            alt45 = dfa45.predict(input); 
+            switch (alt45) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:621:17: f= fact_binding
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:657:17: f= fact_binding
                     {
-                    following.push(FOLLOW_fact_binding_in_lhs_column1432);
+                    following.push(FOLLOW_fact_binding_in_lhs_column1562);
                     f=fact_binding();
                     following.pop();
 
@@ -3115,9 +3264,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:622:17: f= fact
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:658:17: f= fact
                     {
-                    following.push(FOLLOW_fact_in_lhs_column1441);
+                    following.push(FOLLOW_fact_in_lhs_column1571);
                     f=fact();
                     following.pop();
 
@@ -3140,7 +3289,7 @@
 
 
     // $ANTLR start fact_binding
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:625:1: fact_binding returns [PatternDescr d] : id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:661:1: fact_binding returns [PatternDescr d] : id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] ;
     public PatternDescr fact_binding() throws RecognitionException {   
         PatternDescr d;
         Token id=null;
@@ -3152,21 +3301,21 @@
         		boolean multi=false;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:631:17: (id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:631:17: id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()]
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:667:17: (id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:667:17: id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()]
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_fact_binding1473); 
-            following.push(FOLLOW_opt_eol_in_fact_binding1483);
+            match(input,ID,FOLLOW_ID_in_fact_binding1603); 
+            following.push(FOLLOW_opt_eol_in_fact_binding1613);
             opt_eol();
             following.pop();
 
-            match(input,32,FOLLOW_32_in_fact_binding1485); 
-            following.push(FOLLOW_opt_eol_in_fact_binding1487);
+            match(input,33,FOLLOW_33_in_fact_binding1615); 
+            following.push(FOLLOW_opt_eol_in_fact_binding1617);
             opt_eol();
             following.pop();
 
-            following.push(FOLLOW_fact_expression_in_fact_binding1491);
+            following.push(FOLLOW_fact_expression_in_fact_binding1621);
             fe=fact_expression(id.getText());
             following.pop();
 
@@ -3189,7 +3338,7 @@
 
 
     // $ANTLR start fact_expression
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:639:2: fact_expression[String id] returns [PatternDescr pd] : ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:675:2: fact_expression[String id] returns [PatternDescr pd] : ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* );
     public PatternDescr fact_expression(String id) throws RecognitionException {   
         PatternDescr pd;
         PatternDescr fe = null;
@@ -3202,51 +3351,51 @@
          		boolean multi = false;
          	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:644:17: ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* )
-            int alt46=2;
-            int LA46_0 = input.LA(1);
-            if ( LA46_0==23 ) {
-                alt46=1;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:680:17: ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* )
+            int alt47=2;
+            int LA47_0 = input.LA(1);
+            if ( LA47_0==23 ) {
+                alt47=1;
             }
-            else if ( LA46_0==ID ) {
-                alt46=2;
+            else if ( LA47_0==ID ) {
+                alt47=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("639:2: fact_expression[String id] returns [PatternDescr pd] : ( \'(\' opt_eol fe= fact_expression[id] opt_eol \')\' | f= fact opt_eol ( (\'or\'|\'||\') opt_eol f= fact )* );", 46, 0, input);
+                    new NoViableAltException("675:2: fact_expression[String id] returns [PatternDescr pd] : ( \'(\' opt_eol fe= fact_expression[id] opt_eol \')\' | f= fact opt_eol ( (\'or\'|\'||\') opt_eol f= fact )* );", 47, 0, input);
 
                 throw nvae;
             }
-            switch (alt46) {
+            switch (alt47) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:644:17: '(' opt_eol fe= fact_expression[id] opt_eol ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:680:17: '(' opt_eol fe= fact_expression[id] opt_eol ')'
                     {
-                    match(input,23,FOLLOW_23_in_fact_expression1523); 
-                    following.push(FOLLOW_opt_eol_in_fact_expression1525);
+                    match(input,23,FOLLOW_23_in_fact_expression1653); 
+                    following.push(FOLLOW_opt_eol_in_fact_expression1655);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_fact_expression_in_fact_expression1529);
+                    following.push(FOLLOW_fact_expression_in_fact_expression1659);
                     fe=fact_expression(id);
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_fact_expression1531);
+                    following.push(FOLLOW_opt_eol_in_fact_expression1661);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_fact_expression1533); 
+                    match(input,25,FOLLOW_25_in_fact_expression1663); 
                      pd=fe; 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:645:17: f= fact opt_eol ( ('or'|'||') opt_eol f= fact )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:681:17: f= fact opt_eol ( ('or'|'||') opt_eol f= fact )*
                     {
-                    following.push(FOLLOW_fact_in_fact_expression1544);
+                    following.push(FOLLOW_fact_in_fact_expression1674);
                     f=fact();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_fact_expression1546);
+                    following.push(FOLLOW_opt_eol_in_fact_expression1676);
                     opt_eol();
                     following.pop();
 
@@ -3254,31 +3403,31 @@
                      			((ColumnDescr)f).setIdentifier( id );
                      			pd = f;
                      		
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:650:17: ( ('or'|'||') opt_eol f= fact )*
-                    loop45:
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:686:17: ( ('or'|'||') opt_eol f= fact )*
+                    loop46:
                     do {
-                        int alt45=2;
-                        int LA45_0 = input.LA(1);
-                        if ( (LA45_0>=41 && LA45_0<=42) ) {
-                            alt45=1;
+                        int alt46=2;
+                        int LA46_0 = input.LA(1);
+                        if ( (LA46_0>=42 && LA46_0<=43) ) {
+                            alt46=1;
                         }
 
 
-                        switch (alt45) {
+                        switch (alt46) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:650:25: ('or'|'||') opt_eol f= fact
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:686:25: ('or'|'||') opt_eol f= fact
                     	    {
-                    	    if ( (input.LA(1)>=41 && input.LA(1)<=42) ) {
+                    	    if ( (input.LA(1)>=42 && input.LA(1)<=43) ) {
                     	        input.consume();
                     	        errorRecovery=false;
                     	    }
                     	    else {
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_expression1559);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_expression1689);    throw mse;
                     	    }
 
-                    	    following.push(FOLLOW_opt_eol_in_fact_expression1564);
+                    	    following.push(FOLLOW_opt_eol_in_fact_expression1694);
                     	    opt_eol();
                     	    following.pop();
 
@@ -3289,7 +3438,7 @@
                     	     					multi=true;
                     	     				}
                     	     			
-                    	    following.push(FOLLOW_fact_in_fact_expression1578);
+                    	    following.push(FOLLOW_fact_in_fact_expression1708);
                     	    f=fact();
                     	    following.pop();
 
@@ -3302,7 +3451,7 @@
                     	    break;
 
                     	default :
-                    	    break loop45;
+                    	    break loop46;
                         }
                     } while (true);
 
@@ -3324,7 +3473,7 @@
 
 
     // $ANTLR start fact
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:666:1: fact returns [PatternDescr d] : id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:702:1: fact returns [PatternDescr d] : id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol ;
     public PatternDescr fact() throws RecognitionException {   
         PatternDescr d;
         Token loc=null;
@@ -3338,37 +3487,37 @@
         		d=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:670:17: (id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:670:17: id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:706:17: (id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:706:17: id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol
             {
-            following.push(FOLLOW_dotted_name_in_fact1617);
+            following.push(FOLLOW_dotted_name_in_fact1747);
             id=dotted_name();
             following.pop();
 
              
              			d = new ColumnDescr( id ); 
              		
-            following.push(FOLLOW_opt_eol_in_fact1625);
+            following.push(FOLLOW_opt_eol_in_fact1755);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,23,FOLLOW_23_in_fact1633); 
+            match(input,23,FOLLOW_23_in_fact1763); 
 
              				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
              			
-            following.push(FOLLOW_opt_eol_in_fact1636);
+            following.push(FOLLOW_opt_eol_in_fact1766);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:676:34: (c= constraints )?
-            int alt47=2;
-            alt47 = dfa47.predict(input); 
-            switch (alt47) {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:712:34: (c= constraints )?
+            int alt48=2;
+            alt48 = dfa48.predict(input); 
+            switch (alt48) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:676:41: c= constraints
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:712:41: c= constraints
                     {
-                    following.push(FOLLOW_constraints_in_fact1642);
+                    following.push(FOLLOW_constraints_in_fact1772);
                     c=constraints();
                     following.pop();
 
@@ -3383,13 +3532,13 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_fact1661);
+            following.push(FOLLOW_opt_eol_in_fact1791);
             opt_eol();
             following.pop();
 
             endLoc=(Token)input.LT(1);
-            match(input,25,FOLLOW_25_in_fact1665); 
-            following.push(FOLLOW_opt_eol_in_fact1667);
+            match(input,25,FOLLOW_25_in_fact1795); 
+            following.push(FOLLOW_opt_eol_in_fact1797);
             opt_eol();
             following.pop();
 
@@ -3412,76 +3561,76 @@
 
 
     // $ANTLR start constraints
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:690:1: constraints returns [List constraints] : opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:726:1: constraints returns [List constraints] : opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol ;
     public List constraints() throws RecognitionException {   
         List constraints;
 
         		constraints = new ArrayList();
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:694:17: ( opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:694:17: opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:730:17: ( opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:730:17: opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_constraints1699);
+            following.push(FOLLOW_opt_eol_in_constraints1829);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:695:17: ( constraint[constraints] | predicate[constraints] )
-            int alt48=2;
-            int LA48_0 = input.LA(1);
-            if ( LA48_0==EOL||LA48_0==15 ) {
-                alt48=1;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:731:17: ( constraint[constraints] | predicate[constraints] )
+            int alt49=2;
+            int LA49_0 = input.LA(1);
+            if ( LA49_0==EOL||LA49_0==15 ) {
+                alt49=1;
             }
-            else if ( LA48_0==ID ) {
-                int LA48_2 = input.LA(2);
-                if ( LA48_2==32 ) {
-                    int LA48_3 = input.LA(3);
-                    if ( LA48_3==ID ) {
-                        int LA48_17 = input.LA(4);
-                        if ( LA48_17==46 ) {
-                            alt48=2;
+            else if ( LA49_0==ID ) {
+                int LA49_2 = input.LA(2);
+                if ( LA49_2==33 ) {
+                    int LA49_3 = input.LA(3);
+                    if ( LA49_3==ID ) {
+                        int LA49_17 = input.LA(4);
+                        if ( LA49_17==47 ) {
+                            alt49=2;
                         }
-                        else if ( LA48_17==EOL||LA48_17==15||(LA48_17>=24 && LA48_17<=25)||(LA48_17>=55 && LA48_17<=64) ) {
-                            alt48=1;
+                        else if ( LA49_17==EOL||LA49_17==15||(LA49_17>=24 && LA49_17<=25)||(LA49_17>=56 && LA49_17<=65) ) {
+                            alt49=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("695:17: ( constraint[constraints] | predicate[constraints] )", 48, 17, input);
+                                new NoViableAltException("731:17: ( constraint[constraints] | predicate[constraints] )", 49, 17, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( LA48_3==EOL||LA48_3==15 ) {
-                        alt48=1;
+                    else if ( LA49_3==EOL||LA49_3==15 ) {
+                        alt49=1;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("695:17: ( constraint[constraints] | predicate[constraints] )", 48, 3, input);
+                            new NoViableAltException("731:17: ( constraint[constraints] | predicate[constraints] )", 49, 3, input);
 
                         throw nvae;
                     }
                 }
-                else if ( LA48_2==EOL||LA48_2==15||(LA48_2>=24 && LA48_2<=25)||(LA48_2>=55 && LA48_2<=64) ) {
-                    alt48=1;
+                else if ( LA49_2==EOL||LA49_2==15||(LA49_2>=24 && LA49_2<=25)||(LA49_2>=56 && LA49_2<=65) ) {
+                    alt49=1;
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("695:17: ( constraint[constraints] | predicate[constraints] )", 48, 2, input);
+                        new NoViableAltException("731:17: ( constraint[constraints] | predicate[constraints] )", 49, 2, input);
 
                     throw nvae;
                 }
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("695:17: ( constraint[constraints] | predicate[constraints] )", 48, 0, input);
+                    new NoViableAltException("731:17: ( constraint[constraints] | predicate[constraints] )", 49, 0, input);
 
                 throw nvae;
             }
-            switch (alt48) {
+            switch (alt49) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:695:18: constraint[constraints]
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:731:18: constraint[constraints]
                     {
-                    following.push(FOLLOW_constraint_in_constraints1704);
+                    following.push(FOLLOW_constraint_in_constraints1834);
                     constraint(constraints);
                     following.pop();
 
@@ -3489,9 +3638,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:695:42: predicate[constraints]
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:731:42: predicate[constraints]
                     {
-                    following.push(FOLLOW_predicate_in_constraints1707);
+                    following.push(FOLLOW_predicate_in_constraints1837);
                     predicate(constraints);
                     following.pop();
 
@@ -3501,80 +3650,80 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:696:17: ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )*
-            loop50:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:732:17: ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )*
+            loop51:
             do {
-                int alt50=2;
-                alt50 = dfa50.predict(input); 
-                switch (alt50) {
+                int alt51=2;
+                alt51 = dfa51.predict(input); 
+                switch (alt51) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:696:19: opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] )
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:732:19: opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] )
             	    {
-            	    following.push(FOLLOW_opt_eol_in_constraints1715);
+            	    following.push(FOLLOW_opt_eol_in_constraints1845);
             	    opt_eol();
             	    following.pop();
 
-            	    match(input,24,FOLLOW_24_in_constraints1717); 
-            	    following.push(FOLLOW_opt_eol_in_constraints1719);
+            	    match(input,24,FOLLOW_24_in_constraints1847); 
+            	    following.push(FOLLOW_opt_eol_in_constraints1849);
             	    opt_eol();
             	    following.pop();
 
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:696:39: ( constraint[constraints] | predicate[constraints] )
-            	    int alt49=2;
-            	    int LA49_0 = input.LA(1);
-            	    if ( LA49_0==EOL||LA49_0==15 ) {
-            	        alt49=1;
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:732:39: ( constraint[constraints] | predicate[constraints] )
+            	    int alt50=2;
+            	    int LA50_0 = input.LA(1);
+            	    if ( LA50_0==EOL||LA50_0==15 ) {
+            	        alt50=1;
             	    }
-            	    else if ( LA49_0==ID ) {
-            	        int LA49_2 = input.LA(2);
-            	        if ( LA49_2==32 ) {
-            	            int LA49_3 = input.LA(3);
-            	            if ( LA49_3==ID ) {
-            	                int LA49_17 = input.LA(4);
-            	                if ( LA49_17==46 ) {
-            	                    alt49=2;
+            	    else if ( LA50_0==ID ) {
+            	        int LA50_2 = input.LA(2);
+            	        if ( LA50_2==33 ) {
+            	            int LA50_3 = input.LA(3);
+            	            if ( LA50_3==ID ) {
+            	                int LA50_17 = input.LA(4);
+            	                if ( LA50_17==47 ) {
+            	                    alt50=2;
             	                }
-            	                else if ( LA49_17==EOL||LA49_17==15||(LA49_17>=24 && LA49_17<=25)||(LA49_17>=55 && LA49_17<=64) ) {
-            	                    alt49=1;
+            	                else if ( LA50_17==EOL||LA50_17==15||(LA50_17>=24 && LA50_17<=25)||(LA50_17>=56 && LA50_17<=65) ) {
+            	                    alt50=1;
             	                }
             	                else {
             	                    NoViableAltException nvae =
-            	                        new NoViableAltException("696:39: ( constraint[constraints] | predicate[constraints] )", 49, 17, input);
+            	                        new NoViableAltException("732:39: ( constraint[constraints] | predicate[constraints] )", 50, 17, input);
 
             	                    throw nvae;
             	                }
             	            }
-            	            else if ( LA49_3==EOL||LA49_3==15 ) {
-            	                alt49=1;
+            	            else if ( LA50_3==EOL||LA50_3==15 ) {
+            	                alt50=1;
             	            }
             	            else {
             	                NoViableAltException nvae =
-            	                    new NoViableAltException("696:39: ( constraint[constraints] | predicate[constraints] )", 49, 3, input);
+            	                    new NoViableAltException("732:39: ( constraint[constraints] | predicate[constraints] )", 50, 3, input);
 
             	                throw nvae;
             	            }
             	        }
-            	        else if ( LA49_2==EOL||LA49_2==15||(LA49_2>=24 && LA49_2<=25)||(LA49_2>=55 && LA49_2<=64) ) {
-            	            alt49=1;
+            	        else if ( LA50_2==EOL||LA50_2==15||(LA50_2>=24 && LA50_2<=25)||(LA50_2>=56 && LA50_2<=65) ) {
+            	            alt50=1;
             	        }
             	        else {
             	            NoViableAltException nvae =
-            	                new NoViableAltException("696:39: ( constraint[constraints] | predicate[constraints] )", 49, 2, input);
+            	                new NoViableAltException("732:39: ( constraint[constraints] | predicate[constraints] )", 50, 2, input);
 
             	            throw nvae;
             	        }
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("696:39: ( constraint[constraints] | predicate[constraints] )", 49, 0, input);
+            	            new NoViableAltException("732:39: ( constraint[constraints] | predicate[constraints] )", 50, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt49) {
+            	    switch (alt50) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:696:40: constraint[constraints]
+            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:732:40: constraint[constraints]
             	            {
-            	            following.push(FOLLOW_constraint_in_constraints1722);
+            	            following.push(FOLLOW_constraint_in_constraints1852);
             	            constraint(constraints);
             	            following.pop();
 
@@ -3582,9 +3731,9 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:696:64: predicate[constraints]
+            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:732:64: predicate[constraints]
             	            {
-            	            following.push(FOLLOW_predicate_in_constraints1725);
+            	            following.push(FOLLOW_predicate_in_constraints1855);
             	            predicate(constraints);
             	            following.pop();
 
@@ -3599,11 +3748,11 @@
             	    break;
 
             	default :
-            	    break loop50;
+            	    break loop51;
                 }
             } while (true);
 
-            following.push(FOLLOW_opt_eol_in_constraints1733);
+            following.push(FOLLOW_opt_eol_in_constraints1863);
             opt_eol();
             following.pop();
 
@@ -3623,7 +3772,7 @@
 
 
     // $ANTLR start constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:700:1: constraint[List constraints] : opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:736:1: constraint[List constraints] : opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol ;
     public void constraint(List constraints) throws RecognitionException {   
         Token fb=null;
         Token f=null;
@@ -3640,28 +3789,28 @@
         		PatternDescr d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: ( opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:740:17: ( opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:740:17: opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_constraint1752);
+            following.push(FOLLOW_opt_eol_in_constraint1882);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:705:17: (fb= ID opt_eol ':' opt_eol )?
-            int alt51=2;
-            alt51 = dfa51.predict(input); 
-            switch (alt51) {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:741:17: (fb= ID opt_eol ':' opt_eol )?
+            int alt52=2;
+            alt52 = dfa52.predict(input); 
+            switch (alt52) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:705:19: fb= ID opt_eol ':' opt_eol
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:741:19: fb= ID opt_eol ':' opt_eol
                     {
                     fb=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_constraint1760); 
-                    following.push(FOLLOW_opt_eol_in_constraint1762);
+                    match(input,ID,FOLLOW_ID_in_constraint1890); 
+                    following.push(FOLLOW_opt_eol_in_constraint1892);
                     opt_eol();
                     following.pop();
 
-                    match(input,32,FOLLOW_32_in_constraint1764); 
-                    following.push(FOLLOW_opt_eol_in_constraint1766);
+                    match(input,33,FOLLOW_33_in_constraint1894); 
+                    following.push(FOLLOW_opt_eol_in_constraint1896);
                     opt_eol();
                     following.pop();
 
@@ -3672,7 +3821,7 @@
             }
 
             f=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_constraint1776); 
+            match(input,ID,FOLLOW_ID_in_constraint1906); 
 
 
             			if ( fb != null ) {
@@ -3689,51 +3838,51 @@
             									
             			
             		
-            following.push(FOLLOW_opt_eol_in_constraint1790);
+            following.push(FOLLOW_opt_eol_in_constraint1920);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:723:33: (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )?
-            int alt55=2;
-            int LA55_0 = input.LA(1);
-            if ( (LA55_0>=55 && LA55_0<=64) ) {
-                alt55=1;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:759:33: (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )?
+            int alt56=2;
+            int LA56_0 = input.LA(1);
+            if ( (LA56_0>=56 && LA56_0<=65) ) {
+                alt56=1;
             }
-            else if ( LA55_0==EOL||LA55_0==15||(LA55_0>=24 && LA55_0<=25) ) {
-                alt55=2;
+            else if ( LA56_0==EOL||LA56_0==15||(LA56_0>=24 && LA56_0<=25) ) {
+                alt56=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("723:33: (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= (\'&\'|\'|\')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )?", 55, 0, input);
+                    new NoViableAltException("759:33: (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= (\'&\'|\'|\')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )?", 56, 0, input);
 
                 throw nvae;
             }
-            switch (alt55) {
+            switch (alt56) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:723:41: op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:759:41: op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
                     {
-                    following.push(FOLLOW_operator_in_constraint1796);
+                    following.push(FOLLOW_operator_in_constraint1926);
                     op=operator();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_constraint1798);
+                    following.push(FOLLOW_opt_eol_in_constraint1928);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:725:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
-                    int alt52=4;
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:761:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    int alt53=4;
                     switch ( input.LA(1) ) {
                     case ID:
-                        int LA52_1 = input.LA(2);
-                        if ( LA52_1==18 ) {
-                            alt52=2;
+                        int LA53_1 = input.LA(2);
+                        if ( LA53_1==18 ) {
+                            alt53=2;
                         }
-                        else if ( LA52_1==EOL||LA52_1==15||(LA52_1>=24 && LA52_1<=25)||(LA52_1>=43 && LA52_1<=44) ) {
-                            alt52=1;
+                        else if ( LA53_1==EOL||LA53_1==15||(LA53_1>=24 && LA53_1<=25)||(LA53_1>=44 && LA53_1<=45) ) {
+                            alt53=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("725:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 52, 1, input);
+                                new NoViableAltException("761:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 1, input);
 
                             throw nvae;
                         }
@@ -3742,25 +3891,25 @@
                     case BOOL:
                     case STRING:
                     case FLOAT:
-                    case 45:
-                        alt52=3;
+                    case 46:
+                        alt53=3;
                         break;
                     case 23:
-                        alt52=4;
+                        alt53=4;
                         break;
                     default:
                         NoViableAltException nvae =
-                            new NoViableAltException("725:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 52, 0, input);
+                            new NoViableAltException("761:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 0, input);
 
                         throw nvae;
                     }
 
-                    switch (alt52) {
+                    switch (alt53) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:725:49: bvc= ID
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:761:49: bvc= ID
                             {
                             bvc=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_constraint1816); 
+                            match(input,ID,FOLLOW_ID_in_constraint1946); 
 
                             							
                             														
@@ -3774,9 +3923,9 @@
                             }
                             break;
                         case 2 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:736:49: lc= enum_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:772:49: lc= enum_constraint
                             {
-                            following.push(FOLLOW_enum_constraint_in_constraint1841);
+                            following.push(FOLLOW_enum_constraint_in_constraint1971);
                             lc=enum_constraint();
                             following.pop();
 
@@ -3791,9 +3940,9 @@
                             }
                             break;
                         case 3 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:745:49: lc= literal_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:781:49: lc= literal_constraint
                             {
-                            following.push(FOLLOW_literal_constraint_in_constraint1873);
+                            following.push(FOLLOW_literal_constraint_in_constraint2003);
                             lc=literal_constraint();
                             following.pop();
 
@@ -3808,9 +3957,9 @@
                             }
                             break;
                         case 4 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:753:49: rvc= retval_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:789:49: rvc= retval_constraint
                             {
-                            following.push(FOLLOW_retval_constraint_in_constraint1893);
+                            following.push(FOLLOW_retval_constraint_in_constraint2023);
                             rvc=retval_constraint();
                             following.pop();
 
@@ -3829,29 +3978,29 @@
 
                     }
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:764:41: (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
-                    loop54:
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:800:41: (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
+                    loop55:
                     do {
-                        int alt54=2;
-                        int LA54_0 = input.LA(1);
-                        if ( (LA54_0>=43 && LA54_0<=44) ) {
-                            alt54=1;
+                        int alt55=2;
+                        int LA55_0 = input.LA(1);
+                        if ( (LA55_0>=44 && LA55_0<=45) ) {
+                            alt55=1;
                         }
 
 
-                        switch (alt54) {
+                        switch (alt55) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:765:49: con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:801:49: con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
                     	    {
                     	    con=(Token)input.LT(1);
-                    	    if ( (input.LA(1)>=43 && input.LA(1)<=44) ) {
+                    	    if ( (input.LA(1)>=44 && input.LA(1)<=45) ) {
                     	        input.consume();
                     	        errorRecovery=false;
                     	    }
                     	    else {
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint1928);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2058);    throw mse;
                     	    }
 
 
@@ -3861,24 +4010,24 @@
                     	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
                     	    							}							
                     	    						
-                    	    following.push(FOLLOW_operator_in_constraint1950);
+                    	    following.push(FOLLOW_operator_in_constraint2080);
                     	    op=operator();
                     	    following.pop();
 
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:775:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
-                    	    int alt53=4;
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    	    int alt54=4;
                     	    switch ( input.LA(1) ) {
                     	    case ID:
-                    	        int LA53_1 = input.LA(2);
-                    	        if ( LA53_1==18 ) {
-                    	            alt53=2;
+                    	        int LA54_1 = input.LA(2);
+                    	        if ( LA54_1==18 ) {
+                    	            alt54=2;
                     	        }
-                    	        else if ( LA53_1==EOL||LA53_1==15||(LA53_1>=24 && LA53_1<=25)||(LA53_1>=43 && LA53_1<=44) ) {
-                    	            alt53=1;
+                    	        else if ( LA54_1==EOL||LA54_1==15||(LA54_1>=24 && LA54_1<=25)||(LA54_1>=44 && LA54_1<=45) ) {
+                    	            alt54=1;
                     	        }
                     	        else {
                     	            NoViableAltException nvae =
-                    	                new NoViableAltException("775:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 1, input);
+                    	                new NoViableAltException("811:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 54, 1, input);
 
                     	            throw nvae;
                     	        }
@@ -3887,25 +4036,25 @@
                     	    case BOOL:
                     	    case STRING:
                     	    case FLOAT:
-                    	    case 45:
-                    	        alt53=3;
+                    	    case 46:
+                    	        alt54=3;
                     	        break;
                     	    case 23:
-                    	        alt53=4;
+                    	        alt54=4;
                     	        break;
                     	    default:
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("775:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 0, input);
+                    	            new NoViableAltException("811:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 54, 0, input);
 
                     	        throw nvae;
                     	    }
 
-                    	    switch (alt53) {
+                    	    switch (alt54) {
                     	        case 1 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:775:57: bvc= ID
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:57: bvc= ID
                     	            {
                     	            bvc=(Token)input.LT(1);
-                    	            match(input,ID,FOLLOW_ID_in_constraint1962); 
+                    	            match(input,ID,FOLLOW_ID_in_constraint2092); 
 
                     	            								VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
                     	            								fc.addRestriction(vd);
@@ -3914,9 +4063,9 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:781:57: lc= enum_constraint
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:817:57: lc= enum_constraint
                     	            {
-                    	            following.push(FOLLOW_enum_constraint_in_constraint1990);
+                    	            following.push(FOLLOW_enum_constraint_in_constraint2120);
                     	            lc=enum_constraint();
                     	            following.pop();
 
@@ -3929,9 +4078,9 @@
                     	            }
                     	            break;
                     	        case 3 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:788:57: lc= literal_constraint
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:824:57: lc= literal_constraint
                     	            {
-                    	            following.push(FOLLOW_literal_constraint_in_constraint2025);
+                    	            following.push(FOLLOW_literal_constraint_in_constraint2155);
                     	            lc=literal_constraint();
                     	            following.pop();
 
@@ -3944,9 +4093,9 @@
                     	            }
                     	            break;
                     	        case 4 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:794:57: rvc= retval_constraint
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:830:57: rvc= retval_constraint
                     	            {
-                    	            following.push(FOLLOW_retval_constraint_in_constraint2047);
+                    	            following.push(FOLLOW_retval_constraint_in_constraint2177);
                     	            rvc=retval_constraint();
                     	            following.pop();
 
@@ -3966,7 +4115,7 @@
                     	    break;
 
                     	default :
-                    	    break loop54;
+                    	    break loop55;
                         }
                     } while (true);
 
@@ -3976,7 +4125,7 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_constraint2103);
+            following.push(FOLLOW_opt_eol_in_constraint2233);
             opt_eol();
             following.pop();
 
@@ -3996,7 +4145,7 @@
 
 
     // $ANTLR start literal_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:807:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' ) ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:843:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' ) ;
     public String literal_constraint() throws RecognitionException {   
         String text;
         Token t=null;
@@ -4005,76 +4154,76 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:17: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:847:17: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:847:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
-            int alt56=5;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:847:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
+            int alt57=5;
             switch ( input.LA(1) ) {
             case STRING:
-                alt56=1;
+                alt57=1;
                 break;
             case INT:
-                alt56=2;
+                alt57=2;
                 break;
             case FLOAT:
-                alt56=3;
+                alt57=3;
                 break;
             case BOOL:
-                alt56=4;
+                alt57=4;
                 break;
-            case 45:
-                alt56=5;
+            case 46:
+                alt57=5;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("811:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 56, 0, input);
+                    new NoViableAltException("847:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 57, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt56) {
+            switch (alt57) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:25: t= STRING
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:847:25: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2130); 
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2260); 
                      text = getString( t ); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:25: t= INT
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:848:25: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint2141); 
+                    match(input,INT,FOLLOW_INT_in_literal_constraint2271); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:813:25: t= FLOAT
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:25: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2154); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2284); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:814:25: t= BOOL
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:850:25: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2165); 
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2295); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:815:25: t= 'null'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:851:25: t= 'null'
                     {
                     t=(Token)input.LT(1);
-                    match(input,45,FOLLOW_45_in_literal_constraint2177); 
+                    match(input,46,FOLLOW_46_in_literal_constraint2307); 
                      text = null; 
 
                     }
@@ -4098,7 +4247,7 @@
 
 
     // $ANTLR start enum_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:819:1: enum_constraint returns [String text] : (cls= ID '.' en= ID ) ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:855:1: enum_constraint returns [String text] : (cls= ID '.' en= ID ) ;
     public String enum_constraint() throws RecognitionException {   
         String text;
         Token cls=null;
@@ -4108,17 +4257,17 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:17: ( (cls= ID '.' en= ID ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:17: (cls= ID '.' en= ID )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:859:17: ( (cls= ID '.' en= ID ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:859:17: (cls= ID '.' en= ID )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:17: (cls= ID '.' en= ID )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:18: cls= ID '.' en= ID
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:859:17: (cls= ID '.' en= ID )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:859:18: cls= ID '.' en= ID
             {
             cls=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint2208); 
-            match(input,18,FOLLOW_18_in_enum_constraint2210); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint2338); 
+            match(input,18,FOLLOW_18_in_enum_constraint2340); 
             en=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint2214); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint2344); 
 
             }
 
@@ -4139,7 +4288,7 @@
 
 
     // $ANTLR start retval_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:826:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:862:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
     public String retval_constraint() throws RecognitionException {   
         String text;
         String c = null;
@@ -4149,15 +4298,15 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:831:17: ( '(' c= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:831:17: '(' c= paren_chunk ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:867:17: ( '(' c= paren_chunk ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:867:17: '(' c= paren_chunk ')'
             {
-            match(input,23,FOLLOW_23_in_retval_constraint2243); 
-            following.push(FOLLOW_paren_chunk_in_retval_constraint2248);
+            match(input,23,FOLLOW_23_in_retval_constraint2373); 
+            following.push(FOLLOW_paren_chunk_in_retval_constraint2378);
             c=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_retval_constraint2251); 
+            match(input,25,FOLLOW_25_in_retval_constraint2381); 
              text = c; 
 
             }
@@ -4175,7 +4324,7 @@
 
 
     // $ANTLR start predicate
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:834:1: predicate[List constraints] : decl= ID ':' field= ID '->' '(' text= paren_chunk ')' ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:870:1: predicate[List constraints] : decl= ID ':' field= ID '->' '(' text= paren_chunk ')' ;
     public void predicate(List constraints) throws RecognitionException {   
         Token decl=null;
         Token field=null;
@@ -4183,21 +4332,21 @@
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:872:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:872:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
             {
             decl=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_predicate2269); 
-            match(input,32,FOLLOW_32_in_predicate2271); 
+            match(input,ID,FOLLOW_ID_in_predicate2399); 
+            match(input,33,FOLLOW_33_in_predicate2401); 
             field=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_predicate2275); 
-            match(input,46,FOLLOW_46_in_predicate2277); 
-            match(input,23,FOLLOW_23_in_predicate2279); 
-            following.push(FOLLOW_paren_chunk_in_predicate2283);
+            match(input,ID,FOLLOW_ID_in_predicate2405); 
+            match(input,47,FOLLOW_47_in_predicate2407); 
+            match(input,23,FOLLOW_23_in_predicate2409); 
+            following.push(FOLLOW_paren_chunk_in_predicate2413);
             text=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_predicate2285); 
+            match(input,25,FOLLOW_25_in_predicate2415); 
 
             			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
             			constraints.add( d );
@@ -4218,7 +4367,7 @@
 
 
     // $ANTLR start paren_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:843:1: paren_chunk returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:879:1: paren_chunk returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* ;
     public String paren_chunk() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4229,22 +4378,22 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:885:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:885:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
-            loop57:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:885:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            loop58:
             do {
-                int alt57=3;
+                int alt58=3;
                 switch ( input.LA(1) ) {
                 case EOL:
-                    alt57=3;
+                    alt58=3;
                     break;
                 case 25:
-                    alt57=3;
+                    alt58=3;
                     break;
                 case 23:
-                    alt57=1;
+                    alt58=1;
                     break;
                 case ID:
                 case INT:
@@ -4304,21 +4453,22 @@
                 case 62:
                 case 63:
                 case 64:
-                    alt57=2;
+                case 65:
+                    alt58=2;
                     break;
 
                 }
 
-                switch (alt57) {
+                switch (alt58) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:850:25: '(' c= paren_chunk ')'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:886:25: '(' c= paren_chunk ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk2331); 
-            	    following.push(FOLLOW_paren_chunk_in_paren_chunk2335);
+            	    match(input,23,FOLLOW_23_in_paren_chunk2461); 
+            	    following.push(FOLLOW_paren_chunk_in_paren_chunk2465);
             	    c=paren_chunk();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk2337); 
+            	    match(input,25,FOLLOW_25_in_paren_chunk2467); 
 
             	    				if ( c == null ) {
             	    					c = "";
@@ -4333,7 +4483,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:861:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:897:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4349,7 +4499,7 @@
             	    break;
 
             	default :
-            	    break loop57;
+            	    break loop58;
                 }
             } while (true);
 
@@ -4369,7 +4519,7 @@
 
 
     // $ANTLR start paren_chunk2
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:873:1: paren_chunk2 returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:909:1: paren_chunk2 returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* ;
     public String paren_chunk2() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4380,19 +4530,19 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:879:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:879:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:915:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:915:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:879:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
-            loop58:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:915:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            loop59:
             do {
-                int alt58=3;
+                int alt59=3;
                 switch ( input.LA(1) ) {
                 case 25:
-                    alt58=3;
+                    alt59=3;
                     break;
                 case 23:
-                    alt58=1;
+                    alt59=1;
                     break;
                 case EOL:
                 case ID:
@@ -4453,21 +4603,22 @@
                 case 62:
                 case 63:
                 case 64:
-                    alt58=2;
+                case 65:
+                    alt59=2;
                     break;
 
                 }
 
-                switch (alt58) {
+                switch (alt59) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:880:25: '(' c= paren_chunk2 ')'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:916:25: '(' c= paren_chunk2 ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk22408); 
-            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk22412);
+            	    match(input,23,FOLLOW_23_in_paren_chunk22538); 
+            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk22542);
             	    c=paren_chunk2();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk22414); 
+            	    match(input,25,FOLLOW_25_in_paren_chunk22544); 
 
             	    				if ( c == null ) {
             	    					c = "";
@@ -4482,7 +4633,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:891:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:927:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4498,7 +4649,7 @@
             	    break;
 
             	default :
-            	    break loop58;
+            	    break loop59;
                 }
             } while (true);
 
@@ -4518,7 +4669,7 @@
 
 
     // $ANTLR start curly_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:902:1: curly_chunk returns [String text] : ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:938:1: curly_chunk returns [String text] : ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* ;
     public String curly_chunk() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4529,19 +4680,19 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:944:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:944:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
-            loop59:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:944:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            loop60:
             do {
-                int alt59=3;
+                int alt60=3;
                 switch ( input.LA(1) ) {
                 case 27:
-                    alt59=3;
+                    alt60=3;
                     break;
                 case 26:
-                    alt59=1;
+                    alt60=1;
                     break;
                 case EOL:
                 case ID:
@@ -4602,21 +4753,22 @@
                 case 62:
                 case 63:
                 case 64:
-                    alt59=2;
+                case 65:
+                    alt60=2;
                     break;
 
                 }
 
-                switch (alt59) {
+                switch (alt60) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:909:25: '{' c= curly_chunk '}'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:945:25: '{' c= curly_chunk '}'
             	    {
-            	    match(input,26,FOLLOW_26_in_curly_chunk2483); 
-            	    following.push(FOLLOW_curly_chunk_in_curly_chunk2487);
+            	    match(input,26,FOLLOW_26_in_curly_chunk2613); 
+            	    following.push(FOLLOW_curly_chunk_in_curly_chunk2617);
             	    c=curly_chunk();
             	    following.pop();
 
-            	    match(input,27,FOLLOW_27_in_curly_chunk2489); 
+            	    match(input,27,FOLLOW_27_in_curly_chunk2619); 
 
             	    				//System.err.println( "chunk [" + c + "]" );
             	    				if ( c == null ) {
@@ -4632,7 +4784,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:921:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:957:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4649,7 +4801,7 @@
             	    break;
 
             	default :
-            	    break loop59;
+            	    break loop60;
                 }
             } while (true);
 
@@ -4669,7 +4821,7 @@
 
 
     // $ANTLR start lhs_or
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:933:1: lhs_or returns [PatternDescr d] : left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:969:1: lhs_or returns [PatternDescr d] : left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )* ;
     public PatternDescr lhs_or() throws RecognitionException {   
         PatternDescr d;
         PatternDescr left = null;
@@ -4681,44 +4833,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:938:17: (left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:938:17: left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:974:17: (left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:974:17: left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )*
             {
              OrDescr or = null; 
-            following.push(FOLLOW_lhs_and_in_lhs_or2547);
+            following.push(FOLLOW_lhs_and_in_lhs_or2677);
             left=lhs_and();
             following.pop();
 
             d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:940:17: ( ('or'|'||') opt_eol right= lhs_and )*
-            loop60:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:976:17: ( ('or'|'||') opt_eol right= lhs_and )*
+            loop61:
             do {
-                int alt60=2;
-                int LA60_0 = input.LA(1);
-                if ( (LA60_0>=41 && LA60_0<=42) ) {
-                    alt60=1;
+                int alt61=2;
+                int LA61_0 = input.LA(1);
+                if ( (LA61_0>=42 && LA61_0<=43) ) {
+                    alt61=1;
                 }
 
 
-                switch (alt60) {
+                switch (alt61) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:940:19: ('or'|'||') opt_eol right= lhs_and
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:976:19: ('or'|'||') opt_eol right= lhs_and
             	    {
-            	    if ( (input.LA(1)>=41 && input.LA(1)<=42) ) {
+            	    if ( (input.LA(1)>=42 && input.LA(1)<=43) ) {
             	        input.consume();
             	        errorRecovery=false;
             	    }
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or2556);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or2686);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_or2561);
+            	    following.push(FOLLOW_opt_eol_in_lhs_or2691);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_and_in_lhs_or2568);
+            	    following.push(FOLLOW_lhs_and_in_lhs_or2698);
             	    right=lhs_and();
             	    following.pop();
 
@@ -4736,7 +4888,7 @@
             	    break;
 
             	default :
-            	    break loop60;
+            	    break loop61;
                 }
             } while (true);
 
@@ -4756,7 +4908,7 @@
 
 
     // $ANTLR start lhs_and
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:954:1: lhs_and returns [PatternDescr d] : left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:990:1: lhs_and returns [PatternDescr d] : left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )* ;
     public PatternDescr lhs_and() throws RecognitionException {   
         PatternDescr d;
         PatternDescr left = null;
@@ -4768,44 +4920,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:959:17: (left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:959:17: left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:995:17: (left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:995:17: left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )*
             {
              AndDescr and = null; 
-            following.push(FOLLOW_lhs_unary_in_lhs_and2608);
+            following.push(FOLLOW_lhs_unary_in_lhs_and2738);
             left=lhs_unary();
             following.pop();
 
              d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:961:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
-            loop61:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:997:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
+            loop62:
             do {
-                int alt61=2;
-                int LA61_0 = input.LA(1);
-                if ( (LA61_0>=47 && LA61_0<=48) ) {
-                    alt61=1;
+                int alt62=2;
+                int LA62_0 = input.LA(1);
+                if ( (LA62_0>=48 && LA62_0<=49) ) {
+                    alt62=1;
                 }
 
 
-                switch (alt61) {
+                switch (alt62) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:961:19: ('and'|'&&') opt_eol right= lhs_unary
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:997:19: ('and'|'&&') opt_eol right= lhs_unary
             	    {
-            	    if ( (input.LA(1)>=47 && input.LA(1)<=48) ) {
+            	    if ( (input.LA(1)>=48 && input.LA(1)<=49) ) {
             	        input.consume();
             	        errorRecovery=false;
             	    }
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and2617);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and2747);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_and2622);
+            	    following.push(FOLLOW_opt_eol_in_lhs_and2752);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_unary_in_lhs_and2629);
+            	    following.push(FOLLOW_lhs_unary_in_lhs_and2759);
             	    right=lhs_unary();
             	    following.pop();
 
@@ -4823,7 +4975,7 @@
             	    break;
 
             	default :
-            	    break loop61;
+            	    break loop62;
                 }
             } while (true);
 
@@ -4843,7 +4995,7 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:975:1: lhs_unary returns [PatternDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' ) ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1011:1: lhs_unary returns [PatternDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' ) ;
     public PatternDescr lhs_unary() throws RecognitionException {   
         PatternDescr d;
         PatternDescr u = null;
@@ -4853,39 +5005,39 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:17: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1015:17: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1015:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
-            int alt62=5;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1015:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
+            int alt63=5;
             switch ( input.LA(1) ) {
-            case 49:
-                alt62=1;
-                break;
             case 50:
-                alt62=2;
+                alt63=1;
                 break;
             case 51:
-                alt62=3;
+                alt63=2;
                 break;
+            case 52:
+                alt63=3;
+                break;
             case ID:
-                alt62=4;
+                alt63=4;
                 break;
             case 23:
-                alt62=5;
+                alt63=5;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("979:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | \'(\' opt_eol u= lhs opt_eol \')\' )", 62, 0, input);
+                    new NoViableAltException("1015:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | \'(\' opt_eol u= lhs opt_eol \')\' )", 63, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt62) {
+            switch (alt63) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:25: u= lhs_exist
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1015:25: u= lhs_exist
                     {
-                    following.push(FOLLOW_lhs_exist_in_lhs_unary2667);
+                    following.push(FOLLOW_lhs_exist_in_lhs_unary2797);
                     u=lhs_exist();
                     following.pop();
 
@@ -4893,9 +5045,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:980:25: u= lhs_not
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1016:25: u= lhs_not
                     {
-                    following.push(FOLLOW_lhs_not_in_lhs_unary2675);
+                    following.push(FOLLOW_lhs_not_in_lhs_unary2805);
                     u=lhs_not();
                     following.pop();
 
@@ -4903,9 +5055,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:981:25: u= lhs_eval
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1017:25: u= lhs_eval
                     {
-                    following.push(FOLLOW_lhs_eval_in_lhs_unary2683);
+                    following.push(FOLLOW_lhs_eval_in_lhs_unary2813);
                     u=lhs_eval();
                     following.pop();
 
@@ -4913,9 +5065,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:982:25: u= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1018:25: u= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_unary2691);
+                    following.push(FOLLOW_lhs_column_in_lhs_unary2821);
                     u=lhs_column();
                     following.pop();
 
@@ -4923,22 +5075,22 @@
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:983:25: '(' opt_eol u= lhs opt_eol ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1019:25: '(' opt_eol u= lhs opt_eol ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_unary2697); 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary2699);
+                    match(input,23,FOLLOW_23_in_lhs_unary2827); 
+                    following.push(FOLLOW_opt_eol_in_lhs_unary2829);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_lhs_in_lhs_unary2703);
+                    following.push(FOLLOW_lhs_in_lhs_unary2833);
                     u=lhs();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary2705);
+                    following.push(FOLLOW_opt_eol_in_lhs_unary2835);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_unary2707); 
+                    match(input,25,FOLLOW_25_in_lhs_unary2837); 
 
                     }
                     break;
@@ -4962,7 +5114,7 @@
 
 
     // $ANTLR start lhs_exist
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:987:1: lhs_exist returns [PatternDescr d] : loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1023:1: lhs_exist returns [PatternDescr d] : loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) ;
     public PatternDescr lhs_exist() throws RecognitionException {   
         PatternDescr d;
         Token loc=null;
@@ -4973,43 +5125,43 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1027:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1027:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,49,FOLLOW_49_in_lhs_exist2737); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:30: ( '(' column= lhs_column ')' | column= lhs_column )
-            int alt63=2;
-            int LA63_0 = input.LA(1);
-            if ( LA63_0==23 ) {
-                alt63=1;
+            match(input,50,FOLLOW_50_in_lhs_exist2867); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1027:30: ( '(' column= lhs_column ')' | column= lhs_column )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
+            if ( LA64_0==23 ) {
+                alt64=1;
             }
-            else if ( LA63_0==ID ) {
-                alt63=2;
+            else if ( LA64_0==ID ) {
+                alt64=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("991:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 63, 0, input);
+                    new NoViableAltException("1027:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 64, 0, input);
 
                 throw nvae;
             }
-            switch (alt63) {
+            switch (alt64) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:31: '(' column= lhs_column ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1027:31: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_exist2740); 
-                    following.push(FOLLOW_lhs_column_in_lhs_exist2744);
+                    match(input,23,FOLLOW_23_in_lhs_exist2870); 
+                    following.push(FOLLOW_lhs_column_in_lhs_exist2874);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_exist2746); 
+                    match(input,25,FOLLOW_25_in_lhs_exist2876); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:59: column= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1027:59: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_exist2752);
+                    following.push(FOLLOW_lhs_column_in_lhs_exist2882);
                     column=lhs_column();
                     following.pop();
 
@@ -5039,7 +5191,7 @@
 
 
     // $ANTLR start lhs_not
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:998:1: lhs_not returns [NotDescr d] : loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1034:1: lhs_not returns [NotDescr d] : loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) ;
     public NotDescr lhs_not() throws RecognitionException {   
         NotDescr d;
         Token loc=null;
@@ -5050,43 +5202,43 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,50,FOLLOW_50_in_lhs_not2782); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:27: ( '(' column= lhs_column ')' | column= lhs_column )
-            int alt64=2;
-            int LA64_0 = input.LA(1);
-            if ( LA64_0==23 ) {
-                alt64=1;
+            match(input,51,FOLLOW_51_in_lhs_not2912); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:27: ( '(' column= lhs_column ')' | column= lhs_column )
+            int alt65=2;
+            int LA65_0 = input.LA(1);
+            if ( LA65_0==23 ) {
+                alt65=1;
             }
-            else if ( LA64_0==ID ) {
-                alt64=2;
+            else if ( LA65_0==ID ) {
+                alt65=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1002:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 64, 0, input);
+                    new NoViableAltException("1038:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 65, 0, input);
 
                 throw nvae;
             }
-            switch (alt64) {
+            switch (alt65) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:28: '(' column= lhs_column ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:28: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_not2785); 
-                    following.push(FOLLOW_lhs_column_in_lhs_not2789);
+                    match(input,23,FOLLOW_23_in_lhs_not2915); 
+                    following.push(FOLLOW_lhs_column_in_lhs_not2919);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_not2792); 
+                    match(input,25,FOLLOW_25_in_lhs_not2922); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:57: column= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:57: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_not2798);
+                    following.push(FOLLOW_lhs_column_in_lhs_not2928);
                     column=lhs_column();
                     following.pop();
 
@@ -5116,7 +5268,7 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1009:1: lhs_eval returns [PatternDescr d] : 'eval' loc= '(' c= paren_chunk2 ')' ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1045:1: lhs_eval returns [PatternDescr d] : 'eval' loc= '(' c= paren_chunk2 ')' ;
     public PatternDescr lhs_eval() throws RecognitionException {   
         PatternDescr d;
         Token loc=null;
@@ -5128,17 +5280,17 @@
         		String text = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1014:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1014:17: 'eval' loc= '(' c= paren_chunk2 ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:17: 'eval' loc= '(' c= paren_chunk2 ')'
             {
-            match(input,51,FOLLOW_51_in_lhs_eval2824); 
+            match(input,52,FOLLOW_52_in_lhs_eval2954); 
             loc=(Token)input.LT(1);
-            match(input,23,FOLLOW_23_in_lhs_eval2828); 
-            following.push(FOLLOW_paren_chunk2_in_lhs_eval2836);
+            match(input,23,FOLLOW_23_in_lhs_eval2958); 
+            following.push(FOLLOW_paren_chunk2_in_lhs_eval2966);
             c=paren_chunk2();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_lhs_eval2840); 
+            match(input,25,FOLLOW_25_in_lhs_eval2970); 
              
             			checkTrailingSemicolon( c, offset(loc.getLine()) );
             			d = new EvalDescr( c ); 
@@ -5159,7 +5311,7 @@
 
 
     // $ANTLR start dotted_name
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1023:1: dotted_name returns [String name] : id= ID ( '.' id= ID )* ( '[' ']' )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1059:1: dotted_name returns [String name] : id= ID ( '.' id= ID )* ( '[' ']' )* ;
     public String dotted_name() throws RecognitionException {   
         String name;
         Token id=null;
@@ -5168,62 +5320,62 @@
         		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:17: id= ID ( '.' id= ID )* ( '[' ']' )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:17: id= ID ( '.' id= ID )* ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dotted_name2872); 
+            match(input,ID,FOLLOW_ID_in_dotted_name3002); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:46: ( '.' id= ID )*
-            loop65:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:46: ( '.' id= ID )*
+            loop66:
             do {
-                int alt65=2;
-                int LA65_0 = input.LA(1);
-                if ( LA65_0==18 ) {
-                    alt65=1;
+                int alt66=2;
+                int LA66_0 = input.LA(1);
+                if ( LA66_0==18 ) {
+                    alt66=1;
                 }
 
 
-                switch (alt65) {
+                switch (alt66) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:48: '.' id= ID
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:48: '.' id= ID
             	    {
-            	    match(input,18,FOLLOW_18_in_dotted_name2878); 
+            	    match(input,18,FOLLOW_18_in_dotted_name3008); 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_dotted_name2882); 
+            	    match(input,ID,FOLLOW_ID_in_dotted_name3012); 
             	     name = name + "." + id.getText(); 
 
             	    }
             	    break;
 
             	default :
-            	    break loop65;
+            	    break loop66;
                 }
             } while (true);
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:99: ( '[' ']' )*
-            loop66:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:99: ( '[' ']' )*
+            loop67:
             do {
-                int alt66=2;
-                int LA66_0 = input.LA(1);
-                if ( LA66_0==52 ) {
-                    alt66=1;
+                int alt67=2;
+                int LA67_0 = input.LA(1);
+                if ( LA67_0==53 ) {
+                    alt67=1;
                 }
 
 
-                switch (alt66) {
+                switch (alt67) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:101: '[' ']'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:101: '[' ']'
             	    {
-            	    match(input,52,FOLLOW_52_in_dotted_name2891); 
-            	    match(input,53,FOLLOW_53_in_dotted_name2893); 
+            	    match(input,53,FOLLOW_53_in_dotted_name3021); 
+            	    match(input,54,FOLLOW_54_in_dotted_name3023); 
             	     name = name + "[]";
 
             	    }
             	    break;
 
             	default :
-            	    break loop66;
+            	    break loop67;
                 }
             } while (true);
 
@@ -5243,7 +5395,7 @@
 
 
     // $ANTLR start argument
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1031:1: argument returns [String name] : id= ID ( '[' ']' )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1067:1: argument returns [String name] : id= ID ( '[' ']' )* ;
     public String argument() throws RecognitionException {   
         String name;
         Token id=null;
@@ -5252,35 +5404,35 @@
         		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:17: (id= ID ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:17: id= ID ( '[' ']' )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1072:17: (id= ID ( '[' ']' )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1072:17: id= ID ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument2923); 
+            match(input,ID,FOLLOW_ID_in_argument3053); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:46: ( '[' ']' )*
-            loop67:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1072:46: ( '[' ']' )*
+            loop68:
             do {
-                int alt67=2;
-                int LA67_0 = input.LA(1);
-                if ( LA67_0==52 ) {
-                    alt67=1;
+                int alt68=2;
+                int LA68_0 = input.LA(1);
+                if ( LA68_0==53 ) {
+                    alt68=1;
                 }
 
 
-                switch (alt67) {
+                switch (alt68) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:48: '[' ']'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1072:48: '[' ']'
             	    {
-            	    match(input,52,FOLLOW_52_in_argument2929); 
-            	    match(input,53,FOLLOW_53_in_argument2931); 
+            	    match(input,53,FOLLOW_53_in_argument3059); 
+            	    match(input,54,FOLLOW_54_in_argument3061); 
             	     name = name + "[]";
 
             	    }
             	    break;
 
             	default :
-            	    break loop67;
+            	    break loop68;
                 }
             } while (true);
 
@@ -5300,7 +5452,7 @@
 
 
     // $ANTLR start word
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1040:1: word returns [String word] : (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1076:1: word returns [String word] : (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING );
     public String word() throws RecognitionException {   
         String word;
         Token id=null;
@@ -5310,136 +5462,136 @@
         		word = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1044:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
-            int alt68=11;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
+            int alt69=11;
             switch ( input.LA(1) ) {
             case ID:
-                alt68=1;
+                alt69=1;
                 break;
             case 17:
-                alt68=2;
+                alt69=2;
                 break;
-            case 54:
-                alt68=3;
+            case 55:
+                alt69=3;
                 break;
-            case 30:
-                alt68=4;
+            case 31:
+                alt69=4;
                 break;
             case 28:
-                alt68=5;
+                alt69=5;
                 break;
-            case 35:
-                alt68=6;
-                break;
             case 36:
-                alt68=7;
+                alt69=6;
                 break;
-            case 31:
-                alt68=8;
+            case 37:
+                alt69=7;
                 break;
-            case 33:
-                alt68=9;
+            case 32:
+                alt69=8;
                 break;
+            case 34:
+                alt69=9;
+                break;
             case 29:
-                alt68=10;
+                alt69=10;
                 break;
             case STRING:
-                alt68=11;
+                alt69=11;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1040:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 68, 0, input);
+                    new NoViableAltException("1076:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 69, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt68) {
+            switch (alt69) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1044:17: id= ID
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:17: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_word2959); 
+                    match(input,ID,FOLLOW_ID_in_word3089); 
                      word=id.getText(); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1045:17: 'import'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:17: 'import'
                     {
-                    match(input,17,FOLLOW_17_in_word2971); 
+                    match(input,17,FOLLOW_17_in_word3101); 
                      word="import"; 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1046:17: 'use'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:17: 'use'
                     {
-                    match(input,54,FOLLOW_54_in_word2980); 
+                    match(input,55,FOLLOW_55_in_word3110); 
                      word="use"; 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1047:17: 'rule'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1083:17: 'rule'
                     {
-                    match(input,30,FOLLOW_30_in_word2992); 
+                    match(input,31,FOLLOW_31_in_word3122); 
                      word="rule"; 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1048:17: 'query'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1084:17: 'query'
                     {
-                    match(input,28,FOLLOW_28_in_word3003); 
+                    match(input,28,FOLLOW_28_in_word3133); 
                      word="query"; 
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1049:17: 'salience'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1085:17: 'salience'
                     {
-                    match(input,35,FOLLOW_35_in_word3013); 
+                    match(input,36,FOLLOW_36_in_word3143); 
                      word="salience"; 
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:17: 'no-loop'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1086:17: 'no-loop'
                     {
-                    match(input,36,FOLLOW_36_in_word3021); 
+                    match(input,37,FOLLOW_37_in_word3151); 
                      word="no-loop"; 
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1051:17: 'when'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1087:17: 'when'
                     {
-                    match(input,31,FOLLOW_31_in_word3029); 
+                    match(input,32,FOLLOW_32_in_word3159); 
                      word="when"; 
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1052:17: 'then'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1088:17: 'then'
                     {
-                    match(input,33,FOLLOW_33_in_word3040); 
+                    match(input,34,FOLLOW_34_in_word3170); 
                      word="then"; 
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1053:17: 'end'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1089:17: 'end'
                     {
-                    match(input,29,FOLLOW_29_in_word3051); 
+                    match(input,29,FOLLOW_29_in_word3181); 
                      word="end"; 
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1054:17: str= STRING
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1090:17: str= STRING
                     {
                     str=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_word3065); 
+                    match(input,STRING,FOLLOW_STRING_in_word3195); 
                      word=getString(str);
 
                     }
@@ -5459,130 +5611,130 @@
 
 
     // $ANTLR start operator
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:1: operator returns [String str] : ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1093:1: operator returns [String str] : ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' );
     public String operator() throws RecognitionException {   
         String str;
 
         		str = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1063:17: ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' )
-            int alt69=10;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1099:17: ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' )
+            int alt70=10;
             switch ( input.LA(1) ) {
-            case 55:
-                alt69=1;
-                break;
             case 56:
-                alt69=2;
+                alt70=1;
                 break;
             case 57:
-                alt69=3;
+                alt70=2;
                 break;
             case 58:
-                alt69=4;
+                alt70=3;
                 break;
             case 59:
-                alt69=5;
+                alt70=4;
                 break;
             case 60:
-                alt69=6;
+                alt70=5;
                 break;
             case 61:
-                alt69=7;
+                alt70=6;
                 break;
             case 62:
-                alt69=8;
+                alt70=7;
                 break;
             case 63:
-                alt69=9;
+                alt70=8;
                 break;
             case 64:
-                alt69=10;
+                alt70=9;
                 break;
+            case 65:
+                alt70=10;
+                break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1057:1: operator returns [String str] : ( \'==\' | \'=\' | \'>\' | \'>=\' | \'<\' | \'<=\' | \'!=\' | \'contains\' | \'matches\' | \'excludes\' );", 69, 0, input);
+                    new NoViableAltException("1093:1: operator returns [String str] : ( \'==\' | \'=\' | \'>\' | \'>=\' | \'<\' | \'<=\' | \'!=\' | \'contains\' | \'matches\' | \'excludes\' );", 70, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt69) {
+            switch (alt70) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1063:17: '=='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1099:17: '=='
                     {
-                    match(input,55,FOLLOW_55_in_operator3094); 
+                    match(input,56,FOLLOW_56_in_operator3224); 
                     str= "==";
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:18: '='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1100:18: '='
                     {
-                    match(input,56,FOLLOW_56_in_operator3101); 
+                    match(input,57,FOLLOW_57_in_operator3231); 
                     str="==";
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:18: '>'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1101:18: '>'
                     {
-                    match(input,57,FOLLOW_57_in_operator3108); 
+                    match(input,58,FOLLOW_58_in_operator3238); 
                     str=">";
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1066:18: '>='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:18: '>='
                     {
-                    match(input,58,FOLLOW_58_in_operator3115); 
+                    match(input,59,FOLLOW_59_in_operator3245); 
                     str=">=";
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1067:18: '<'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1103:18: '<'
                     {
-                    match(input,59,FOLLOW_59_in_operator3124); 
+                    match(input,60,FOLLOW_60_in_operator3254); 
                     str="<";
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1068:18: '<='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1104:18: '<='
                     {
-                    match(input,60,FOLLOW_60_in_operator3131); 
+                    match(input,61,FOLLOW_61_in_operator3261); 
                     str="<=";
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1069:18: '!='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:18: '!='
                     {
-                    match(input,61,FOLLOW_61_in_operator3138); 
+                    match(input,62,FOLLOW_62_in_operator3268); 
                     str="!=";
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1070:18: 'contains'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:18: 'contains'
                     {
-                    match(input,62,FOLLOW_62_in_operator3145); 
+                    match(input,63,FOLLOW_63_in_operator3275); 
                     str="contains";
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1071:18: 'matches'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1107:18: 'matches'
                     {
-                    match(input,63,FOLLOW_63_in_operator3152); 
+                    match(input,64,FOLLOW_64_in_operator3282); 
                     str="matches";
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1072:18: 'excludes'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1108:18: 'excludes'
                     {
-                    match(input,64,FOLLOW_64_in_operator3159); 
+                    match(input,65,FOLLOW_65_in_operator3289); 
                     str="excludes";
 
                     }
@@ -5601,27 +5753,31 @@
     // $ANTLR end operator
 
 
-    protected DFA2 dfa2 = new DFA2();protected DFA4 dfa4 = new DFA4();protected DFA12 dfa12 = new DFA12();protected DFA13 dfa13 = new DFA13();protected DFA14 dfa14 = new DFA14();protected DFA44 dfa44 = new DFA44();protected DFA47 dfa47 = new DFA47();protected DFA50 dfa50 = new DFA50();protected DFA51 dfa51 = new DFA51();
+    protected DFA2 dfa2 = new DFA2();protected DFA4 dfa4 = new DFA4();protected DFA12 dfa12 = new DFA12();protected DFA13 dfa13 = new DFA13();protected DFA14 dfa14 = new DFA14();protected DFA45 dfa45 = new DFA45();protected DFA48 dfa48 = new DFA48();protected DFA51 dfa51 = new DFA51();protected DFA52 dfa52 = new DFA52();
     class DFA2 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
-        DFA.State s1 = new DFA.State() {{alt=4;}};
+        DFA.State s1 = new DFA.State() {{alt=5;}};
+        DFA.State s4 = new DFA.State() {{alt=2;}};
         DFA.State s3 = new DFA.State() {{alt=1;}};
-        DFA.State s4 = new DFA.State() {{alt=2;}};
+        DFA.State s5 = new DFA.State() {{alt=3;}};
         DFA.State s2 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 30:
-                    return s3;
+                case 28:
+                    return s4;
 
                 case EOL:
                 case 15:
                     return s2;
 
-                case 28:
-                    return s4;
+                case 31:
+                    return s3;
 
+                case 30:
+                    return s5;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 2, 2, input);
@@ -5629,7 +5785,7 @@
                     throw nvae;        }
             }
         };
-        DFA.State s5 = new DFA.State() {{alt=3;}};
+        DFA.State s6 = new DFA.State() {{alt=4;}};
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -5640,16 +5796,19 @@
                 case 15:
                     return s2;
 
-                case 30:
+                case 31:
                     return s3;
 
                 case 28:
                     return s4;
 
+                case 30:
+                    return s5;
+
                 case 17:
                 case 21:
                 case 22:
-                    return s5;
+                    return s6;
 
                 default:
                     NoViableAltException nvae =
@@ -5664,124 +5823,125 @@
             return predict(input, s0);
         }
         DFA.State s1 = new DFA.State() {{alt=3;}};
-        DFA.State s10 = new DFA.State() {{alt=1;}};
-        DFA.State s9 = new DFA.State() {
+        DFA.State s11 = new DFA.State() {{alt=1;}};
+        DFA.State s10 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_9 = input.LA(1);
-                if ( LA4_9==ID ) {return s10;}
-                if ( LA4_9==EOL||LA4_9==15 ) {return s9;}
+                int LA4_10 = input.LA(1);
+                if ( LA4_10==ID ) {return s11;}
+                if ( LA4_10==EOL||LA4_10==15 ) {return s10;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 9, input);
+        	    new NoViableAltException("", 4, 10, input);
 
                 throw nvae;
             }
         };
-        DFA.State s4 = new DFA.State() {
+        DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_4 = input.LA(1);
-                if ( LA4_4==EOL||LA4_4==15 ) {return s9;}
-                if ( LA4_4==ID ) {return s10;}
+                int LA4_5 = input.LA(1);
+                if ( LA4_5==EOL||LA4_5==15 ) {return s10;}
+                if ( LA4_5==ID ) {return s11;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 4, input);
+        	    new NoViableAltException("", 4, 5, input);
 
                 throw nvae;
             }
         };
-        DFA.State s18 = new DFA.State() {{alt=1;}};
-        DFA.State s27 = new DFA.State() {
+        DFA.State s19 = new DFA.State() {{alt=1;}};
+        DFA.State s28 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_27 = input.LA(1);
-                if ( LA4_27==ID ) {return s18;}
-                if ( LA4_27==52 ) {return s17;}
+                int LA4_28 = input.LA(1);
+                if ( LA4_28==ID ) {return s19;}
+                if ( LA4_28==53 ) {return s18;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 27, input);
+        	    new NoViableAltException("", 4, 28, input);
 
                 throw nvae;
             }
         };
-        DFA.State s17 = new DFA.State() {
+        DFA.State s18 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_17 = input.LA(1);
-                if ( LA4_17==53 ) {return s27;}
+                int LA4_18 = input.LA(1);
+                if ( LA4_18==54 ) {return s28;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 17, input);
+        	    new NoViableAltException("", 4, 18, input);
 
                 throw nvae;
             }
         };
-        DFA.State s26 = new DFA.State() {
+        DFA.State s27 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 52:
-                    return s17;
+                case 53:
+                    return s18;
 
                 case ID:
-                    return s18;
+                    return s19;
 
                 case 18:
-                    return s16;
+                    return s17;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 26, input);
+                        new NoViableAltException("", 4, 27, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s16 = new DFA.State() {
+        DFA.State s17 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_16 = input.LA(1);
-                if ( LA4_16==ID ) {return s26;}
+                int LA4_17 = input.LA(1);
+                if ( LA4_17==ID ) {return s27;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 16, input);
+        	    new NoViableAltException("", 4, 17, input);
 
                 throw nvae;
             }
         };
-        DFA.State s11 = new DFA.State() {
+        DFA.State s12 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 18:
-                    return s16;
-
-                case 52:
                     return s17;
 
-                case ID:
+                case 53:
                     return s18;
 
+                case ID:
+                    return s19;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 11, input);
+                        new NoViableAltException("", 4, 12, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s5 = new DFA.State() {
+        DFA.State s6 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_5 = input.LA(1);
-                if ( LA4_5==ID ) {return s11;}
+                int LA4_6 = input.LA(1);
+                if ( LA4_6==ID ) {return s12;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 5, input);
+        	    new NoViableAltException("", 4, 6, input);
 
                 throw nvae;
             }
         };
-        DFA.State s121 = new DFA.State() {{alt=1;}};
-        DFA.State s122 = new DFA.State() {
+        DFA.State s115 = new DFA.State() {{alt=1;}};
+        DFA.State s122 = new DFA.State() {{alt=1;}};
+        DFA.State s123 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 27:
-                    return s121;
+                    return s122;
 
                 case 26:
-                    return s120;
+                    return s121;
 
                 case EOL:
                 case ID:
@@ -5842,23 +6002,24 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s122;
+                case 65:
+                    return s123;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 122, input);
+                        new NoViableAltException("", 4, 123, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s120 = new DFA.State() {
+        DFA.State s121 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
-                    return s120;
+                    return s121;
 
                 case 27:
-                    return s121;
+                    return s122;
 
                 case EOL:
                 case ID:
@@ -5919,23 +6080,24 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s122;
+                case 65:
+                    return s123;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 120, input);
+                        new NoViableAltException("", 4, 121, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s114 = new DFA.State() {
+        DFA.State s116 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
-                    return s120;
+                    return s121;
 
                 case 27:
-                    return s121;
+                    return s122;
 
                 case EOL:
                 case ID:
@@ -5996,24 +6158,24 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s122;
+                case 65:
+                    return s123;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 114, input);
+                        new NoViableAltException("", 4, 116, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s115 = new DFA.State() {{alt=1;}};
-        DFA.State s116 = new DFA.State() {
+        DFA.State s117 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 27:
                     return s115;
 
                 case 26:
-                    return s114;
+                    return s116;
 
                 case EOL:
                 case ID:
@@ -6074,24 +6236,25 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s116;
+                case 65:
+                    return s117;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 116, input);
+                        new NoViableAltException("", 4, 117, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s105 = new DFA.State() {
+        DFA.State s106 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 26:
-                    return s114;
-
                 case 27:
                     return s115;
 
+                case 26:
+                    return s116;
+
                 case EOL:
                 case ID:
                 case INT:
@@ -6151,24 +6314,25 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s116;
+                case 65:
+                    return s117;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 105, input);
+                        new NoViableAltException("", 4, 106, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s106 = new DFA.State() {{alt=1;}};
-        DFA.State s107 = new DFA.State() {
+        DFA.State s107 = new DFA.State() {{alt=1;}};
+        DFA.State s108 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 27:
-                    return s106;
+                    return s107;
 
                 case 26:
-                    return s105;
+                    return s106;
 
                 case EOL:
                 case ID:
@@ -6229,23 +6393,24 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s107;
+                case 65:
+                    return s108;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 107, input);
+                        new NoViableAltException("", 4, 108, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s87 = new DFA.State() {
+        DFA.State s88 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
-                    return s105;
+                    return s106;
 
                 case 27:
-                    return s106;
+                    return s107;
 
                 case EOL:
                 case ID:
@@ -6306,24 +6471,25 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s107;
+                case 65:
+                    return s108;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 87, input);
+                        new NoViableAltException("", 4, 88, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s88 = new DFA.State() {{alt=1;}};
-        DFA.State s89 = new DFA.State() {
+        DFA.State s89 = new DFA.State() {{alt=1;}};
+        DFA.State s90 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 27:
-                    return s88;
+                    return s89;
 
                 case 26:
-                    return s87;
+                    return s88;
 
                 case EOL:
                 case ID:
@@ -6384,23 +6550,24 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s89;
+                case 65:
+                    return s90;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 89, input);
+                        new NoViableAltException("", 4, 90, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s67 = new DFA.State() {
+        DFA.State s68 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
-                    return s87;
+                    return s88;
 
                 case 27:
-                    return s88;
+                    return s89;
 
                 case EOL:
                 case ID:
@@ -6461,24 +6628,25 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s89;
+                case 65:
+                    return s90;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 67, input);
+                        new NoViableAltException("", 4, 68, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s68 = new DFA.State() {{alt=1;}};
-        DFA.State s69 = new DFA.State() {
+        DFA.State s69 = new DFA.State() {{alt=1;}};
+        DFA.State s70 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 27:
-                    return s68;
+                    return s69;
 
                 case 26:
-                    return s67;
+                    return s68;
 
                 case EOL:
                 case ID:
@@ -6539,23 +6707,24 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s69;
+                case 65:
+                    return s70;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 69, input);
+                        new NoViableAltException("", 4, 70, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s51 = new DFA.State() {
+        DFA.State s52 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
-                    return s67;
+                    return s68;
 
                 case 27:
-                    return s68;
+                    return s69;
 
                 case EOL:
                 case ID:
@@ -6616,459 +6785,460 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s69;
+                case 65:
+                    return s70;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 51, input);
+                        new NoViableAltException("", 4, 52, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s50 = new DFA.State() {
+        DFA.State s51 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_50 = input.LA(1);
-                if ( LA4_50==26 ) {return s51;}
-                if ( LA4_50==EOL||LA4_50==15 ) {return s50;}
+                int LA4_51 = input.LA(1);
+                if ( LA4_51==26 ) {return s52;}
+                if ( LA4_51==EOL||LA4_51==15 ) {return s51;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 50, input);
+        	    new NoViableAltException("", 4, 51, input);
 
                 throw nvae;
             }
         };
-        DFA.State s33 = new DFA.State() {
+        DFA.State s34 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_33 = input.LA(1);
-                if ( LA4_33==EOL||LA4_33==15 ) {return s50;}
-                if ( LA4_33==26 ) {return s51;}
+                int LA4_34 = input.LA(1);
+                if ( LA4_34==EOL||LA4_34==15 ) {return s51;}
+                if ( LA4_34==26 ) {return s52;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 33, input);
+        	    new NoViableAltException("", 4, 34, input);
 
                 throw nvae;
             }
         };
-        DFA.State s60 = new DFA.State() {
+        DFA.State s61 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 24:
-                    return s48;
+                    return s49;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 case EOL:
                 case 15:
-                    return s60;
+                    return s61;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 60, input);
+                        new NoViableAltException("", 4, 61, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s75 = new DFA.State() {
+        DFA.State s76 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s60;
+                    return s61;
 
                 case 24:
-                    return s48;
+                    return s49;
 
                 case 25:
-                    return s33;
+                    return s34;
 
-                case 52:
-                    return s59;
+                case 53:
+                    return s60;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 75, input);
+                        new NoViableAltException("", 4, 76, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s59 = new DFA.State() {
+        DFA.State s60 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_59 = input.LA(1);
-                if ( LA4_59==53 ) {return s75;}
+                int LA4_60 = input.LA(1);
+                if ( LA4_60==54 ) {return s76;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 59, input);
+        	    new NoViableAltException("", 4, 60, input);
 
                 throw nvae;
             }
         };
-        DFA.State s102 = new DFA.State() {
+        DFA.State s103 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 25:
-                    return s33;
+                    return s34;
 
                 case 24:
-                    return s48;
+                    return s49;
 
                 case EOL:
                 case 15:
-                    return s102;
+                    return s103;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 102, input);
+                        new NoViableAltException("", 4, 103, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s86 = new DFA.State() {
+        DFA.State s87 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 52:
-                    return s59;
+                case 53:
+                    return s60;
 
                 case EOL:
                 case 15:
-                    return s102;
+                    return s103;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 case 24:
-                    return s48;
+                    return s49;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 86, input);
+                        new NoViableAltException("", 4, 87, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s82 = new DFA.State() {
+        DFA.State s83 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 25:
-                    return s33;
+                case ID:
+                    return s87;
 
-                case 24:
-                    return s48;
-
                 case EOL:
                 case 15:
-                    return s82;
+                    return s83;
 
-                case ID:
-                    return s86;
+                case 25:
+                    return s34;
 
+                case 24:
+                    return s49;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 82, input);
+                        new NoViableAltException("", 4, 83, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s64 = new DFA.State() {
+        DFA.State s65 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 52:
-                    return s45;
+                case 53:
+                    return s46;
 
                 case EOL:
                 case 15:
-                    return s82;
+                    return s83;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 case 24:
-                    return s48;
+                    return s49;
 
                 case 18:
-                    return s16;
+                    return s17;
 
                 case ID:
-                    return s86;
+                    return s87;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 64, input);
+                        new NoViableAltException("", 4, 65, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s63 = new DFA.State() {
+        DFA.State s64 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_63 = input.LA(1);
-                if ( LA4_63==ID ) {return s64;}
-                if ( LA4_63==EOL||LA4_63==15 ) {return s63;}
+                int LA4_64 = input.LA(1);
+                if ( LA4_64==ID ) {return s65;}
+                if ( LA4_64==EOL||LA4_64==15 ) {return s64;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 63, input);
+        	    new NoViableAltException("", 4, 64, input);
 
                 throw nvae;
             }
         };
-        DFA.State s48 = new DFA.State() {
+        DFA.State s49 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_48 = input.LA(1);
-                if ( LA4_48==EOL||LA4_48==15 ) {return s63;}
-                if ( LA4_48==ID ) {return s64;}
+                int LA4_49 = input.LA(1);
+                if ( LA4_49==EOL||LA4_49==15 ) {return s64;}
+                if ( LA4_49==ID ) {return s65;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 48, input);
+        	    new NoViableAltException("", 4, 49, input);
 
                 throw nvae;
             }
         };
-        DFA.State s47 = new DFA.State() {
+        DFA.State s48 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 52:
-                    return s59;
+                case 53:
+                    return s60;
 
                 case EOL:
                 case 15:
-                    return s60;
+                    return s61;
 
                 case 24:
-                    return s48;
+                    return s49;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 47, input);
+                        new NoViableAltException("", 4, 48, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s46 = new DFA.State() {
+        DFA.State s47 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 24:
-                    return s48;
+                    return s49;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 case EOL:
                 case 15:
-                    return s46;
+                    return s47;
 
                 case ID:
-                    return s47;
+                    return s48;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 46, input);
+                        new NoViableAltException("", 4, 47, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s54 = new DFA.State() {
+        DFA.State s55 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s46;
+                    return s47;
 
                 case ID:
-                    return s47;
+                    return s48;
 
-                case 52:
-                    return s45;
+                case 53:
+                    return s46;
 
                 case 24:
-                    return s48;
+                    return s49;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 54, input);
+                        new NoViableAltException("", 4, 55, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s45 = new DFA.State() {
+        DFA.State s46 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_45 = input.LA(1);
-                if ( LA4_45==53 ) {return s54;}
+                int LA4_46 = input.LA(1);
+                if ( LA4_46==54 ) {return s55;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 45, input);
+        	    new NoViableAltException("", 4, 46, input);
 
                 throw nvae;
             }
         };
-        DFA.State s32 = new DFA.State() {
+        DFA.State s33 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 18:
-                    return s16;
+                    return s17;
 
-                case 52:
-                    return s45;
+                case 53:
+                    return s46;
 
                 case EOL:
                 case 15:
-                    return s46;
+                    return s47;
 
                 case ID:
-                    return s47;
+                    return s48;
 
                 case 24:
-                    return s48;
+                    return s49;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 32, input);
+                        new NoViableAltException("", 4, 33, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s31 = new DFA.State() {
+        DFA.State s32 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case ID:
-                    return s32;
+                    return s33;
 
                 case EOL:
                 case 15:
-                    return s31;
+                    return s32;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 31, input);
+                        new NoViableAltException("", 4, 32, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s22 = new DFA.State() {
+        DFA.State s23 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s31;
+                    return s32;
 
                 case ID:
-                    return s32;
+                    return s33;
 
                 case 25:
-                    return s33;
+                    return s34;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 22, input);
+                        new NoViableAltException("", 4, 23, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s34 = new DFA.State() {
+        DFA.State s35 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_34 = input.LA(1);
-                if ( LA4_34==23 ) {return s22;}
-                if ( LA4_34==EOL||LA4_34==15 ) {return s34;}
+                int LA4_35 = input.LA(1);
+                if ( LA4_35==23 ) {return s23;}
+                if ( LA4_35==EOL||LA4_35==15 ) {return s35;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 34, input);
+        	    new NoViableAltException("", 4, 35, input);
 
                 throw nvae;
             }
         };
-        DFA.State s25 = new DFA.State() {
+        DFA.State s26 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_25 = input.LA(1);
-                if ( LA4_25==EOL||LA4_25==15 ) {return s34;}
-                if ( LA4_25==23 ) {return s22;}
+                int LA4_26 = input.LA(1);
+                if ( LA4_26==EOL||LA4_26==15 ) {return s35;}
+                if ( LA4_26==23 ) {return s23;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 25, input);
+        	    new NoViableAltException("", 4, 26, input);
 
                 throw nvae;
             }
         };
-        DFA.State s21 = new DFA.State() {
+        DFA.State s22 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 23:
-                    return s22;
+                case ID:
+                    return s26;
 
                 case EOL:
                 case 15:
-                    return s21;
+                    return s22;
 
-                case ID:
-                    return s25;
+                case 23:
+                    return s23;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 21, input);
+                        new NoViableAltException("", 4, 22, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s13 = new DFA.State() {
+        DFA.State s14 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s21;
+                    return s22;
 
                 case 23:
-                    return s22;
+                    return s23;
 
                 case 18:
-                    return s16;
-
-                case 52:
                     return s17;
 
+                case 53:
+                    return s18;
+
                 case ID:
-                    return s25;
+                    return s26;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 13, input);
+                        new NoViableAltException("", 4, 14, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s12 = new DFA.State() {
+        DFA.State s13 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_12 = input.LA(1);
-                if ( LA4_12==ID ) {return s13;}
-                if ( LA4_12==EOL||LA4_12==15 ) {return s12;}
+                int LA4_13 = input.LA(1);
+                if ( LA4_13==ID ) {return s14;}
+                if ( LA4_13==EOL||LA4_13==15 ) {return s13;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 12, input);
+        	    new NoViableAltException("", 4, 13, input);
 
                 throw nvae;
             }
         };
-        DFA.State s6 = new DFA.State() {
+        DFA.State s7 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_6 = input.LA(1);
-                if ( LA4_6==EOL||LA4_6==15 ) {return s12;}
-                if ( LA4_6==ID ) {return s13;}
+                int LA4_7 = input.LA(1);
+                if ( LA4_7==EOL||LA4_7==15 ) {return s13;}
+                if ( LA4_7==ID ) {return s14;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 6, input);
+        	    new NoViableAltException("", 4, 7, input);
 
                 throw nvae;
             }
         };
-        DFA.State s8 = new DFA.State() {{alt=2;}};
+        DFA.State s9 = new DFA.State() {{alt=2;}};
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -7077,19 +7247,20 @@
                 case 15:
                 case 28:
                 case 30:
+                case 31:
                     return s1;
 
                 case 17:
-                    return s4;
+                    return s5;
 
                 case 21:
-                    return s5;
+                    return s6;
 
                 case 22:
-                    return s6;
+                    return s7;
 
                 case 20:
-                    return s8;
+                    return s9;
 
                 default:
                     NoViableAltException nvae =
@@ -7103,24 +7274,24 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
+        DFA.State s3 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {{alt=2;}};
-        DFA.State s5 = new DFA.State() {{alt=1;}};
-        DFA.State s3 = new DFA.State() {
+        DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 23:
-                    return s2;
+                case ID:
+                    return s3;
 
                 case EOL:
                 case 15:
-                    return s3;
-
-                case ID:
                     return s5;
 
+                case 23:
+                    return s2;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 12, 3, input);
+                        new NoViableAltException("", 12, 5, input);
 
                     throw nvae;        }
             }
@@ -7128,18 +7299,18 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case ID:
+                case 18:
+                case 53:
+                    return s3;
+
                 case EOL:
                 case 15:
-                    return s3;
+                    return s5;
 
                 case 23:
                     return s2;
 
-                case ID:
-                case 18:
-                case 52:
-                    return s5;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 12, 1, input);
@@ -7169,16 +7340,16 @@
         DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                case 25:
-                    return s2;
+                case ID:
+                    return s3;
 
                 case EOL:
                 case 15:
                     return s5;
 
-                case ID:
-                    return s3;
+                case 24:
+                case 25:
+                    return s2;
 
                 default:
                     NoViableAltException nvae =
@@ -7197,7 +7368,7 @@
                 case ID:
                     return s3;
 
-                case 52:
+                case 53:
                     return s4;
 
                 case 24:
@@ -7214,7 +7385,7 @@
         DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA13_4 = input.LA(1);
-                if ( LA13_4==53 ) {return s9;}
+                if ( LA13_4==54 ) {return s9;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 13, 4, input);
@@ -7229,7 +7400,7 @@
                 case 18:
                     return s3;
 
-                case 52:
+                case 53:
                     return s4;
 
                 case EOL:
@@ -7264,25 +7435,25 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
-        DFA.State s7 = new DFA.State() {{alt=1;}};
+        DFA.State s3 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {{alt=2;}};
-        DFA.State s4 = new DFA.State() {
+        DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                    return s7;
+                case 24:
+                case 25:
+                    return s2;
 
                 case EOL:
                 case 15:
-                    return s4;
+                    return s5;
 
-                case 24:
-                case 25:
-                    return s2;
+                case ID:
+                    return s3;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 14, 4, input);
+                        new NoViableAltException("", 14, 5, input);
 
                     throw nvae;        }
             }
@@ -7292,18 +7463,18 @@
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
+                    return s5;
+
+                case ID:
+                    return s3;
+
+                case 53:
                     return s4;
 
                 case 24:
                 case 25:
                     return s2;
 
-                case 52:
-                    return s3;
-
-                case ID:
-                    return s7;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 14, 9, input);
@@ -7311,13 +7482,13 @@
                     throw nvae;        }
             }
         };
-        DFA.State s3 = new DFA.State() {
+        DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA14_3 = input.LA(1);
-                if ( LA14_3==53 ) {return s9;}
+                int LA14_4 = input.LA(1);
+                if ( LA14_4==54 ) {return s9;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 14, 3, input);
+        	    new NoViableAltException("", 14, 4, input);
 
                 throw nvae;
             }
@@ -7325,21 +7496,21 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 52:
+                case ID:
+                case 18:
                     return s3;
 
+                case 53:
+                    return s4;
+
                 case EOL:
                 case 15:
-                    return s4;
+                    return s5;
 
                 case 24:
                 case 25:
                     return s2;
 
-                case ID:
-                case 18:
-                    return s7;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 14, 1, input);
@@ -7360,7 +7531,7 @@
             }
         };
 
-    }class DFA44 extends DFA {
+    }class DFA45 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
@@ -7369,19 +7540,19 @@
         DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 23:
-                    return s2;
+                case 33:
+                    return s6;
 
                 case EOL:
                 case 15:
                     return s4;
 
-                case 32:
-                    return s6;
+                case 23:
+                    return s2;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 44, 4, input);
+                        new NoViableAltException("", 45, 4, input);
 
                     throw nvae;        }
             }
@@ -7391,36 +7562,36 @@
                 switch ( input.LA(1) ) {
                 case 18:
                 case 23:
-                case 52:
+                case 53:
                     return s2;
 
                 case EOL:
                 case 15:
                     return s4;
 
-                case 32:
+                case 33:
                     return s6;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 44, 1, input);
+                        new NoViableAltException("", 45, 1, input);
 
                     throw nvae;        }
             }
         };
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA44_0 = input.LA(1);
-                if ( LA44_0==ID ) {return s1;}
+                int LA45_0 = input.LA(1);
+                if ( LA45_0==ID ) {return s1;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 44, 0, input);
+        	    new NoViableAltException("", 45, 0, input);
 
                 throw nvae;
             }
         };
 
-    }class DFA47 extends DFA {
+    }class DFA48 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
@@ -7441,7 +7612,7 @@
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 47, 1, input);
+                        new NoViableAltException("", 48, 1, input);
 
                     throw nvae;        }
             }
@@ -7461,24 +7632,21 @@
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 47, 0, input);
+                        new NoViableAltException("", 48, 0, input);
 
                     throw nvae;        }
             }
         };
 
-    }class DFA50 extends DFA {
+    }class DFA51 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
+        DFA.State s2 = new DFA.State() {{alt=2;}};
         DFA.State s3 = new DFA.State() {{alt=1;}};
-        DFA.State s2 = new DFA.State() {{alt=2;}};
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                    return s3;
-
                 case EOL:
                 case 15:
                     return s1;
@@ -7486,9 +7654,12 @@
                 case 25:
                     return s2;
 
+                case 24:
+                    return s3;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 50, 1, input);
+                        new NoViableAltException("", 51, 1, input);
 
                     throw nvae;        }
             }
@@ -7508,31 +7679,27 @@
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 50, 0, input);
+                        new NoViableAltException("", 51, 0, input);
 
                     throw nvae;        }
             }
         };
 
-    }class DFA51 extends DFA {
+    }class DFA52 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
-        DFA.State s3 = new DFA.State() {{alt=1;}};
-        DFA.State s4 = new DFA.State() {{alt=2;}};
+        DFA.State s3 = new DFA.State() {{alt=2;}};
+        DFA.State s15 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 32:
-                    return s3;
-
                 case EOL:
                 case 15:
                     return s2;
 
                 case 24:
                 case 25:
-                case 55:
                 case 56:
                 case 57:
                 case 58:
@@ -7542,11 +7709,15 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s4;
+                case 65:
+                    return s3;
 
+                case 33:
+                    return s15;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 51, 2, input);
+                        new NoViableAltException("", 52, 2, input);
 
                     throw nvae;        }
             }
@@ -7558,12 +7729,8 @@
                 case 15:
                     return s2;
 
-                case 32:
-                    return s3;
-
                 case 24:
                 case 25:
-                case 55:
                 case 56:
                 case 57:
                 case 58:
@@ -7573,22 +7740,26 @@
                 case 62:
                 case 63:
                 case 64:
-                    return s4;
+                case 65:
+                    return s3;
 
+                case 33:
+                    return s15;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 51, 1, input);
+                        new NoViableAltException("", 52, 1, input);
 
                     throw nvae;        }
             }
         };
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA51_0 = input.LA(1);
-                if ( LA51_0==ID ) {return s1;}
+                int LA52_0 = input.LA(1);
+                if ( LA52_0==ID ) {return s1;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 51, 0, input);
+        	    new NoViableAltException("", 52, 0, input);
 
                 throw nvae;
             }
@@ -7602,283 +7773,294 @@
     public static final BitSet FOLLOW_prolog_in_compilation_unit61 = new BitSet(new long[]{0x0000000000628012L});
     public static final BitSet FOLLOW_rule_in_compilation_unit70 = new BitSet(new long[]{0x0000000000628012L});
     public static final BitSet FOLLOW_query_in_compilation_unit83 = new BitSet(new long[]{0x0000000000628012L});
-    public static final BitSet FOLLOW_extra_statement_in_compilation_unit91 = new BitSet(new long[]{0x0000000000628012L});
-    public static final BitSet FOLLOW_opt_eol_in_prolog115 = new BitSet(new long[]{0x0000000000738012L});
-    public static final BitSet FOLLOW_package_statement_in_prolog123 = new BitSet(new long[]{0x0000000000728012L});
-    public static final BitSet FOLLOW_extra_statement_in_prolog138 = new BitSet(new long[]{0x0000000000728012L});
-    public static final BitSet FOLLOW_expander_in_prolog144 = new BitSet(new long[]{0x0000000000728012L});
-    public static final BitSet FOLLOW_opt_eol_in_prolog156 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_16_in_package_statement180 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_package_statement182 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_dotted_name_in_package_statement186 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_package_statement188 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_package_statement191 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_import_statement207 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_import_statement209 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_import_name_in_import_statement213 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_import_statement215 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_import_statement218 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_name249 = new BitSet(new long[]{0x00000000000C0002L});
-    public static final BitSet FOLLOW_18_in_import_name255 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_template_in_compilation_unit93 = new BitSet(new long[]{0x0000000000628012L});
+    public static final BitSet FOLLOW_extra_statement_in_compilation_unit101 = new BitSet(new long[]{0x0000000000628012L});
+    public static final BitSet FOLLOW_opt_eol_in_prolog125 = new BitSet(new long[]{0x0000000000738012L});
+    public static final BitSet FOLLOW_package_statement_in_prolog133 = new BitSet(new long[]{0x0000000000728012L});
+    public static final BitSet FOLLOW_extra_statement_in_prolog148 = new BitSet(new long[]{0x0000000000728012L});
+    public static final BitSet FOLLOW_expander_in_prolog154 = new BitSet(new long[]{0x0000000000728012L});
+    public static final BitSet FOLLOW_opt_eol_in_prolog166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_package_statement190 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_package_statement192 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_dotted_name_in_package_statement196 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_package_statement198 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_package_statement201 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_import_statement217 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_import_statement219 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_import_name_in_import_statement223 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_import_statement225 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_import_statement228 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_ID_in_import_name259 = new BitSet(new long[]{0x00000000000C0002L});
-    public static final BitSet FOLLOW_19_in_import_name269 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_20_in_expander289 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_dotted_name_in_expander294 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_expander298 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_expander301 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_21_in_global325 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_dotted_name_in_global329 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_global333 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_global335 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_global338 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_22_in_function362 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function364 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_dotted_name_in_function369 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function373 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_function377 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function379 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_function388 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function390 = new BitSet(new long[]{0x0000000002008032L});
-    public static final BitSet FOLLOW_dotted_name_in_function400 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function404 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_argument_in_function408 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function410 = new BitSet(new long[]{0x0000000003000000L});
-    public static final BitSet FOLLOW_24_in_function424 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function426 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_dotted_name_in_function431 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function435 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_argument_in_function439 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function441 = new BitSet(new long[]{0x0000000003000000L});
-    public static final BitSet FOLLOW_25_in_function466 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function470 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_function474 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_curly_chunk_in_function481 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_function490 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function498 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_query522 = new BitSet(new long[]{0x0000000010000000L});
-    public static final BitSet FOLLOW_28_in_query528 = new BitSet(new long[]{0x0040001AF0020120L});
-    public static final BitSet FOLLOW_word_in_query532 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_query534 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_expander_lhs_block_in_query550 = new BitSet(new long[]{0x0000000020000000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query558 = new BitSet(new long[]{0x0000000020000000L});
-    public static final BitSet FOLLOW_29_in_query573 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_query575 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_rule598 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_rule604 = new BitSet(new long[]{0x0040001AF0020120L});
-    public static final BitSet FOLLOW_word_in_rule608 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule610 = new BitSet(new long[]{0x0000000500008012L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule621 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule631 = new BitSet(new long[]{0x00000000A0008012L});
-    public static final BitSet FOLLOW_31_in_rule640 = new BitSet(new long[]{0x0000000100008012L});
-    public static final BitSet FOLLOW_32_in_rule642 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule645 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_expander_lhs_block_in_rule663 = new BitSet(new long[]{0x0000000020008012L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_rule672 = new BitSet(new long[]{0x0000000020008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule695 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_rule699 = new BitSet(new long[]{0x0000000100008012L});
-    public static final BitSet FOLLOW_32_in_rule701 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule705 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000000000000001L});
-    public static final BitSet FOLLOW_29_in_rule751 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule753 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_extra_statement773 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_extra_statement778 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_extra_statement783 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_34_in_rule_attributes802 = new BitSet(new long[]{0x0000000100008012L});
-    public static final BitSet FOLLOW_32_in_rule_attributes805 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule_attributes808 = new BitSet(new long[]{0x000001F801000002L});
-    public static final BitSet FOLLOW_24_in_rule_attributes815 = new BitSet(new long[]{0x000001F800000000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes820 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule_attributes822 = new BitSet(new long[]{0x000001F801000002L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute861 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute871 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute882 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute895 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute909 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute920 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_salience953 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_salience955 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_INT_in_salience959 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_salience961 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_salience964 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_no_loop999 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1001 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_no_loop1003 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1006 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_no_loop1031 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1035 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1037 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_no_loop1039 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1042 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_auto_focus1088 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1090 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_auto_focus1092 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1095 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_auto_focus1120 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1124 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1126 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_auto_focus1128 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1131 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_38_in_activation_group1173 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_activation_group1175 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1179 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_activation_group1181 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_activation_group1184 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_39_in_agenda_group1213 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_agenda_group1215 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1219 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_agenda_group1221 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_agenda_group1224 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_40_in_duration1256 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_duration1258 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_INT_in_duration1262 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_duration1264 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_duration1267 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1293 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1295 = new BitSet(new long[]{0x000E000000808032L});
-    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1307 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expander_lhs_block1348 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1352 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1404 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_column1432 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_column1441 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_fact_binding1473 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_binding1483 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_fact_binding1485 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_binding1487 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_binding1491 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_fact_expression1523 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression1525 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1529 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression1531 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_fact_expression1533 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_expression1544 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression1546 = new BitSet(new long[]{0x0000060000000002L});
-    public static final BitSet FOLLOW_set_in_fact_expression1559 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression1564 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_fact_in_fact_expression1578 = new BitSet(new long[]{0x0000060000000002L});
-    public static final BitSet FOLLOW_dotted_name_in_fact1617 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact1625 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_fact1633 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact1636 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_constraints_in_fact1642 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact1661 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_fact1665 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact1667 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints1699 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_constraint_in_constraints1704 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_predicate_in_constraints1707 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints1715 = new BitSet(new long[]{0x0000000001000000L});
-    public static final BitSet FOLLOW_24_in_constraints1717 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints1719 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_constraint_in_constraints1722 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_predicate_in_constraints1725 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints1733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint1752 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_constraint1760 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint1762 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_constraint1764 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint1766 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_constraint1776 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint1790 = new BitSet(new long[]{0xFF80000000008012L,0x0000000000000001L});
-    public static final BitSet FOLLOW_operator_in_constraint1796 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint1798 = new BitSet(new long[]{0x00002000008003E0L});
-    public static final BitSet FOLLOW_ID_in_constraint1816 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_enum_constraint_in_constraint1841 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_literal_constraint_in_constraint1873 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_retval_constraint_in_constraint1893 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_set_in_constraint1928 = new BitSet(new long[]{0xFF80000000000000L,0x0000000000000001L});
-    public static final BitSet FOLLOW_operator_in_constraint1950 = new BitSet(new long[]{0x00002000008003E0L});
-    public static final BitSet FOLLOW_ID_in_constraint1962 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_enum_constraint_in_constraint1990 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_literal_constraint_in_constraint2025 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_retval_constraint_in_constraint2047 = new BitSet(new long[]{0x0000180000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2103 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint2130 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint2141 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint2154 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint2165 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_45_in_literal_constraint2177 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint2208 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_18_in_enum_constraint2210 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint2214 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_retval_constraint2243 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint2248 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_retval_constraint2251 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_predicate2269 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_predicate2271 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_predicate2275 = new BitSet(new long[]{0x0000400000000000L});
-    public static final BitSet FOLLOW_46_in_predicate2277 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_predicate2279 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate2283 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_predicate2285 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_paren_chunk2331 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk2335 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_paren_chunk2337 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_23_in_paren_chunk22408 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_paren_chunk2_in_paren_chunk22412 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_paren_chunk22414 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_26_in_curly_chunk2483 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk2487 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_curly_chunk2489 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2547 = new BitSet(new long[]{0x0000060000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_or2556 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_or2561 = new BitSet(new long[]{0x000E000000800020L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2568 = new BitSet(new long[]{0x0000060000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2608 = new BitSet(new long[]{0x0001800000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_and2617 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_and2622 = new BitSet(new long[]{0x000E000000800020L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2629 = new BitSet(new long[]{0x0001800000000002L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2667 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2675 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2683 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_unary2691 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_lhs_unary2697 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2699 = new BitSet(new long[]{0x000E000000800020L});
-    public static final BitSet FOLLOW_lhs_in_lhs_unary2703 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2705 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_unary2707 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_49_in_lhs_exist2737 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_23_in_lhs_exist2740 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2744 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_exist2746 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2752 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_50_in_lhs_not2782 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_23_in_lhs_not2785 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_not2789 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_not2792 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_not2798 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_51_in_lhs_eval2824 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_lhs_eval2828 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000001L});
-    public static final BitSet FOLLOW_paren_chunk2_in_lhs_eval2836 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_eval2840 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dotted_name2872 = new BitSet(new long[]{0x0010000000040002L});
-    public static final BitSet FOLLOW_18_in_dotted_name2878 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_dotted_name2882 = new BitSet(new long[]{0x0010000000040002L});
-    public static final BitSet FOLLOW_52_in_dotted_name2891 = new BitSet(new long[]{0x0020000000000000L});
-    public static final BitSet FOLLOW_53_in_dotted_name2893 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument2923 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_52_in_argument2929 = new BitSet(new long[]{0x0020000000000000L});
-    public static final BitSet FOLLOW_53_in_argument2931 = new BitSet(new long[]{0x0010000000000002L});
-    public static final BitSet FOLLOW_ID_in_word2959 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_word2971 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_54_in_word2980 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_30_in_word2992 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_word3003 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_word3013 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_word3021 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_word3029 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_word3040 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_29_in_word3051 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_word3065 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_55_in_operator3094 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_56_in_operator3101 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_57_in_operator3108 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_58_in_operator3115 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_59_in_operator3124 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_60_in_operator3131 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_61_in_operator3138 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_62_in_operator3145 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_63_in_operator3152 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_64_in_operator3159 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_import_name265 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_import_name269 = new BitSet(new long[]{0x00000000000C0002L});
+    public static final BitSet FOLLOW_19_in_import_name279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_expander299 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_dotted_name_in_expander304 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_expander308 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_expander311 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_global335 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_dotted_name_in_global339 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_global343 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_global345 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_global348 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_function372 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function374 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_dotted_name_in_function379 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function383 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_function387 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function389 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_function398 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function400 = new BitSet(new long[]{0x0000000002008032L});
+    public static final BitSet FOLLOW_dotted_name_in_function410 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function414 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_argument_in_function418 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function420 = new BitSet(new long[]{0x0000000003000000L});
+    public static final BitSet FOLLOW_24_in_function434 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function436 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_dotted_name_in_function441 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function445 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_argument_in_function449 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function451 = new BitSet(new long[]{0x0000000003000000L});
+    public static final BitSet FOLLOW_25_in_function476 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function480 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_function484 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_curly_chunk_in_function491 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_function500 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function508 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_query532 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_28_in_query538 = new BitSet(new long[]{0x00800035B0020120L});
+    public static final BitSet FOLLOW_word_in_query542 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_query544 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_expander_lhs_block_in_query560 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query568 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_29_in_query583 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_query585 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_template609 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_template615 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_template619 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_EOL_in_template621 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_template_slot_in_template636 = new BitSet(new long[]{0x0000000020000020L});
+    public static final BitSet FOLLOW_29_in_template651 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_EOL_in_template653 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_template_slot685 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_template_slot689 = new BitSet(new long[]{0x0000000000008010L});
+    public static final BitSet FOLLOW_set_in_template_slot693 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_rule728 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_31_in_rule734 = new BitSet(new long[]{0x00800035B0020120L});
+    public static final BitSet FOLLOW_word_in_rule738 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule740 = new BitSet(new long[]{0x0000000A00008012L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule751 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule761 = new BitSet(new long[]{0x0000000120008012L});
+    public static final BitSet FOLLOW_32_in_rule770 = new BitSet(new long[]{0x0000000200008012L});
+    public static final BitSet FOLLOW_33_in_rule772 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule775 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_expander_lhs_block_in_rule793 = new BitSet(new long[]{0x0000000020008012L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_rule802 = new BitSet(new long[]{0x0000000020008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule825 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_34_in_rule829 = new BitSet(new long[]{0x0000000200008012L});
+    public static final BitSet FOLLOW_33_in_rule831 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule835 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000000000000003L});
+    public static final BitSet FOLLOW_29_in_rule881 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule883 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_extra_statement903 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_extra_statement908 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_extra_statement913 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_rule_attributes932 = new BitSet(new long[]{0x0000000200008012L});
+    public static final BitSet FOLLOW_33_in_rule_attributes935 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule_attributes938 = new BitSet(new long[]{0x000003F001000002L});
+    public static final BitSet FOLLOW_24_in_rule_attributes945 = new BitSet(new long[]{0x000003F000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes950 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule_attributes952 = new BitSet(new long[]{0x000003F001000002L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1001 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1012 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1025 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1039 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1050 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_salience1083 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_salience1085 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_INT_in_salience1089 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_salience1091 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_salience1094 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_no_loop1129 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1131 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_no_loop1133 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1136 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_no_loop1161 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1165 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1167 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_no_loop1169 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_auto_focus1218 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1220 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_auto_focus1222 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_auto_focus1250 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1254 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1256 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_auto_focus1258 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1261 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_39_in_activation_group1303 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_activation_group1305 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1309 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_activation_group1311 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_activation_group1314 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_40_in_agenda_group1343 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_agenda_group1345 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1349 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_agenda_group1351 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_agenda_group1354 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_duration1386 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_duration1388 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_INT_in_duration1392 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_duration1394 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_duration1397 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1423 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1425 = new BitSet(new long[]{0x001C000000808032L});
+    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1437 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expander_lhs_block1478 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1482 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1534 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_column1562 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_column1571 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_fact_binding1603 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_binding1613 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_fact_binding1615 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_binding1617 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_binding1621 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_fact_expression1653 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression1655 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1659 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression1661 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_fact_expression1663 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_expression1674 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression1676 = new BitSet(new long[]{0x00000C0000000002L});
+    public static final BitSet FOLLOW_set_in_fact_expression1689 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression1694 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_fact_in_fact_expression1708 = new BitSet(new long[]{0x00000C0000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_fact1747 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact1755 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_fact1763 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact1766 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_constraints_in_fact1772 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact1791 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_fact1795 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact1797 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints1829 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_constraint_in_constraints1834 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_predicate_in_constraints1837 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints1845 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_constraints1847 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints1849 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_constraint_in_constraints1852 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_predicate_in_constraints1855 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints1863 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint1882 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_constraint1890 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint1892 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_constraint1894 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint1896 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_constraint1906 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint1920 = new BitSet(new long[]{0xFF00000000008012L,0x0000000000000003L});
+    public static final BitSet FOLLOW_operator_in_constraint1926 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint1928 = new BitSet(new long[]{0x00004000008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint1946 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint1971 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint2003 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint2023 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_set_in_constraint2058 = new BitSet(new long[]{0xFF00000000000000L,0x0000000000000003L});
+    public static final BitSet FOLLOW_operator_in_constraint2080 = new BitSet(new long[]{0x00004000008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint2092 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint2120 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint2155 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint2177 = new BitSet(new long[]{0x0000300000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint2260 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint2271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint2284 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint2295 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_46_in_literal_constraint2307 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint2338 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_18_in_enum_constraint2340 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint2344 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_retval_constraint2373 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint2378 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_retval_constraint2381 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_predicate2399 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_predicate2401 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_predicate2405 = new BitSet(new long[]{0x0000800000000000L});
+    public static final BitSet FOLLOW_47_in_predicate2407 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_predicate2409 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_paren_chunk_in_predicate2413 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_predicate2415 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_paren_chunk2461 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk2465 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk2467 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_23_in_paren_chunk22538 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_paren_chunk2_in_paren_chunk22542 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk22544 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_26_in_curly_chunk2613 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk2617 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_curly_chunk2619 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or2677 = new BitSet(new long[]{0x00000C0000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_or2686 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_or2691 = new BitSet(new long[]{0x001C000000800020L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or2698 = new BitSet(new long[]{0x00000C0000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2738 = new BitSet(new long[]{0x0003000000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_and2747 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_and2752 = new BitSet(new long[]{0x001C000000800020L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2759 = new BitSet(new long[]{0x0003000000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2797 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2805 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2813 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_unary2821 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_lhs_unary2827 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2829 = new BitSet(new long[]{0x001C000000800020L});
+    public static final BitSet FOLLOW_lhs_in_lhs_unary2833 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2835 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_unary2837 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_50_in_lhs_exist2867 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_exist2870 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2874 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_exist2876 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2882 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_51_in_lhs_not2912 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_not2915 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not2919 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_not2922 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not2928 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_52_in_lhs_eval2954 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_lhs_eval2958 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000003L});
+    public static final BitSet FOLLOW_paren_chunk2_in_lhs_eval2966 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_eval2970 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dotted_name3002 = new BitSet(new long[]{0x0020000000040002L});
+    public static final BitSet FOLLOW_18_in_dotted_name3008 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_dotted_name3012 = new BitSet(new long[]{0x0020000000040002L});
+    public static final BitSet FOLLOW_53_in_dotted_name3021 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_54_in_dotted_name3023 = new BitSet(new long[]{0x0020000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument3053 = new BitSet(new long[]{0x0020000000000002L});
+    public static final BitSet FOLLOW_53_in_argument3059 = new BitSet(new long[]{0x0040000000000000L});
+    public static final BitSet FOLLOW_54_in_argument3061 = new BitSet(new long[]{0x0020000000000002L});
+    public static final BitSet FOLLOW_ID_in_word3089 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_word3101 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_55_in_word3110 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_word3122 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_word3133 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_word3143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_word3151 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_word3159 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_word3170 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_word3181 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_word3195 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_56_in_operator3224 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_57_in_operator3231 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_58_in_operator3238 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_59_in_operator3245 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_60_in_operator3254 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_61_in_operator3261 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_62_in_operator3268 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_63_in_operator3275 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_64_in_operator3282 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_operator3289 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java	2006-08-04 10:33:01 UTC (rev 5466)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java	2006-08-04 10:51:30 UTC (rev 5467)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-01 15:50:19
+// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-04 11:44:12
 
 	package org.drools.lang;
 
@@ -39,7 +39,7 @@
     public static final int T39=39;
     public static final int ID=5;
     public static final int T21=21;
-    public static final int Synpred1_fragment=66;
+    public static final int Synpred1_fragment=67;
     public static final int T62=62;
     public static final int T44=44;
     public static final int T55=55;
@@ -56,6 +56,7 @@
     public static final int T40=40;
     public static final int T63=63;
     public static final int T57=57;
+    public static final int T65=65;
     public static final int T56=56;
     public static final int T59=59;
     public static final int T48=48;
@@ -64,7 +65,7 @@
     public static final int EOF=-1;
     public static final int T47=47;
     public static final int EOL=4;
-    public static final int Tokens=65;
+    public static final int Tokens=66;
     public static final int T53=53;
     public static final int T60=60;
     public static final int T31=31;
@@ -77,7 +78,7 @@
     public RuleParserLexer() {;} 
     public RuleParserLexer(CharStream input) {
         super(input);
-        ruleMemo = new Map[63+1];
+        ruleMemo = new Map[64+1];
      }
 
 
@@ -489,10 +490,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 16) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:21:7: ( 'rule' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:21:7: 'rule'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:21:7: ( 'template' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:21:7: 'template'
             {
-            match("rule"); if (failed) return ;
+            match("template"); if (failed) return ;
 
 
             }
@@ -516,10 +517,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 17) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:22:7: ( 'when' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:22:7: 'when'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:22:7: ( 'rule' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:22:7: 'rule'
             {
-            match("when"); if (failed) return ;
+            match("rule"); if (failed) return ;
 
 
             }
@@ -543,11 +544,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 18) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:23:7: ( ':' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:23:7: ':'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:23:7: ( 'when' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:23:7: 'when'
             {
-            match(':'); if (failed) return ;
+            match("when"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -569,12 +571,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 19) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:24:7: ( 'then' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:24:7: 'then'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:24:7: ( ':' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:24:7: ':'
             {
-            match("then"); if (failed) return ;
+            match(':'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -596,10 +597,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 20) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:25:7: ( 'attributes' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:25:7: 'attributes'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:25:7: ( 'then' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:25:7: 'then'
             {
-            match("attributes"); if (failed) return ;
+            match("then"); if (failed) return ;
 
 
             }
@@ -623,10 +624,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 21) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:26:7: ( 'salience' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:26:7: 'salience'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:26:7: ( 'attributes' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:26:7: 'attributes'
             {
-            match("salience"); if (failed) return ;
+            match("attributes"); if (failed) return ;
 
 
             }
@@ -650,10 +651,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 22) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:27:7: ( 'no-loop' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:27:7: 'no-loop'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:27:7: ( 'salience' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:27:7: 'salience'
             {
-            match("no-loop"); if (failed) return ;
+            match("salience"); if (failed) return ;
 
 
             }
@@ -677,10 +678,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 23) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:28:7: ( 'auto-focus' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:28:7: 'auto-focus'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:28:7: ( 'no-loop' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:28:7: 'no-loop'
             {
-            match("auto-focus"); if (failed) return ;
+            match("no-loop"); if (failed) return ;
 
 
             }
@@ -704,10 +705,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 24) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:29:7: ( 'activation-group' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:29:7: 'activation-group'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:29:7: ( 'auto-focus' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:29:7: 'auto-focus'
             {
-            match("activation-group"); if (failed) return ;
+            match("auto-focus"); if (failed) return ;
 
 
             }
@@ -731,10 +732,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 25) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:30:7: ( 'agenda-group' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:30:7: 'agenda-group'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:30:7: ( 'activation-group' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:30:7: 'activation-group'
             {
-            match("agenda-group"); if (failed) return ;
+            match("activation-group"); if (failed) return ;
 
 
             }
@@ -758,10 +759,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 26) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:31:7: ( 'duration' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:31:7: 'duration'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:31:7: ( 'agenda-group' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:31:7: 'agenda-group'
             {
-            match("duration"); if (failed) return ;
+            match("agenda-group"); if (failed) return ;
 
 
             }
@@ -785,10 +786,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 27) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:32:7: ( 'or' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:32:7: 'or'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:32:7: ( 'duration' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:32:7: 'duration'
             {
-            match("or"); if (failed) return ;
+            match("duration"); if (failed) return ;
 
 
             }
@@ -812,10 +813,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 28) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:33:7: ( '||' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:33:7: '||'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:33:7: ( 'or' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:33:7: 'or'
             {
-            match("||"); if (failed) return ;
+            match("or"); if (failed) return ;
 
 
             }
@@ -839,11 +840,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 29) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: ( '&' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: '&'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: ( '||' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: '||'
             {
-            match('&'); if (failed) return ;
+            match("||"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -865,10 +867,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 30) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: ( '|' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: '|'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: ( '&' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: '&'
             {
-            match('|'); if (failed) return ;
+            match('&'); if (failed) return ;
 
             }
 
@@ -891,12 +893,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 31) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: ( 'null' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: 'null'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: ( '|' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: '|'
             {
-            match("null"); if (failed) return ;
+            match('|'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -918,10 +919,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 32) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: ( '->' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: '->'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: ( 'null' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: 'null'
             {
-            match("->"); if (failed) return ;
+            match("null"); if (failed) return ;
 
 
             }
@@ -945,10 +946,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 33) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: ( 'and' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: 'and'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: ( '->' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: '->'
             {
-            match("and"); if (failed) return ;
+            match("->"); if (failed) return ;
 
 
             }
@@ -972,10 +973,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 34) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: ( '&&' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: '&&'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: ( 'and' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: 'and'
             {
-            match("&&"); if (failed) return ;
+            match("and"); if (failed) return ;
 
 
             }
@@ -999,10 +1000,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 35) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: ( 'exists' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: 'exists'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: ( '&&' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: '&&'
             {
-            match("exists"); if (failed) return ;
+            match("&&"); if (failed) return ;
 
 
             }
@@ -1026,10 +1027,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 36) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: ( 'not' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: 'not'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: ( 'exists' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: 'exists'
             {
-            match("not"); if (failed) return ;
+            match("exists"); if (failed) return ;
 
 
             }
@@ -1053,10 +1054,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 37) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: ( 'eval' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: 'eval'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: ( 'not' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: 'not'
             {
-            match("eval"); if (failed) return ;
+            match("not"); if (failed) return ;
 
 
             }
@@ -1080,11 +1081,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 38) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: ( '[' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: '['
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: ( 'eval' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: 'eval'
             {
-            match('['); if (failed) return ;
+            match("eval"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1106,10 +1108,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 39) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: ( ']' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: ']'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: ( '[' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: '['
             {
-            match(']'); if (failed) return ;
+            match('['); if (failed) return ;
 
             }
 
@@ -1132,12 +1134,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 40) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: ( 'use' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: 'use'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: ( ']' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: ']'
             {
-            match("use"); if (failed) return ;
+            match(']'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1159,10 +1160,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 41) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: ( '==' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: '=='
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: ( 'use' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: 'use'
             {
-            match("=="); if (failed) return ;
+            match("use"); if (failed) return ;
 
 
             }
@@ -1186,11 +1187,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 42) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: ( '=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: '='
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: ( '==' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: '=='
             {
-            match('='); if (failed) return ;
+            match("=="); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1212,10 +1214,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 43) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:48:7: ( '>' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:48:7: '>'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:48:7: ( '=' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:48:7: '='
             {
-            match('>'); if (failed) return ;
+            match('='); if (failed) return ;
 
             }
 
@@ -1238,12 +1240,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 44) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: ( '>=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: '>='
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: ( '>' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: '>'
             {
-            match(">="); if (failed) return ;
+            match('>'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1265,11 +1266,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 45) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: ( '<' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: '<'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: ( '>=' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: '>='
             {
-            match('<'); if (failed) return ;
+            match(">="); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1291,12 +1293,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 46) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:51:7: ( '<=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:51:7: '<='
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:51:7: ( '<' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:51:7: '<'
             {
-            match("<="); if (failed) return ;
+            match('<'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1318,10 +1319,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 47) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: ( '!=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: '!='
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: ( '<=' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: '<='
             {
-            match("!="); if (failed) return ;
+            match("<="); if (failed) return ;
 
 
             }
@@ -1345,10 +1346,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 48) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: ( 'contains' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: 'contains'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: ( '!=' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: '!='
             {
-            match("contains"); if (failed) return ;
+            match("!="); if (failed) return ;
 
 
             }
@@ -1372,10 +1373,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 49) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:54:7: ( 'matches' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:54:7: 'matches'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:54:7: ( 'contains' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:54:7: 'contains'
             {
-            match("matches"); if (failed) return ;
+            match("contains"); if (failed) return ;
 
 
             }
@@ -1399,10 +1400,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 50) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:55:7: ( 'excludes' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:55:7: 'excludes'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:55:7: ( 'matches' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:55:7: 'matches'
             {
-            match("excludes"); if (failed) return ;
+            match("matches"); if (failed) return ;
 
 
             }
@@ -1416,6 +1417,33 @@
     // $ANTLR end T64
 
 
+    // $ANTLR start T65
+    public void mT65() throws RecognitionException {
+        int T65_StartIndex = input.index();
+        try {
+            int type = T65;
+            int start = getCharIndex();
+            int line = getLine();
+            int charPosition = getCharPositionInLine();
+            int channel = Token.DEFAULT_CHANNEL;
+            if ( backtracking>0 && alreadyParsedRule(input, 51) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:56:7: ( 'excludes' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:56:7: 'excludes'
+            {
+            match("excludes"); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 51, T65_StartIndex); }
+        }
+    }
+    // $ANTLR end T65
+
+
     // $ANTLR start MISC
     public void mMISC() throws RecognitionException {
         int MISC_StartIndex = input.index();
@@ -1425,8 +1453,8 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 51) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
+            if ( backtracking>0 && alreadyParsedRule(input, 52) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
             int alt1=39;
             switch ( input.LA(1) ) {
             case '!':
@@ -1515,21 +1543,21 @@
                 break;
             case '=':
                 switch ( input.LA(2) ) {
-                case '-':
-                    alt1=34;
+                case '/':
+                    alt1=38;
                     break;
+                case '*':
+                    alt1=36;
+                    break;
                 case '+':
                     alt1=32;
                     break;
-                case '*':
-                    alt1=36;
+                case '-':
+                    alt1=34;
                     break;
                 case '=':
                     alt1=30;
                     break;
-                case '/':
-                    alt1=38;
-                    break;
                 default:
                     alt1=18;}
 
@@ -1570,7 +1598,7 @@
                     else {
                         if (backtracking>0) {failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1079:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
+                            new NoViableAltException("1115:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
 
                         throw nvae;
                     }
@@ -1578,7 +1606,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1079:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
+                        new NoViableAltException("1115:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
 
                     throw nvae;
                 }
@@ -1586,175 +1614,175 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1079:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 0, input);
+                    new NoViableAltException("1115:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 0, input);
 
                 throw nvae;
             }
 
             switch (alt1) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:17: '!'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:17: '!'
                     {
                     match('!'); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:23: '@'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:23: '@'
                     {
                     match('@'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:29: '$'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:29: '$'
                     {
                     match('$'); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:35: '%'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:35: '%'
                     {
                     match('%'); if (failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:41: '^'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:41: '^'
                     {
                     match('^'); if (failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:47: '&'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:47: '&'
                     {
                     match('&'); if (failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:53: '*'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:53: '*'
                     {
                     match('*'); if (failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:59: '_'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:59: '_'
                     {
                     match('_'); if (failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:65: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:65: '-'
                     {
                     match('-'); if (failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:71: '+'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:71: '+'
                     {
                     match('+'); if (failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:78: '?'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1116:78: '?'
                     {
                     match('?'); if (failed) return ;
 
                     }
                     break;
                 case 12 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:19: '|'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:19: '|'
                     {
                     match('|'); if (failed) return ;
 
                     }
                     break;
                 case 13 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:25: ','
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:25: ','
                     {
                     match(','); if (failed) return ;
 
                     }
                     break;
                 case 14 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:31: '{'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:31: '{'
                     {
                     match('{'); if (failed) return ;
 
                     }
                     break;
                 case 15 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:37: '}'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:37: '}'
                     {
                     match('}'); if (failed) return ;
 
                     }
                     break;
                 case 16 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:43: '['
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:43: '['
                     {
                     match('['); if (failed) return ;
 
                     }
                     break;
                 case 17 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:49: ']'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:49: ']'
                     {
                     match(']'); if (failed) return ;
 
                     }
                     break;
                 case 18 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:55: '='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:55: '='
                     {
                     match('='); if (failed) return ;
 
                     }
                     break;
                 case 19 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:61: '/'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:61: '/'
                     {
                     match('/'); if (failed) return ;
 
                     }
                     break;
                 case 20 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:67: '('
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:67: '('
                     {
                     match('('); if (failed) return ;
 
                     }
                     break;
                 case 21 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:73: ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:73: ')'
                     {
                     match(')'); if (failed) return ;
 
                     }
                     break;
                 case 22 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:79: '\''
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:79: '\''
                     {
                     match('\''); if (failed) return ;
 
                     }
                     break;
                 case 23 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:86: '\\'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:86: '\\'
                     {
                     match('\\'); if (failed) return ;
 
                     }
                     break;
                 case 24 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:19: '||'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:19: '||'
                     {
                     match("||"); if (failed) return ;
 
@@ -1762,7 +1790,7 @@
                     }
                     break;
                 case 25 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:26: '&&'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:26: '&&'
                     {
                     match("&&"); if (failed) return ;
 
@@ -1770,7 +1798,7 @@
                     }
                     break;
                 case 26 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:33: '<<<'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:33: '<<<'
                     {
                     match("<<<"); if (failed) return ;
 
@@ -1778,7 +1806,7 @@
                     }
                     break;
                 case 27 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:41: '++'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:41: '++'
                     {
                     match("++"); if (failed) return ;
 
@@ -1786,7 +1814,7 @@
                     }
                     break;
                 case 28 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:48: '--'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:48: '--'
                     {
                     match("--"); if (failed) return ;
 
@@ -1794,7 +1822,7 @@
                     }
                     break;
                 case 29 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:55: '>>>'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:55: '>>>'
                     {
                     match(">>>"); if (failed) return ;
 
@@ -1802,7 +1830,7 @@
                     }
                     break;
                 case 30 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:63: '=='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:63: '=='
                     {
                     match("=="); if (failed) return ;
 
@@ -1810,7 +1838,7 @@
                     }
                     break;
                 case 31 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:70: '+='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:70: '+='
                     {
                     match("+="); if (failed) return ;
 
@@ -1818,7 +1846,7 @@
                     }
                     break;
                 case 32 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:77: '=+'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:77: '=+'
                     {
                     match("=+"); if (failed) return ;
 
@@ -1826,7 +1854,7 @@
                     }
                     break;
                 case 33 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:84: '-='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:84: '-='
                     {
                     match("-="); if (failed) return ;
 
@@ -1834,7 +1862,7 @@
                     }
                     break;
                 case 34 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:91: '=-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:91: '=-'
                     {
                     match("=-"); if (failed) return ;
 
@@ -1842,7 +1870,7 @@
                     }
                     break;
                 case 35 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:97: '*='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:97: '*='
                     {
                     match("*="); if (failed) return ;
 
@@ -1850,7 +1878,7 @@
                     }
                     break;
                 case 36 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:104: '=*'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:104: '=*'
                     {
                     match("=*"); if (failed) return ;
 
@@ -1858,7 +1886,7 @@
                     }
                     break;
                 case 37 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1083:19: '/='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1119:19: '/='
                     {
                     match("/="); if (failed) return ;
 
@@ -1866,7 +1894,7 @@
                     }
                     break;
                 case 38 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1083:26: '=/'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1119:26: '=/'
                     {
                     match("=/"); if (failed) return ;
 
@@ -1874,7 +1902,7 @@
                     }
                     break;
                 case 39 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1083:33: '>>='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1119:33: '>>='
                     {
                     match(">>="); if (failed) return ;
 
@@ -1886,7 +1914,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 51, MISC_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 52, MISC_StartIndex); }
         }
     }
     // $ANTLR end MISC
@@ -1901,9 +1929,9 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 52) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1087:17: ( (' '|'\t'|'\f'))
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1087:17: (' '|'\t'|'\f')
+            if ( backtracking>0 && alreadyParsedRule(input, 53) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:17: ( (' '|'\t'|'\f'))
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:17: (' '|'\t'|'\f')
             {
             if ( input.LA(1)=='\t'||input.LA(1)=='\f'||input.LA(1)==' ' ) {
                 input.consume();
@@ -1925,7 +1953,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 52, WS_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 53, WS_StartIndex); }
         }
     }
     // $ANTLR end WS
@@ -1940,11 +1968,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 53) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1095:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1095:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            if ( backtracking>0 && alreadyParsedRule(input, 54) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1131:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1131:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1095:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1131:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
             if ( LA2_0=='\r' ) {
@@ -1961,13 +1989,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1095:17: ( ( \'\\r\\n\' )=> \'\\r\\n\' | \'\\r\' | \'\\n\' )", 2, 0, input);
+                    new NoViableAltException("1131:17: ( ( \'\\r\\n\' )=> \'\\r\\n\' | \'\\r\' | \'\\n\' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1095:25: ( '\r\n' )=> '\r\n'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1131:25: ( '\r\n' )=> '\r\n'
                     {
 
                     match("\r\n"); if (failed) return ;
@@ -1976,14 +2004,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1096:25: '\r'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1132:25: '\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1097:25: '\n'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1133:25: '\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -1998,7 +2026,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 53, EOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 54, EOL_StartIndex); }
         }
     }
     // $ANTLR end EOL
@@ -2013,11 +2041,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 54) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:17: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:17: ( '-' )? ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 55) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1138:17: ( ( '-' )? ( '0' .. '9' )+ )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1138:17: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:17: ( '-' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1138:17: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
             if ( LA3_0=='-' ) {
@@ -2029,13 +2057,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1102:17: ( \'-\' )?", 3, 0, input);
+                    new NoViableAltException("1138:17: ( \'-\' )?", 3, 0, input);
 
                 throw nvae;
             }
             switch (alt3) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:18: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1138:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -2044,7 +2072,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:23: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1138:23: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -2057,7 +2085,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:24: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1138:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2080,7 +2108,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 54, INT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 55, INT_StartIndex); }
         }
     }
     // $ANTLR end INT
@@ -2095,11 +2123,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 55) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:17: ( '-' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:17: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
             if ( LA5_0=='-' ) {
@@ -2111,13 +2139,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1106:17: ( \'-\' )?", 5, 0, input);
+                    new NoViableAltException("1142:17: ( \'-\' )?", 5, 0, input);
 
                 throw nvae;
             }
             switch (alt5) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:18: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -2126,7 +2154,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:23: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:23: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -2139,7 +2167,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:24: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2157,7 +2185,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:39: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:39: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -2170,7 +2198,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1106:40: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:40: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2193,7 +2221,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 55, FLOAT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 56, FLOAT_StartIndex); }
         }
     }
     // $ANTLR end FLOAT
@@ -2208,8 +2236,8 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
+            if ( backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
             if ( LA10_0=='"' ) {
@@ -2221,19 +2249,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1109:1: STRING : ( ( \'\"\' ( options {greedy=false; } : . )* \'\"\' ) | ( \'\\\'\' ( options {greedy=false; } : . )* \'\\\'\' ) );", 10, 0, input);
+                    new NoViableAltException("1145:1: STRING : ( ( \'\"\' ( options {greedy=false; } : . )* \'\"\' ) | ( \'\\\'\' ( options {greedy=false; } : . )* \'\\\'\' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:17: ( '"' ( options {greedy=false; } : . )* '"' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:17: ( '"' ( options {greedy=false; } : . )* '"' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:18: '"' ( options {greedy=false; } : . )* '"'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:18: '"' ( options {greedy=false; } : . )* '"'
                     {
                     match('"'); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:22: ( options {greedy=false; } : . )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:22: ( options {greedy=false; } : . )*
                     loop8:
                     do {
                         int alt8=2;
@@ -2248,7 +2276,7 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:49: .
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:49: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2268,13 +2296,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:62: '\'' ( options {greedy=false; } : . )* '\''
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:62: '\'' ( options {greedy=false; } : . )* '\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:67: ( options {greedy=false; } : . )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:67: ( options {greedy=false; } : . )*
                     loop9:
                     do {
                         int alt9=2;
@@ -2289,7 +2317,7 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:94: .
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:94: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2313,7 +2341,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 56, STRING_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 57, STRING_StartIndex); }
         }
     }
     // $ANTLR end STRING
@@ -2328,11 +2356,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1114:17: ( ( 'true' | 'false' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1114:17: ( 'true' | 'false' )
+            if ( backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1150:17: ( ( 'true' | 'false' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1150:17: ( 'true' | 'false' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1114:17: ( 'true' | 'false' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1150:17: ( 'true' | 'false' )
             int alt11=2;
             int LA11_0 = input.LA(1);
             if ( LA11_0=='t' ) {
@@ -2344,13 +2372,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1114:17: ( \'true\' | \'false\' )", 11, 0, input);
+                    new NoViableAltException("1150:17: ( \'true\' | \'false\' )", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1114:18: 'true'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1150:18: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -2358,7 +2386,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1114:25: 'false'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1150:25: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -2374,7 +2402,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 57, BOOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 58, BOOL_StartIndex); }
         }
     }
     // $ANTLR end BOOL
@@ -2389,9 +2417,9 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:17: ( ('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff') ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:17: ('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff') ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            if ( backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:17: ( ('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff') ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:17: ('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();
@@ -2404,7 +2432,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
             loop12:
             do {
                 int alt12=2;
@@ -2416,7 +2444,7 @@
 
                 switch (alt12) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:66: ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:66: ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')
             	    {
             	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(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();
@@ -2444,7 +2472,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 58, ID_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 59, ID_StartIndex); }
         }
     }
     // $ANTLR end ID
@@ -2459,12 +2487,12 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:17: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:17: '#' ( options {greedy=false; } : . )* EOL
+            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1160:17: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1160:17: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:21: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1160:21: ( options {greedy=false; } : . )*
             loop13:
             do {
                 int alt13=2;
@@ -2482,7 +2510,7 @@
 
                 switch (alt13) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:48: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1160:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2504,7 +2532,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 59, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 60, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end SH_STYLE_SINGLE_LINE_COMMENT
@@ -2519,13 +2547,13 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1129:17: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1129:17: '//' ( options {greedy=false; } : . )* EOL
+            if ( backtracking>0 && alreadyParsedRule(input, 61) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1166:17: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1166:17: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1129:22: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1166:22: ( options {greedy=false; } : . )*
             loop14:
             do {
                 int alt14=2;
@@ -2543,7 +2571,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1129:49: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1166:49: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2565,7 +2593,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 60, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 61, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
@@ -2580,13 +2608,13 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 61) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1134:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1134:17: '/*' ( options {greedy=false; } : . )* '*/'
+            if ( backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1171:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1171:17: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1134:22: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1171:22: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2609,7 +2637,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1134:48: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1171:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2632,14 +2660,14 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 61, MULTI_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 62, MULTI_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end MULTI_LINE_COMMENT
 
     public void mTokens() throws RecognitionException {
-        // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:10: ( T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | MISC | WS | EOL | INT | FLOAT | STRING | BOOL | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT )
-        int alt16=61;
+        // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:10: ( T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | MISC | WS | EOL | INT | FLOAT | STRING | BOOL | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT )
+        int alt16=62;
         alt16 = dfa16.predict(input); if (failed) return ;
         switch (alt16) {
             case 1 :
@@ -2993,78 +3021,85 @@
                 }
                 break;
             case 51 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:210: MISC
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:210: T65
                 {
-                mMISC(); if (failed) return ;
+                mT65(); if (failed) return ;
 
                 }
                 break;
             case 52 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:215: WS
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:214: MISC
                 {
-                mWS(); if (failed) return ;
+                mMISC(); if (failed) return ;
 
                 }
                 break;
             case 53 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:218: EOL
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:219: WS
                 {
-                mEOL(); if (failed) return ;
+                mWS(); if (failed) return ;
 
                 }
                 break;
             case 54 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:222: INT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:222: EOL
                 {
-                mINT(); if (failed) return ;
+                mEOL(); if (failed) return ;
 
                 }
                 break;
             case 55 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:226: FLOAT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:226: INT
                 {
-                mFLOAT(); if (failed) return ;
+                mINT(); if (failed) return ;
 
                 }
                 break;
             case 56 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:232: STRING
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:230: FLOAT
                 {
-                mSTRING(); if (failed) return ;
+                mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 57 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:239: BOOL
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:236: STRING
                 {
-                mBOOL(); if (failed) return ;
+                mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 58 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:244: ID
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:243: BOOL
                 {
-                mID(); if (failed) return ;
+                mBOOL(); if (failed) return ;
 
                 }
                 break;
             case 59 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:247: SH_STYLE_SINGLE_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:248: ID
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mID(); if (failed) return ;
 
                 }
                 break;
             case 60 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:276: C_STYLE_SINGLE_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:251: SH_STYLE_SINGLE_LINE_COMMENT
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 61 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:304: MULTI_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:280: C_STYLE_SINGLE_LINE_COMMENT
                 {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 62 :
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:308: MULTI_LINE_COMMENT
+                {
                 mMULTI_LINE_COMMENT(); if (failed) return ;
 
                 }
@@ -3079,9 +3114,9 @@
     public void mSynpred1_fragment() throws RecognitionException {
         int Synpred1_fragment_StartIndex = input.index();
         try {
-            if ( backtracking>0 && alreadyParsedRule(input, 63) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1095:25: ( '\r\n' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1095:27: '\r\n'
+            if ( backtracking>0 && alreadyParsedRule(input, 64) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1131:25: ( '\r\n' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1131:27: '\r\n'
             {
             match("\r\n"); if (failed) return ;
 
@@ -3090,7 +3125,7 @@
 
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 63, Synpred1_fragment_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 64, Synpred1_fragment_StartIndex); }
         }
     }
     // $ANTLR end Synpred1_fragment
@@ -3107,44 +3142,44 @@
             return predict(input, s0);
         }
         DFA.State s1 = new DFA.State() {{alt=1;}};
-        DFA.State s467 = new DFA.State() {{alt=2;}};
-        DFA.State s51 = new DFA.State() {{alt=58;}};
-        DFA.State s428 = new DFA.State() {
+        DFA.State s483 = new DFA.State() {{alt=2;}};
+        DFA.State s51 = new DFA.State() {{alt=59;}};
+        DFA.State s441 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_428 = input.LA(1);
-                if ( (LA16_428>='0' && LA16_428<='9')||(LA16_428>='A' && LA16_428<='Z')||LA16_428=='_'||(LA16_428>='a' && LA16_428<='z')||(LA16_428>='\u00C0' && LA16_428<='\u00FF') ) {return s51;}
-                return s467;
+                int LA16_441 = input.LA(1);
+                if ( (LA16_441>='0' && LA16_441<='9')||(LA16_441>='A' && LA16_441<='Z')||LA16_441=='_'||(LA16_441>='a' && LA16_441<='z')||(LA16_441>='\u00C0' && LA16_441<='\u00FF') ) {return s51;}
+                return s483;
 
             }
         };
-        DFA.State s382 = new DFA.State() {
+        DFA.State s392 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_382 = input.LA(1);
-                if ( LA16_382=='e' ) {return s428;}
+                int LA16_392 = input.LA(1);
+                if ( LA16_392=='e' ) {return s441;}
                 return s51;
 
             }
         };
-        DFA.State s319 = new DFA.State() {
+        DFA.State s326 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_319 = input.LA(1);
-                if ( LA16_319=='g' ) {return s382;}
+                int LA16_326 = input.LA(1);
+                if ( LA16_326=='g' ) {return s392;}
                 return s51;
 
             }
         };
-        DFA.State s242 = new DFA.State() {
+        DFA.State s246 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_242 = input.LA(1);
-                if ( LA16_242=='a' ) {return s319;}
+                int LA16_246 = input.LA(1);
+                if ( LA16_246=='a' ) {return s326;}
                 return s51;
 
             }
         };
-        DFA.State s159 = new DFA.State() {
+        DFA.State s160 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_159 = input.LA(1);
-                if ( LA16_159=='k' ) {return s242;}
+                int LA16_160 = input.LA(1);
+                if ( LA16_160=='k' ) {return s246;}
                 return s51;
 
             }
@@ -3152,7 +3187,7 @@
         DFA.State s53 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_53 = input.LA(1);
-                if ( LA16_53=='c' ) {return s159;}
+                if ( LA16_53=='c' ) {return s160;}
                 return s51;
 
             }
@@ -3165,35 +3200,35 @@
 
             }
         };
-        DFA.State s431 = new DFA.State() {{alt=3;}};
-        DFA.State s385 = new DFA.State() {
+        DFA.State s444 = new DFA.State() {{alt=3;}};
+        DFA.State s395 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_385 = input.LA(1);
-                if ( (LA16_385>='0' && LA16_385<='9')||(LA16_385>='A' && LA16_385<='Z')||LA16_385=='_'||(LA16_385>='a' && LA16_385<='z')||(LA16_385>='\u00C0' && LA16_385<='\u00FF') ) {return s51;}
-                return s431;
+                int LA16_395 = input.LA(1);
+                if ( (LA16_395>='0' && LA16_395<='9')||(LA16_395>='A' && LA16_395<='Z')||LA16_395=='_'||(LA16_395>='a' && LA16_395<='z')||(LA16_395>='\u00C0' && LA16_395<='\u00FF') ) {return s51;}
+                return s444;
 
             }
         };
-        DFA.State s322 = new DFA.State() {
+        DFA.State s329 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_322 = input.LA(1);
-                if ( LA16_322=='t' ) {return s385;}
+                int LA16_329 = input.LA(1);
+                if ( LA16_329=='t' ) {return s395;}
                 return s51;
 
             }
         };
-        DFA.State s245 = new DFA.State() {
+        DFA.State s249 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_245 = input.LA(1);
-                if ( LA16_245=='r' ) {return s322;}
+                int LA16_249 = input.LA(1);
+                if ( LA16_249=='r' ) {return s329;}
                 return s51;
 
             }
         };
-        DFA.State s162 = new DFA.State() {
+        DFA.State s163 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_162 = input.LA(1);
-                if ( LA16_162=='o' ) {return s245;}
+                int LA16_163 = input.LA(1);
+                if ( LA16_163=='o' ) {return s249;}
                 return s51;
 
             }
@@ -3201,7 +3236,7 @@
         DFA.State s56 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_56 = input.LA(1);
-                if ( LA16_56=='p' ) {return s162;}
+                if ( LA16_56=='p' ) {return s163;}
                 return s51;
 
             }
@@ -3224,133 +3259,133 @@
 
             }
         };
-        DFA.State s495 = new DFA.State() {{alt=6;}};
-        DFA.State s469 = new DFA.State() {
+        DFA.State s514 = new DFA.State() {{alt=51;}};
+        DFA.State s485 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_469 = input.LA(1);
-                if ( (LA16_469>='0' && LA16_469<='9')||(LA16_469>='A' && LA16_469<='Z')||LA16_469=='_'||(LA16_469>='a' && LA16_469<='z')||(LA16_469>='\u00C0' && LA16_469<='\u00FF') ) {return s51;}
-                return s495;
+                int LA16_485 = input.LA(1);
+                if ( (LA16_485>='0' && LA16_485<='9')||(LA16_485>='A' && LA16_485<='Z')||LA16_485=='_'||(LA16_485>='a' && LA16_485<='z')||(LA16_485>='\u00C0' && LA16_485<='\u00FF') ) {return s51;}
+                return s514;
 
             }
         };
-        DFA.State s433 = new DFA.State() {
+        DFA.State s446 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_433 = input.LA(1);
-                if ( LA16_433=='r' ) {return s469;}
+                int LA16_446 = input.LA(1);
+                if ( LA16_446=='s' ) {return s485;}
                 return s51;
 
             }
         };
-        DFA.State s388 = new DFA.State() {
+        DFA.State s398 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_388 = input.LA(1);
-                if ( LA16_388=='e' ) {return s433;}
+                int LA16_398 = input.LA(1);
+                if ( LA16_398=='e' ) {return s446;}
                 return s51;
 
             }
         };
-        DFA.State s325 = new DFA.State() {
+        DFA.State s332 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_325 = input.LA(1);
-                if ( LA16_325=='d' ) {return s388;}
+                int LA16_332 = input.LA(1);
+                if ( LA16_332=='d' ) {return s398;}
                 return s51;
 
             }
         };
-        DFA.State s248 = new DFA.State() {
+        DFA.State s252 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_248 = input.LA(1);
-                if ( LA16_248=='n' ) {return s325;}
+                int LA16_252 = input.LA(1);
+                if ( LA16_252=='u' ) {return s332;}
                 return s51;
 
             }
         };
-        DFA.State s165 = new DFA.State() {
+        DFA.State s166 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_165 = input.LA(1);
-                if ( LA16_165=='a' ) {return s248;}
+                int LA16_166 = input.LA(1);
+                if ( LA16_166=='l' ) {return s252;}
                 return s51;
 
             }
         };
-        DFA.State s436 = new DFA.State() {{alt=35;}};
-        DFA.State s391 = new DFA.State() {
+        DFA.State s516 = new DFA.State() {{alt=6;}};
+        DFA.State s488 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_391 = input.LA(1);
-                if ( (LA16_391>='0' && LA16_391<='9')||(LA16_391>='A' && LA16_391<='Z')||LA16_391=='_'||(LA16_391>='a' && LA16_391<='z')||(LA16_391>='\u00C0' && LA16_391<='\u00FF') ) {return s51;}
-                return s436;
+                int LA16_488 = input.LA(1);
+                if ( (LA16_488>='0' && LA16_488<='9')||(LA16_488>='A' && LA16_488<='Z')||LA16_488=='_'||(LA16_488>='a' && LA16_488<='z')||(LA16_488>='\u00C0' && LA16_488<='\u00FF') ) {return s51;}
+                return s516;
 
             }
         };
-        DFA.State s328 = new DFA.State() {
+        DFA.State s449 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_328 = input.LA(1);
-                if ( LA16_328=='s' ) {return s391;}
+                int LA16_449 = input.LA(1);
+                if ( LA16_449=='r' ) {return s488;}
                 return s51;
 
             }
         };
-        DFA.State s251 = new DFA.State() {
+        DFA.State s401 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_251 = input.LA(1);
-                if ( LA16_251=='t' ) {return s328;}
+                int LA16_401 = input.LA(1);
+                if ( LA16_401=='e' ) {return s449;}
                 return s51;
 
             }
         };
-        DFA.State s166 = new DFA.State() {
+        DFA.State s335 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_166 = input.LA(1);
-                if ( LA16_166=='s' ) {return s251;}
+                int LA16_335 = input.LA(1);
+                if ( LA16_335=='d' ) {return s401;}
                 return s51;
 
             }
         };
-        DFA.State s497 = new DFA.State() {{alt=50;}};
-        DFA.State s472 = new DFA.State() {
+        DFA.State s255 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_472 = input.LA(1);
-                if ( (LA16_472>='0' && LA16_472<='9')||(LA16_472>='A' && LA16_472<='Z')||LA16_472=='_'||(LA16_472>='a' && LA16_472<='z')||(LA16_472>='\u00C0' && LA16_472<='\u00FF') ) {return s51;}
-                return s497;
+                int LA16_255 = input.LA(1);
+                if ( LA16_255=='n' ) {return s335;}
+                return s51;
 
             }
         };
-        DFA.State s438 = new DFA.State() {
+        DFA.State s167 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_438 = input.LA(1);
-                if ( LA16_438=='s' ) {return s472;}
+                int LA16_167 = input.LA(1);
+                if ( LA16_167=='a' ) {return s255;}
                 return s51;
 
             }
         };
-        DFA.State s394 = new DFA.State() {
+        DFA.State s452 = new DFA.State() {{alt=36;}};
+        DFA.State s404 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_394 = input.LA(1);
-                if ( LA16_394=='e' ) {return s438;}
-                return s51;
+                int LA16_404 = input.LA(1);
+                if ( (LA16_404>='0' && LA16_404<='9')||(LA16_404>='A' && LA16_404<='Z')||LA16_404=='_'||(LA16_404>='a' && LA16_404<='z')||(LA16_404>='\u00C0' && LA16_404<='\u00FF') ) {return s51;}
+                return s452;
 
             }
         };
-        DFA.State s331 = new DFA.State() {
+        DFA.State s338 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_331 = input.LA(1);
-                if ( LA16_331=='d' ) {return s394;}
+                int LA16_338 = input.LA(1);
+                if ( LA16_338=='s' ) {return s404;}
                 return s51;
 
             }
         };
-        DFA.State s254 = new DFA.State() {
+        DFA.State s258 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_254 = input.LA(1);
-                if ( LA16_254=='u' ) {return s331;}
+                int LA16_258 = input.LA(1);
+                if ( LA16_258=='t' ) {return s338;}
                 return s51;
 
             }
         };
-        DFA.State s167 = new DFA.State() {
+        DFA.State s168 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_167 = input.LA(1);
-                if ( LA16_167=='l' ) {return s254;}
+                int LA16_168 = input.LA(1);
+                if ( LA16_168=='s' ) {return s258;}
                 return s51;
 
             }
@@ -3358,50 +3393,50 @@
         DFA.State s61 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 'c':
+                    return s166;
+
                 case 'p':
-                    return s165;
+                    return s167;
 
                 case 'i':
-                    return s166;
+                    return s168;
 
-                case 'c':
-                    return s167;
-
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s257 = new DFA.State() {{alt=15;}};
-        DFA.State s170 = new DFA.State() {
+        DFA.State s261 = new DFA.State() {{alt=15;}};
+        DFA.State s171 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_170 = input.LA(1);
-                if ( (LA16_170>='0' && LA16_170<='9')||(LA16_170>='A' && LA16_170<='Z')||LA16_170=='_'||(LA16_170>='a' && LA16_170<='z')||(LA16_170>='\u00C0' && LA16_170<='\u00FF') ) {return s51;}
-                return s257;
+                int LA16_171 = input.LA(1);
+                if ( (LA16_171>='0' && LA16_171<='9')||(LA16_171>='A' && LA16_171<='Z')||LA16_171=='_'||(LA16_171>='a' && LA16_171<='z')||(LA16_171>='\u00C0' && LA16_171<='\u00FF') ) {return s51;}
+                return s261;
 
             }
         };
         DFA.State s62 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_62 = input.LA(1);
-                if ( LA16_62=='d' ) {return s170;}
+                if ( LA16_62=='d' ) {return s171;}
                 return s51;
 
             }
         };
-        DFA.State s334 = new DFA.State() {{alt=37;}};
-        DFA.State s259 = new DFA.State() {
+        DFA.State s341 = new DFA.State() {{alt=38;}};
+        DFA.State s263 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_259 = input.LA(1);
-                if ( (LA16_259>='0' && LA16_259<='9')||(LA16_259>='A' && LA16_259<='Z')||LA16_259=='_'||(LA16_259>='a' && LA16_259<='z')||(LA16_259>='\u00C0' && LA16_259<='\u00FF') ) {return s51;}
-                return s334;
+                int LA16_263 = input.LA(1);
+                if ( (LA16_263>='0' && LA16_263<='9')||(LA16_263>='A' && LA16_263<='Z')||LA16_263=='_'||(LA16_263>='a' && LA16_263<='z')||(LA16_263>='\u00C0' && LA16_263<='\u00FF') ) {return s51;}
+                return s341;
 
             }
         };
-        DFA.State s173 = new DFA.State() {
+        DFA.State s174 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_173 = input.LA(1);
-                if ( LA16_173=='l' ) {return s259;}
+                int LA16_174 = input.LA(1);
+                if ( LA16_174=='l' ) {return s263;}
                 return s51;
 
             }
@@ -3409,7 +3444,7 @@
         DFA.State s63 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_63 = input.LA(1);
-                if ( LA16_63=='a' ) {return s173;}
+                if ( LA16_63=='a' ) {return s174;}
                 return s51;
 
             }
@@ -3431,35 +3466,35 @@
         	        }
             }
         };
-        DFA.State s441 = new DFA.State() {{alt=7;}};
-        DFA.State s397 = new DFA.State() {
+        DFA.State s454 = new DFA.State() {{alt=7;}};
+        DFA.State s407 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_397 = input.LA(1);
-                if ( (LA16_397>='0' && LA16_397<='9')||(LA16_397>='A' && LA16_397<='Z')||LA16_397=='_'||(LA16_397>='a' && LA16_397<='z')||(LA16_397>='\u00C0' && LA16_397<='\u00FF') ) {return s51;}
-                return s441;
+                int LA16_407 = input.LA(1);
+                if ( (LA16_407>='0' && LA16_407<='9')||(LA16_407>='A' && LA16_407<='Z')||LA16_407=='_'||(LA16_407>='a' && LA16_407<='z')||(LA16_407>='\u00C0' && LA16_407<='\u00FF') ) {return s51;}
+                return s454;
 
             }
         };
-        DFA.State s336 = new DFA.State() {
+        DFA.State s343 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_336 = input.LA(1);
-                if ( LA16_336=='l' ) {return s397;}
+                int LA16_343 = input.LA(1);
+                if ( LA16_343=='l' ) {return s407;}
                 return s51;
 
             }
         };
-        DFA.State s262 = new DFA.State() {
+        DFA.State s266 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_262 = input.LA(1);
-                if ( LA16_262=='a' ) {return s336;}
+                int LA16_266 = input.LA(1);
+                if ( LA16_266=='a' ) {return s343;}
                 return s51;
 
             }
         };
-        DFA.State s176 = new DFA.State() {
+        DFA.State s177 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_176 = input.LA(1);
-                if ( LA16_176=='b' ) {return s262;}
+                int LA16_177 = input.LA(1);
+                if ( LA16_177=='b' ) {return s266;}
                 return s51;
 
             }
@@ -3467,7 +3502,7 @@
         DFA.State s66 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_66 = input.LA(1);
-                if ( LA16_66=='o' ) {return s176;}
+                if ( LA16_66=='o' ) {return s177;}
                 return s51;
 
             }
@@ -3480,84 +3515,84 @@
 
             }
         };
-        DFA.State s352 = new DFA.State() {{alt=57;}};
-        DFA.State s339 = new DFA.State() {
+        DFA.State s518 = new DFA.State() {{alt=8;}};
+        DFA.State s491 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_339 = input.LA(1);
-                if ( (LA16_339>='0' && LA16_339<='9')||(LA16_339>='A' && LA16_339<='Z')||LA16_339=='_'||(LA16_339>='a' && LA16_339<='z')||(LA16_339>='\u00C0' && LA16_339<='\u00FF') ) {return s51;}
-                return s352;
+                int LA16_491 = input.LA(1);
+                if ( (LA16_491>='0' && LA16_491<='9')||(LA16_491>='A' && LA16_491<='Z')||LA16_491=='_'||(LA16_491>='a' && LA16_491<='z')||(LA16_491>='\u00C0' && LA16_491<='\u00FF') ) {return s51;}
+                return s518;
 
             }
         };
-        DFA.State s265 = new DFA.State() {
+        DFA.State s456 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_265 = input.LA(1);
-                if ( LA16_265=='e' ) {return s339;}
+                int LA16_456 = input.LA(1);
+                if ( LA16_456=='n' ) {return s491;}
                 return s51;
 
             }
         };
-        DFA.State s179 = new DFA.State() {
+        DFA.State s410 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_179 = input.LA(1);
-                if ( LA16_179=='s' ) {return s265;}
+                int LA16_410 = input.LA(1);
+                if ( LA16_410=='o' ) {return s456;}
                 return s51;
 
             }
         };
-        DFA.State s69 = new DFA.State() {
+        DFA.State s346 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_69 = input.LA(1);
-                if ( LA16_69=='l' ) {return s179;}
+                int LA16_346 = input.LA(1);
+                if ( LA16_346=='i' ) {return s410;}
                 return s51;
 
             }
         };
-        DFA.State s499 = new DFA.State() {{alt=8;}};
-        DFA.State s475 = new DFA.State() {
+        DFA.State s269 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_475 = input.LA(1);
-                if ( (LA16_475>='0' && LA16_475<='9')||(LA16_475>='A' && LA16_475<='Z')||LA16_475=='_'||(LA16_475>='a' && LA16_475<='z')||(LA16_475>='\u00C0' && LA16_475<='\u00FF') ) {return s51;}
-                return s499;
+                int LA16_269 = input.LA(1);
+                if ( LA16_269=='t' ) {return s346;}
+                return s51;
 
             }
         };
-        DFA.State s443 = new DFA.State() {
+        DFA.State s180 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_443 = input.LA(1);
-                if ( LA16_443=='n' ) {return s475;}
+                int LA16_180 = input.LA(1);
+                if ( LA16_180=='c' ) {return s269;}
                 return s51;
 
             }
         };
-        DFA.State s402 = new DFA.State() {
+        DFA.State s69 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_402 = input.LA(1);
-                if ( LA16_402=='o' ) {return s443;}
+                int LA16_69 = input.LA(1);
+                if ( LA16_69=='n' ) {return s180;}
                 return s51;
 
             }
         };
-        DFA.State s342 = new DFA.State() {
+        DFA.State s358 = new DFA.State() {{alt=58;}};
+        DFA.State s349 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_342 = input.LA(1);
-                if ( LA16_342=='i' ) {return s402;}
-                return s51;
+                int LA16_349 = input.LA(1);
+                if ( (LA16_349>='0' && LA16_349<='9')||(LA16_349>='A' && LA16_349<='Z')||LA16_349=='_'||(LA16_349>='a' && LA16_349<='z')||(LA16_349>='\u00C0' && LA16_349<='\u00FF') ) {return s51;}
+                return s358;
 
             }
         };
-        DFA.State s268 = new DFA.State() {
+        DFA.State s272 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_268 = input.LA(1);
-                if ( LA16_268=='t' ) {return s342;}
+                int LA16_272 = input.LA(1);
+                if ( LA16_272=='e' ) {return s349;}
                 return s51;
 
             }
         };
-        DFA.State s182 = new DFA.State() {
+        DFA.State s183 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_182 = input.LA(1);
-                if ( LA16_182=='c' ) {return s268;}
+                int LA16_183 = input.LA(1);
+                if ( LA16_183=='s' ) {return s272;}
                 return s51;
 
             }
@@ -3565,7 +3600,7 @@
         DFA.State s70 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_70 = input.LA(1);
-                if ( LA16_70=='n' ) {return s182;}
+                if ( LA16_70=='l' ) {return s183;}
                 return s51;
 
             }
@@ -3573,10 +3608,10 @@
         DFA.State s7 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'a':
+                case 'u':
                     return s69;
 
-                case 'u':
+                case 'a':
                     return s70;
 
                 default:
@@ -3624,27 +3659,27 @@
 
             }
         };
-        DFA.State s405 = new DFA.State() {{alt=14;}};
-        DFA.State s345 = new DFA.State() {
+        DFA.State s415 = new DFA.State() {{alt=14;}};
+        DFA.State s352 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_345 = input.LA(1);
-                if ( (LA16_345>='0' && LA16_345<='9')||(LA16_345>='A' && LA16_345<='Z')||LA16_345=='_'||(LA16_345>='a' && LA16_345<='z')||(LA16_345>='\u00C0' && LA16_345<='\u00FF') ) {return s51;}
-                return s405;
+                int LA16_352 = input.LA(1);
+                if ( (LA16_352>='0' && LA16_352<='9')||(LA16_352>='A' && LA16_352<='Z')||LA16_352=='_'||(LA16_352>='a' && LA16_352<='z')||(LA16_352>='\u00C0' && LA16_352<='\u00FF') ) {return s51;}
+                return s415;
 
             }
         };
-        DFA.State s271 = new DFA.State() {
+        DFA.State s275 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_271 = input.LA(1);
-                if ( LA16_271=='y' ) {return s345;}
+                int LA16_275 = input.LA(1);
+                if ( LA16_275=='y' ) {return s352;}
                 return s51;
 
             }
         };
-        DFA.State s185 = new DFA.State() {
+        DFA.State s186 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_185 = input.LA(1);
-                if ( LA16_185=='r' ) {return s271;}
+                int LA16_186 = input.LA(1);
+                if ( LA16_186=='r' ) {return s275;}
                 return s51;
 
             }
@@ -3652,7 +3687,7 @@
         DFA.State s78 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_78 = input.LA(1);
-                if ( LA16_78=='e' ) {return s185;}
+                if ( LA16_78=='e' ) {return s186;}
                 return s51;
 
             }
@@ -3665,263 +3700,274 @@
 
             }
         };
-        DFA.State s348 = new DFA.State() {{alt=16;}};
-        DFA.State s274 = new DFA.State() {
+        DFA.State s520 = new DFA.State() {{alt=16;}};
+        DFA.State s494 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_274 = input.LA(1);
-                if ( (LA16_274>='0' && LA16_274<='9')||(LA16_274>='A' && LA16_274<='Z')||LA16_274=='_'||(LA16_274>='a' && LA16_274<='z')||(LA16_274>='\u00C0' && LA16_274<='\u00FF') ) {return s51;}
-                return s348;
+                int LA16_494 = input.LA(1);
+                if ( (LA16_494>='0' && LA16_494<='9')||(LA16_494>='A' && LA16_494<='Z')||LA16_494=='_'||(LA16_494>='a' && LA16_494<='z')||(LA16_494>='\u00C0' && LA16_494<='\u00FF') ) {return s51;}
+                return s520;
 
             }
         };
-        DFA.State s188 = new DFA.State() {
+        DFA.State s459 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_188 = input.LA(1);
-                if ( LA16_188=='e' ) {return s274;}
+                int LA16_459 = input.LA(1);
+                if ( LA16_459=='e' ) {return s494;}
                 return s51;
 
             }
         };
-        DFA.State s81 = new DFA.State() {
+        DFA.State s417 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_81 = input.LA(1);
-                if ( LA16_81=='l' ) {return s188;}
+                int LA16_417 = input.LA(1);
+                if ( LA16_417=='t' ) {return s459;}
                 return s51;
 
             }
         };
-        DFA.State s14 = new DFA.State() {
+        DFA.State s355 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_14 = input.LA(1);
-                if ( LA16_14=='u' ) {return s81;}
+                int LA16_355 = input.LA(1);
+                if ( LA16_355=='a' ) {return s417;}
                 return s51;
 
             }
         };
-        DFA.State s350 = new DFA.State() {{alt=17;}};
-        DFA.State s277 = new DFA.State() {
+        DFA.State s278 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_277 = input.LA(1);
-                if ( (LA16_277>='0' && LA16_277<='9')||(LA16_277>='A' && LA16_277<='Z')||LA16_277=='_'||(LA16_277>='a' && LA16_277<='z')||(LA16_277>='\u00C0' && LA16_277<='\u00FF') ) {return s51;}
-                return s350;
-
-            }
-        };
-        DFA.State s191 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_191 = input.LA(1);
-                if ( LA16_191=='n' ) {return s277;}
+                int LA16_278 = input.LA(1);
+                if ( LA16_278=='l' ) {return s355;}
                 return s51;
 
             }
         };
-        DFA.State s84 = new DFA.State() {
+        DFA.State s189 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_84 = input.LA(1);
-                if ( LA16_84=='e' ) {return s191;}
+                int LA16_189 = input.LA(1);
+                if ( LA16_189=='p' ) {return s278;}
                 return s51;
 
             }
         };
-        DFA.State s15 = new DFA.State() {
+        DFA.State s81 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_15 = input.LA(1);
-                if ( LA16_15=='h' ) {return s84;}
+                int LA16_81 = input.LA(1);
+                if ( LA16_81=='m' ) {return s189;}
                 return s51;
 
             }
         };
-        DFA.State s16 = new DFA.State() {{alt=18;}};
-        DFA.State s280 = new DFA.State() {
+        DFA.State s281 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_280 = input.LA(1);
-                if ( (LA16_280>='0' && LA16_280<='9')||(LA16_280>='A' && LA16_280<='Z')||LA16_280=='_'||(LA16_280>='a' && LA16_280<='z')||(LA16_280>='\u00C0' && LA16_280<='\u00FF') ) {return s51;}
-                return s352;
+                int LA16_281 = input.LA(1);
+                if ( (LA16_281>='0' && LA16_281<='9')||(LA16_281>='A' && LA16_281<='Z')||LA16_281=='_'||(LA16_281>='a' && LA16_281<='z')||(LA16_281>='\u00C0' && LA16_281<='\u00FF') ) {return s51;}
+                return s358;
 
             }
         };
-        DFA.State s194 = new DFA.State() {
+        DFA.State s192 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_194 = input.LA(1);
-                if ( LA16_194=='e' ) {return s280;}
+                int LA16_192 = input.LA(1);
+                if ( LA16_192=='e' ) {return s281;}
                 return s51;
 
             }
         };
-        DFA.State s87 = new DFA.State() {
+        DFA.State s82 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_87 = input.LA(1);
-                if ( LA16_87=='u' ) {return s194;}
+                int LA16_82 = input.LA(1);
+                if ( LA16_82=='u' ) {return s192;}
                 return s51;
 
             }
         };
-        DFA.State s354 = new DFA.State() {{alt=19;}};
-        DFA.State s283 = new DFA.State() {
+        DFA.State s360 = new DFA.State() {{alt=20;}};
+        DFA.State s284 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_283 = input.LA(1);
-                if ( (LA16_283>='0' && LA16_283<='9')||(LA16_283>='A' && LA16_283<='Z')||LA16_283=='_'||(LA16_283>='a' && LA16_283<='z')||(LA16_283>='\u00C0' && LA16_283<='\u00FF') ) {return s51;}
-                return s354;
+                int LA16_284 = input.LA(1);
+                if ( (LA16_284>='0' && LA16_284<='9')||(LA16_284>='A' && LA16_284<='Z')||LA16_284=='_'||(LA16_284>='a' && LA16_284<='z')||(LA16_284>='\u00C0' && LA16_284<='\u00FF') ) {return s51;}
+                return s360;
 
             }
         };
-        DFA.State s197 = new DFA.State() {
+        DFA.State s195 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_197 = input.LA(1);
-                if ( LA16_197=='n' ) {return s283;}
+                int LA16_195 = input.LA(1);
+                if ( LA16_195=='n' ) {return s284;}
                 return s51;
 
             }
         };
-        DFA.State s88 = new DFA.State() {
+        DFA.State s83 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_88 = input.LA(1);
-                if ( LA16_88=='e' ) {return s197;}
+                int LA16_83 = input.LA(1);
+                if ( LA16_83=='e' ) {return s195;}
                 return s51;
 
             }
         };
-        DFA.State s17 = new DFA.State() {
+        DFA.State s14 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 'e':
+                    return s81;
+
                 case 'r':
-                    return s87;
+                    return s82;
 
                 case 'h':
-                    return s88;
+                    return s83;
 
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s446 = new DFA.State() {{alt=25;}};
-        DFA.State s407 = new DFA.State() {
+        DFA.State s362 = new DFA.State() {{alt=17;}};
+        DFA.State s287 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_407 = input.LA(1);
-                if ( LA16_407=='-' ) {return s446;}
-                return s51;
+                int LA16_287 = input.LA(1);
+                if ( (LA16_287>='0' && LA16_287<='9')||(LA16_287>='A' && LA16_287<='Z')||LA16_287=='_'||(LA16_287>='a' && LA16_287<='z')||(LA16_287>='\u00C0' && LA16_287<='\u00FF') ) {return s51;}
+                return s362;
 
             }
         };
-        DFA.State s356 = new DFA.State() {
+        DFA.State s198 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_356 = input.LA(1);
-                if ( LA16_356=='a' ) {return s407;}
+                int LA16_198 = input.LA(1);
+                if ( LA16_198=='e' ) {return s287;}
                 return s51;
 
             }
         };
-        DFA.State s286 = new DFA.State() {
+        DFA.State s86 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_286 = input.LA(1);
-                if ( LA16_286=='d' ) {return s356;}
+                int LA16_86 = input.LA(1);
+                if ( LA16_86=='l' ) {return s198;}
                 return s51;
 
             }
         };
-        DFA.State s200 = new DFA.State() {
+        DFA.State s15 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_200 = input.LA(1);
-                if ( LA16_200=='n' ) {return s286;}
+                int LA16_15 = input.LA(1);
+                if ( LA16_15=='u' ) {return s86;}
                 return s51;
 
             }
         };
-        DFA.State s91 = new DFA.State() {
+        DFA.State s364 = new DFA.State() {{alt=18;}};
+        DFA.State s290 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_91 = input.LA(1);
-                if ( LA16_91=='e' ) {return s200;}
-                return s51;
+                int LA16_290 = input.LA(1);
+                if ( (LA16_290>='0' && LA16_290<='9')||(LA16_290>='A' && LA16_290<='Z')||LA16_290=='_'||(LA16_290>='a' && LA16_290<='z')||(LA16_290>='\u00C0' && LA16_290<='\u00FF') ) {return s51;}
+                return s364;
 
             }
         };
-        DFA.State s519 = new DFA.State() {{alt=24;}};
-        DFA.State s513 = new DFA.State() {
+        DFA.State s201 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_513 = input.LA(1);
-                if ( LA16_513=='-' ) {return s519;}
+                int LA16_201 = input.LA(1);
+                if ( LA16_201=='n' ) {return s290;}
                 return s51;
 
             }
         };
-        DFA.State s501 = new DFA.State() {
+        DFA.State s89 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_501 = input.LA(1);
-                if ( LA16_501=='n' ) {return s513;}
+                int LA16_89 = input.LA(1);
+                if ( LA16_89=='e' ) {return s201;}
                 return s51;
 
             }
         };
-        DFA.State s478 = new DFA.State() {
+        DFA.State s16 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_478 = input.LA(1);
-                if ( LA16_478=='o' ) {return s501;}
+                int LA16_16 = input.LA(1);
+                if ( LA16_16=='h' ) {return s89;}
                 return s51;
 
             }
         };
-        DFA.State s449 = new DFA.State() {
+        DFA.State s17 = new DFA.State() {{alt=19;}};
+        DFA.State s293 = new DFA.State() {{alt=34;}};
+        DFA.State s204 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_449 = input.LA(1);
-                if ( LA16_449=='i' ) {return s478;}
+                int LA16_204 = input.LA(1);
+                if ( (LA16_204>='0' && LA16_204<='9')||(LA16_204>='A' && LA16_204<='Z')||LA16_204=='_'||(LA16_204>='a' && LA16_204<='z')||(LA16_204>='\u00C0' && LA16_204<='\u00FF') ) {return s51;}
+                return s293;
+
+            }
+        };
+        DFA.State s92 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_92 = input.LA(1);
+                if ( LA16_92=='d' ) {return s204;}
                 return s51;
 
             }
         };
-        DFA.State s410 = new DFA.State() {
+        DFA.State s540 = new DFA.State() {{alt=21;}};
+        DFA.State s534 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_410 = input.LA(1);
-                if ( LA16_410=='t' ) {return s449;}
+                int LA16_534 = input.LA(1);
+                if ( (LA16_534>='0' && LA16_534<='9')||(LA16_534>='A' && LA16_534<='Z')||LA16_534=='_'||(LA16_534>='a' && LA16_534<='z')||(LA16_534>='\u00C0' && LA16_534<='\u00FF') ) {return s51;}
+                return s540;
+
+            }
+        };
+        DFA.State s522 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_522 = input.LA(1);
+                if ( LA16_522=='s' ) {return s534;}
                 return s51;
 
             }
         };
-        DFA.State s359 = new DFA.State() {
+        DFA.State s497 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_359 = input.LA(1);
-                if ( LA16_359=='a' ) {return s410;}
+                int LA16_497 = input.LA(1);
+                if ( LA16_497=='e' ) {return s522;}
                 return s51;
 
             }
         };
-        DFA.State s289 = new DFA.State() {
+        DFA.State s462 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_289 = input.LA(1);
-                if ( LA16_289=='v' ) {return s359;}
+                int LA16_462 = input.LA(1);
+                if ( LA16_462=='t' ) {return s497;}
                 return s51;
 
             }
         };
-        DFA.State s203 = new DFA.State() {
+        DFA.State s420 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_203 = input.LA(1);
-                if ( LA16_203=='i' ) {return s289;}
+                int LA16_420 = input.LA(1);
+                if ( LA16_420=='u' ) {return s462;}
                 return s51;
 
             }
         };
-        DFA.State s92 = new DFA.State() {
+        DFA.State s366 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_92 = input.LA(1);
-                if ( LA16_92=='t' ) {return s203;}
+                int LA16_366 = input.LA(1);
+                if ( LA16_366=='b' ) {return s420;}
                 return s51;
 
             }
         };
-        DFA.State s362 = new DFA.State() {{alt=23;}};
-        DFA.State s292 = new DFA.State() {
+        DFA.State s295 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_292 = input.LA(1);
-                if ( LA16_292=='-' ) {return s362;}
+                int LA16_295 = input.LA(1);
+                if ( LA16_295=='i' ) {return s366;}
                 return s51;
 
             }
         };
-        DFA.State s206 = new DFA.State() {
+        DFA.State s207 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_206 = input.LA(1);
-                if ( LA16_206=='o' ) {return s292;}
+                int LA16_207 = input.LA(1);
+                if ( LA16_207=='r' ) {return s295;}
                 return s51;
 
             }
@@ -3929,72 +3975,72 @@
         DFA.State s93 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_93 = input.LA(1);
-                if ( LA16_93=='t' ) {return s206;}
+                if ( LA16_93=='t' ) {return s207;}
                 return s51;
 
             }
         };
-        DFA.State s522 = new DFA.State() {{alt=20;}};
-        DFA.State s516 = new DFA.State() {
+        DFA.State s542 = new DFA.State() {{alt=25;}};
+        DFA.State s537 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_516 = input.LA(1);
-                if ( (LA16_516>='0' && LA16_516<='9')||(LA16_516>='A' && LA16_516<='Z')||LA16_516=='_'||(LA16_516>='a' && LA16_516<='z')||(LA16_516>='\u00C0' && LA16_516<='\u00FF') ) {return s51;}
-                return s522;
+                int LA16_537 = input.LA(1);
+                if ( LA16_537=='-' ) {return s542;}
+                return s51;
 
             }
         };
-        DFA.State s504 = new DFA.State() {
+        DFA.State s525 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_504 = input.LA(1);
-                if ( LA16_504=='s' ) {return s516;}
+                int LA16_525 = input.LA(1);
+                if ( LA16_525=='n' ) {return s537;}
                 return s51;
 
             }
         };
-        DFA.State s481 = new DFA.State() {
+        DFA.State s500 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_481 = input.LA(1);
-                if ( LA16_481=='e' ) {return s504;}
+                int LA16_500 = input.LA(1);
+                if ( LA16_500=='o' ) {return s525;}
                 return s51;
 
             }
         };
-        DFA.State s452 = new DFA.State() {
+        DFA.State s465 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_452 = input.LA(1);
-                if ( LA16_452=='t' ) {return s481;}
+                int LA16_465 = input.LA(1);
+                if ( LA16_465=='i' ) {return s500;}
                 return s51;
 
             }
         };
-        DFA.State s413 = new DFA.State() {
+        DFA.State s423 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_413 = input.LA(1);
-                if ( LA16_413=='u' ) {return s452;}
+                int LA16_423 = input.LA(1);
+                if ( LA16_423=='t' ) {return s465;}
                 return s51;
 
             }
         };
-        DFA.State s365 = new DFA.State() {
+        DFA.State s369 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_365 = input.LA(1);
-                if ( LA16_365=='b' ) {return s413;}
+                int LA16_369 = input.LA(1);
+                if ( LA16_369=='a' ) {return s423;}
                 return s51;
 
             }
         };
-        DFA.State s295 = new DFA.State() {
+        DFA.State s298 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_295 = input.LA(1);
-                if ( LA16_295=='i' ) {return s365;}
+                int LA16_298 = input.LA(1);
+                if ( LA16_298=='v' ) {return s369;}
                 return s51;
 
             }
         };
-        DFA.State s209 = new DFA.State() {
+        DFA.State s210 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_209 = input.LA(1);
-                if ( LA16_209=='r' ) {return s295;}
+                int LA16_210 = input.LA(1);
+                if ( LA16_210=='i' ) {return s298;}
                 return s51;
 
             }
@@ -4002,104 +4048,153 @@
         DFA.State s94 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_94 = input.LA(1);
-                if ( LA16_94=='t' ) {return s209;}
+                if ( LA16_94=='t' ) {return s210;}
                 return s51;
 
             }
         };
-        DFA.State s298 = new DFA.State() {{alt=33;}};
-        DFA.State s212 = new DFA.State() {
+        DFA.State s468 = new DFA.State() {{alt=26;}};
+        DFA.State s426 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_212 = input.LA(1);
-                if ( (LA16_212>='0' && LA16_212<='9')||(LA16_212>='A' && LA16_212<='Z')||LA16_212=='_'||(LA16_212>='a' && LA16_212<='z')||(LA16_212>='\u00C0' && LA16_212<='\u00FF') ) {return s51;}
-                return s298;
+                int LA16_426 = input.LA(1);
+                if ( LA16_426=='-' ) {return s468;}
+                return s51;
 
             }
         };
+        DFA.State s372 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_372 = input.LA(1);
+                if ( LA16_372=='a' ) {return s426;}
+                return s51;
+
+            }
+        };
+        DFA.State s301 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_301 = input.LA(1);
+                if ( LA16_301=='d' ) {return s372;}
+                return s51;
+
+            }
+        };
+        DFA.State s213 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_213 = input.LA(1);
+                if ( LA16_213=='n' ) {return s301;}
+                return s51;
+
+            }
+        };
         DFA.State s95 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_95 = input.LA(1);
-                if ( LA16_95=='d' ) {return s212;}
+                if ( LA16_95=='e' ) {return s213;}
                 return s51;
 
             }
         };
+        DFA.State s375 = new DFA.State() {{alt=24;}};
+        DFA.State s304 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_304 = input.LA(1);
+                if ( LA16_304=='-' ) {return s375;}
+                return s51;
+
+            }
+        };
+        DFA.State s216 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_216 = input.LA(1);
+                if ( LA16_216=='o' ) {return s304;}
+                return s51;
+
+            }
+        };
+        DFA.State s96 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_96 = input.LA(1);
+                if ( LA16_96=='t' ) {return s216;}
+                return s51;
+
+            }
+        };
         DFA.State s18 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'g':
-                    return s91;
-
-                case 'c':
+                case 'n':
                     return s92;
 
-                case 'u':
+                case 't':
                     return s93;
 
-                case 't':
+                case 'c':
                     return s94;
 
-                case 'n':
+                case 'g':
                     return s95;
 
+                case 'u':
+                    return s96;
+
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s507 = new DFA.State() {{alt=21;}};
-        DFA.State s484 = new DFA.State() {
+        DFA.State s528 = new DFA.State() {{alt=22;}};
+        DFA.State s503 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_484 = input.LA(1);
-                if ( (LA16_484>='0' && LA16_484<='9')||(LA16_484>='A' && LA16_484<='Z')||LA16_484=='_'||(LA16_484>='a' && LA16_484<='z')||(LA16_484>='\u00C0' && LA16_484<='\u00FF') ) {return s51;}
-                return s507;
+                int LA16_503 = input.LA(1);
+                if ( (LA16_503>='0' && LA16_503<='9')||(LA16_503>='A' && LA16_503<='Z')||LA16_503=='_'||(LA16_503>='a' && LA16_503<='z')||(LA16_503>='\u00C0' && LA16_503<='\u00FF') ) {return s51;}
+                return s528;
 
             }
         };
-        DFA.State s455 = new DFA.State() {
+        DFA.State s471 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_455 = input.LA(1);
-                if ( LA16_455=='e' ) {return s484;}
+                int LA16_471 = input.LA(1);
+                if ( LA16_471=='e' ) {return s503;}
                 return s51;
 
             }
         };
-        DFA.State s416 = new DFA.State() {
+        DFA.State s429 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_416 = input.LA(1);
-                if ( LA16_416=='c' ) {return s455;}
+                int LA16_429 = input.LA(1);
+                if ( LA16_429=='c' ) {return s471;}
                 return s51;
 
             }
         };
-        DFA.State s368 = new DFA.State() {
+        DFA.State s378 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_368 = input.LA(1);
-                if ( LA16_368=='n' ) {return s416;}
+                int LA16_378 = input.LA(1);
+                if ( LA16_378=='n' ) {return s429;}
                 return s51;
 
             }
         };
-        DFA.State s300 = new DFA.State() {
+        DFA.State s307 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_300 = input.LA(1);
-                if ( LA16_300=='e' ) {return s368;}
+                int LA16_307 = input.LA(1);
+                if ( LA16_307=='e' ) {return s378;}
                 return s51;
 
             }
         };
-        DFA.State s215 = new DFA.State() {
+        DFA.State s219 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_215 = input.LA(1);
-                if ( LA16_215=='i' ) {return s300;}
+                int LA16_219 = input.LA(1);
+                if ( LA16_219=='i' ) {return s307;}
                 return s51;
 
             }
         };
-        DFA.State s98 = new DFA.State() {
+        DFA.State s99 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_98 = input.LA(1);
-                if ( LA16_98=='l' ) {return s215;}
+                int LA16_99 = input.LA(1);
+                if ( LA16_99=='l' ) {return s219;}
                 return s51;
 
             }
@@ -4107,56 +4202,56 @@
         DFA.State s19 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_19 = input.LA(1);
-                if ( LA16_19=='a' ) {return s98;}
+                if ( LA16_19=='a' ) {return s99;}
                 return s51;
 
             }
         };
-        DFA.State s218 = new DFA.State() {{alt=22;}};
-        DFA.State s303 = new DFA.State() {{alt=36;}};
-        DFA.State s219 = new DFA.State() {
+        DFA.State s222 = new DFA.State() {{alt=23;}};
+        DFA.State s310 = new DFA.State() {{alt=37;}};
+        DFA.State s223 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_219 = input.LA(1);
-                if ( (LA16_219>='0' && LA16_219<='9')||(LA16_219>='A' && LA16_219<='Z')||LA16_219=='_'||(LA16_219>='a' && LA16_219<='z')||(LA16_219>='\u00C0' && LA16_219<='\u00FF') ) {return s51;}
-                return s303;
+                int LA16_223 = input.LA(1);
+                if ( (LA16_223>='0' && LA16_223<='9')||(LA16_223>='A' && LA16_223<='Z')||LA16_223=='_'||(LA16_223>='a' && LA16_223<='z')||(LA16_223>='\u00C0' && LA16_223<='\u00FF') ) {return s51;}
+                return s310;
 
             }
         };
-        DFA.State s101 = new DFA.State() {
+        DFA.State s102 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case '-':
-                    return s218;
+                    return s222;
 
                 case 't':
-                    return s219;
+                    return s223;
 
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s371 = new DFA.State() {{alt=31;}};
-        DFA.State s305 = new DFA.State() {
+        DFA.State s381 = new DFA.State() {{alt=32;}};
+        DFA.State s312 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_305 = input.LA(1);
-                if ( (LA16_305>='0' && LA16_305<='9')||(LA16_305>='A' && LA16_305<='Z')||LA16_305=='_'||(LA16_305>='a' && LA16_305<='z')||(LA16_305>='\u00C0' && LA16_305<='\u00FF') ) {return s51;}
-                return s371;
+                int LA16_312 = input.LA(1);
+                if ( (LA16_312>='0' && LA16_312<='9')||(LA16_312>='A' && LA16_312<='Z')||LA16_312=='_'||(LA16_312>='a' && LA16_312<='z')||(LA16_312>='\u00C0' && LA16_312<='\u00FF') ) {return s51;}
+                return s381;
 
             }
         };
-        DFA.State s222 = new DFA.State() {
+        DFA.State s226 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_222 = input.LA(1);
-                if ( LA16_222=='l' ) {return s305;}
+                int LA16_226 = input.LA(1);
+                if ( LA16_226=='l' ) {return s312;}
                 return s51;
 
             }
         };
-        DFA.State s102 = new DFA.State() {
+        DFA.State s103 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_102 = input.LA(1);
-                if ( LA16_102=='l' ) {return s222;}
+                int LA16_103 = input.LA(1);
+                if ( LA16_103=='l' ) {return s226;}
                 return s51;
 
             }
@@ -4165,69 +4260,69 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 'o':
-                    return s101;
+                    return s102;
 
                 case 'u':
-                    return s102;
+                    return s103;
 
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s509 = new DFA.State() {{alt=26;}};
-        DFA.State s487 = new DFA.State() {
+        DFA.State s530 = new DFA.State() {{alt=27;}};
+        DFA.State s506 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_487 = input.LA(1);
-                if ( (LA16_487>='0' && LA16_487<='9')||(LA16_487>='A' && LA16_487<='Z')||LA16_487=='_'||(LA16_487>='a' && LA16_487<='z')||(LA16_487>='\u00C0' && LA16_487<='\u00FF') ) {return s51;}
-                return s509;
+                int LA16_506 = input.LA(1);
+                if ( (LA16_506>='0' && LA16_506<='9')||(LA16_506>='A' && LA16_506<='Z')||LA16_506=='_'||(LA16_506>='a' && LA16_506<='z')||(LA16_506>='\u00C0' && LA16_506<='\u00FF') ) {return s51;}
+                return s530;
 
             }
         };
-        DFA.State s458 = new DFA.State() {
+        DFA.State s474 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_458 = input.LA(1);
-                if ( LA16_458=='n' ) {return s487;}
+                int LA16_474 = input.LA(1);
+                if ( LA16_474=='n' ) {return s506;}
                 return s51;
 
             }
         };
-        DFA.State s419 = new DFA.State() {
+        DFA.State s432 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_419 = input.LA(1);
-                if ( LA16_419=='o' ) {return s458;}
+                int LA16_432 = input.LA(1);
+                if ( LA16_432=='o' ) {return s474;}
                 return s51;
 
             }
         };
-        DFA.State s373 = new DFA.State() {
+        DFA.State s383 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_373 = input.LA(1);
-                if ( LA16_373=='i' ) {return s419;}
+                int LA16_383 = input.LA(1);
+                if ( LA16_383=='i' ) {return s432;}
                 return s51;
 
             }
         };
-        DFA.State s308 = new DFA.State() {
+        DFA.State s315 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_308 = input.LA(1);
-                if ( LA16_308=='t' ) {return s373;}
+                int LA16_315 = input.LA(1);
+                if ( LA16_315=='t' ) {return s383;}
                 return s51;
 
             }
         };
-        DFA.State s225 = new DFA.State() {
+        DFA.State s229 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_225 = input.LA(1);
-                if ( LA16_225=='a' ) {return s308;}
+                int LA16_229 = input.LA(1);
+                if ( LA16_229=='a' ) {return s315;}
                 return s51;
 
             }
         };
-        DFA.State s105 = new DFA.State() {
+        DFA.State s106 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_105 = input.LA(1);
-                if ( LA16_105=='r' ) {return s225;}
+                int LA16_106 = input.LA(1);
+                if ( LA16_106=='r' ) {return s229;}
                 return s51;
 
             }
@@ -4235,71 +4330,71 @@
         DFA.State s21 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_21 = input.LA(1);
-                if ( LA16_21=='u' ) {return s105;}
+                if ( LA16_21=='u' ) {return s106;}
                 return s51;
 
             }
         };
-        DFA.State s228 = new DFA.State() {{alt=27;}};
-        DFA.State s108 = new DFA.State() {
+        DFA.State s232 = new DFA.State() {{alt=28;}};
+        DFA.State s109 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_108 = input.LA(1);
-                if ( (LA16_108>='0' && LA16_108<='9')||(LA16_108>='A' && LA16_108<='Z')||LA16_108=='_'||(LA16_108>='a' && LA16_108<='z')||(LA16_108>='\u00C0' && LA16_108<='\u00FF') ) {return s51;}
-                return s228;
+                int LA16_109 = input.LA(1);
+                if ( (LA16_109>='0' && LA16_109<='9')||(LA16_109>='A' && LA16_109<='Z')||LA16_109=='_'||(LA16_109>='a' && LA16_109<='z')||(LA16_109>='\u00C0' && LA16_109<='\u00FF') ) {return s51;}
+                return s232;
 
             }
         };
         DFA.State s22 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_22 = input.LA(1);
-                if ( LA16_22=='r' ) {return s108;}
+                if ( LA16_22=='r' ) {return s109;}
                 return s51;
 
             }
         };
-        DFA.State s230 = new DFA.State() {{alt=28;}};
-        DFA.State s111 = new DFA.State() {
+        DFA.State s234 = new DFA.State() {{alt=29;}};
+        DFA.State s112 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_111 = input.LA(1);
-                return s230;
+                int LA16_112 = input.LA(1);
+                return s234;
 
             }
         };
-        DFA.State s112 = new DFA.State() {{alt=30;}};
+        DFA.State s113 = new DFA.State() {{alt=31;}};
         DFA.State s23 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_23 = input.LA(1);
-                if ( LA16_23=='|' ) {return s111;}
-                return s112;
+                if ( LA16_23=='|' ) {return s112;}
+                return s113;
 
             }
         };
-        DFA.State s231 = new DFA.State() {{alt=34;}};
-        DFA.State s113 = new DFA.State() {
+        DFA.State s235 = new DFA.State() {{alt=35;}};
+        DFA.State s114 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_113 = input.LA(1);
-                return s231;
+                int LA16_114 = input.LA(1);
+                return s235;
 
             }
         };
-        DFA.State s114 = new DFA.State() {{alt=29;}};
+        DFA.State s115 = new DFA.State() {{alt=30;}};
         DFA.State s24 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_24 = input.LA(1);
-                if ( LA16_24=='&' ) {return s113;}
-                return s114;
+                if ( LA16_24=='&' ) {return s114;}
+                return s115;
 
             }
         };
-        DFA.State s35 = new DFA.State() {{alt=51;}};
-        DFA.State s116 = new DFA.State() {{alt=32;}};
-        DFA.State s156 = new DFA.State() {{alt=55;}};
-        DFA.State s158 = new DFA.State() {{alt=54;}};
+        DFA.State s116 = new DFA.State() {{alt=33;}};
+        DFA.State s35 = new DFA.State() {{alt=52;}};
+        DFA.State s157 = new DFA.State() {{alt=56;}};
+        DFA.State s159 = new DFA.State() {{alt=55;}};
         DFA.State s49 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case '.':
-                    return s156;
+                    return s157;
 
                 case '0':
                 case '1':
@@ -4314,7 +4409,7 @@
                     return s49;
 
                 default:
-                    return s158;
+                    return s159;
         	        }
             }
         };
@@ -4341,35 +4436,35 @@
         	        }
             }
         };
-        DFA.State s120 = new DFA.State() {{alt=38;}};
+        DFA.State s121 = new DFA.State() {{alt=39;}};
         DFA.State s26 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_26 = input.LA(1);
-                return s120;
+                return s121;
 
             }
         };
-        DFA.State s121 = new DFA.State() {{alt=39;}};
+        DFA.State s122 = new DFA.State() {{alt=40;}};
         DFA.State s27 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_27 = input.LA(1);
-                return s121;
+                return s122;
 
             }
         };
-        DFA.State s311 = new DFA.State() {{alt=40;}};
-        DFA.State s232 = new DFA.State() {
+        DFA.State s318 = new DFA.State() {{alt=41;}};
+        DFA.State s236 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_232 = input.LA(1);
-                if ( (LA16_232>='0' && LA16_232<='9')||(LA16_232>='A' && LA16_232<='Z')||LA16_232=='_'||(LA16_232>='a' && LA16_232<='z')||(LA16_232>='\u00C0' && LA16_232<='\u00FF') ) {return s51;}
-                return s311;
+                int LA16_236 = input.LA(1);
+                if ( (LA16_236>='0' && LA16_236<='9')||(LA16_236>='A' && LA16_236<='Z')||LA16_236=='_'||(LA16_236>='a' && LA16_236<='z')||(LA16_236>='\u00C0' && LA16_236<='\u00FF') ) {return s51;}
+                return s318;
 
             }
         };
-        DFA.State s122 = new DFA.State() {
+        DFA.State s123 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_122 = input.LA(1);
-                if ( LA16_122=='e' ) {return s232;}
+                int LA16_123 = input.LA(1);
+                if ( LA16_123=='e' ) {return s236;}
                 return s51;
 
             }
@@ -4377,20 +4472,20 @@
         DFA.State s28 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_28 = input.LA(1);
-                if ( LA16_28=='s' ) {return s122;}
+                if ( LA16_28=='s' ) {return s123;}
                 return s51;
 
             }
         };
-        DFA.State s235 = new DFA.State() {{alt=41;}};
-        DFA.State s129 = new DFA.State() {
+        DFA.State s239 = new DFA.State() {{alt=42;}};
+        DFA.State s128 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_129 = input.LA(1);
-                return s235;
+                int LA16_128 = input.LA(1);
+                return s239;
 
             }
         };
-        DFA.State s130 = new DFA.State() {{alt=42;}};
+        DFA.State s131 = new DFA.State() {{alt=43;}};
         DFA.State s29 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -4401,15 +4496,15 @@
                     return s35;
 
                 case '=':
-                    return s129;
+                    return s128;
 
                 default:
-                    return s130;
+                    return s131;
         	        }
             }
         };
-        DFA.State s132 = new DFA.State() {{alt=44;}};
-        DFA.State s133 = new DFA.State() {{alt=43;}};
+        DFA.State s133 = new DFA.State() {{alt=45;}};
+        DFA.State s134 = new DFA.State() {{alt=44;}};
         DFA.State s30 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -4417,91 +4512,91 @@
                     return s35;
 
                 case '=':
-                    return s132;
+                    return s133;
 
                 default:
-                    return s133;
+                    return s134;
         	        }
             }
         };
-        DFA.State s135 = new DFA.State() {{alt=46;}};
-        DFA.State s136 = new DFA.State() {{alt=45;}};
+        DFA.State s135 = new DFA.State() {{alt=47;}};
+        DFA.State s137 = new DFA.State() {{alt=46;}};
         DFA.State s31 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case '=':
+                    return s135;
+
                 case '<':
                     return s35;
 
-                case '=':
-                    return s135;
-
                 default:
-                    return s136;
+                    return s137;
         	        }
             }
         };
-        DFA.State s137 = new DFA.State() {{alt=47;}};
+        DFA.State s138 = new DFA.State() {{alt=48;}};
         DFA.State s32 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_32 = input.LA(1);
-                if ( LA16_32=='=' ) {return s137;}
+                if ( LA16_32=='=' ) {return s138;}
                 return s35;
 
             }
         };
-        DFA.State s511 = new DFA.State() {{alt=48;}};
-        DFA.State s490 = new DFA.State() {
+        DFA.State s532 = new DFA.State() {{alt=49;}};
+        DFA.State s509 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_490 = input.LA(1);
-                if ( (LA16_490>='0' && LA16_490<='9')||(LA16_490>='A' && LA16_490<='Z')||LA16_490=='_'||(LA16_490>='a' && LA16_490<='z')||(LA16_490>='\u00C0' && LA16_490<='\u00FF') ) {return s51;}
-                return s511;
+                int LA16_509 = input.LA(1);
+                if ( (LA16_509>='0' && LA16_509<='9')||(LA16_509>='A' && LA16_509<='Z')||LA16_509=='_'||(LA16_509>='a' && LA16_509<='z')||(LA16_509>='\u00C0' && LA16_509<='\u00FF') ) {return s51;}
+                return s532;
 
             }
         };
-        DFA.State s461 = new DFA.State() {
+        DFA.State s477 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_461 = input.LA(1);
-                if ( LA16_461=='s' ) {return s490;}
+                int LA16_477 = input.LA(1);
+                if ( LA16_477=='s' ) {return s509;}
                 return s51;
 
             }
         };
-        DFA.State s422 = new DFA.State() {
+        DFA.State s435 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_422 = input.LA(1);
-                if ( LA16_422=='n' ) {return s461;}
+                int LA16_435 = input.LA(1);
+                if ( LA16_435=='n' ) {return s477;}
                 return s51;
 
             }
         };
-        DFA.State s376 = new DFA.State() {
+        DFA.State s386 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_376 = input.LA(1);
-                if ( LA16_376=='i' ) {return s422;}
+                int LA16_386 = input.LA(1);
+                if ( LA16_386=='i' ) {return s435;}
                 return s51;
 
             }
         };
-        DFA.State s313 = new DFA.State() {
+        DFA.State s320 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_313 = input.LA(1);
-                if ( LA16_313=='a' ) {return s376;}
+                int LA16_320 = input.LA(1);
+                if ( LA16_320=='a' ) {return s386;}
                 return s51;
 
             }
         };
-        DFA.State s236 = new DFA.State() {
+        DFA.State s240 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_236 = input.LA(1);
-                if ( LA16_236=='t' ) {return s313;}
+                int LA16_240 = input.LA(1);
+                if ( LA16_240=='t' ) {return s320;}
                 return s51;
 
             }
         };
-        DFA.State s139 = new DFA.State() {
+        DFA.State s140 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_139 = input.LA(1);
-                if ( LA16_139=='n' ) {return s236;}
+                int LA16_140 = input.LA(1);
+                if ( LA16_140=='n' ) {return s240;}
                 return s51;
 
             }
@@ -4509,56 +4604,56 @@
         DFA.State s33 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_33 = input.LA(1);
-                if ( LA16_33=='o' ) {return s139;}
+                if ( LA16_33=='o' ) {return s140;}
                 return s51;
 
             }
         };
-        DFA.State s493 = new DFA.State() {{alt=49;}};
-        DFA.State s464 = new DFA.State() {
+        DFA.State s512 = new DFA.State() {{alt=50;}};
+        DFA.State s480 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_464 = input.LA(1);
-                if ( (LA16_464>='0' && LA16_464<='9')||(LA16_464>='A' && LA16_464<='Z')||LA16_464=='_'||(LA16_464>='a' && LA16_464<='z')||(LA16_464>='\u00C0' && LA16_464<='\u00FF') ) {return s51;}
-                return s493;
+                int LA16_480 = input.LA(1);
+                if ( (LA16_480>='0' && LA16_480<='9')||(LA16_480>='A' && LA16_480<='Z')||LA16_480=='_'||(LA16_480>='a' && LA16_480<='z')||(LA16_480>='\u00C0' && LA16_480<='\u00FF') ) {return s51;}
+                return s512;
 
             }
         };
-        DFA.State s425 = new DFA.State() {
+        DFA.State s438 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_425 = input.LA(1);
-                if ( LA16_425=='s' ) {return s464;}
+                int LA16_438 = input.LA(1);
+                if ( LA16_438=='s' ) {return s480;}
                 return s51;
 
             }
         };
-        DFA.State s379 = new DFA.State() {
+        DFA.State s389 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_379 = input.LA(1);
-                if ( LA16_379=='e' ) {return s425;}
+                int LA16_389 = input.LA(1);
+                if ( LA16_389=='e' ) {return s438;}
                 return s51;
 
             }
         };
-        DFA.State s316 = new DFA.State() {
+        DFA.State s323 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_316 = input.LA(1);
-                if ( LA16_316=='h' ) {return s379;}
+                int LA16_323 = input.LA(1);
+                if ( LA16_323=='h' ) {return s389;}
                 return s51;
 
             }
         };
-        DFA.State s239 = new DFA.State() {
+        DFA.State s243 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_239 = input.LA(1);
-                if ( LA16_239=='c' ) {return s316;}
+                int LA16_243 = input.LA(1);
+                if ( LA16_243=='c' ) {return s323;}
                 return s51;
 
             }
         };
-        DFA.State s142 = new DFA.State() {
+        DFA.State s143 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_142 = input.LA(1);
-                if ( LA16_142=='t' ) {return s239;}
+                int LA16_143 = input.LA(1);
+                if ( LA16_143=='t' ) {return s243;}
                 return s51;
 
             }
@@ -4566,17 +4661,17 @@
         DFA.State s34 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_34 = input.LA(1);
-                if ( LA16_34=='a' ) {return s142;}
+                if ( LA16_34=='a' ) {return s143;}
                 return s51;
 
             }
         };
-        DFA.State s146 = new DFA.State() {{alt=51;}};
+        DFA.State s147 = new DFA.State() {{alt=52;}};
         DFA.State s36 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_36 = input.LA(1);
                 if ( (LA16_36>='0' && LA16_36<='9')||(LA16_36>='A' && LA16_36<='Z')||LA16_36=='_'||(LA16_36>='a' && LA16_36<='z')||(LA16_36>='\u00C0' && LA16_36<='\u00FF') ) {return s51;}
-                return s146;
+                return s147;
 
             }
         };
@@ -4584,38 +4679,38 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_40 = input.LA(1);
                 if ( (LA16_40>='0' && LA16_40<='9')||(LA16_40>='A' && LA16_40<='Z')||LA16_40=='_'||(LA16_40>='a' && LA16_40<='z')||(LA16_40>='\u00C0' && LA16_40<='\u00FF') ) {return s51;}
-                return s146;
+                return s147;
 
             }
         };
-        DFA.State s149 = new DFA.State() {{alt=61;}};
-        DFA.State s150 = new DFA.State() {{alt=60;}};
+        DFA.State s151 = new DFA.State() {{alt=61;}};
+        DFA.State s152 = new DFA.State() {{alt=62;}};
         DFA.State s43 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case '/':
+                    return s151;
+
                 case '*':
-                    return s149;
+                    return s152;
 
-                case '/':
-                    return s150;
-
                 default:
-                    return s146;
+                    return s147;
         	        }
             }
         };
-        DFA.State s50 = new DFA.State() {{alt=56;}};
+        DFA.State s50 = new DFA.State() {{alt=57;}};
         DFA.State s44 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_44 = input.LA(1);
                 if ( (LA16_44>='\u0000' && LA16_44<='\uFFFE') ) {return s50;}
-                return s146;
+                return s147;
 
             }
         };
-        DFA.State s46 = new DFA.State() {{alt=52;}};
-        DFA.State s47 = new DFA.State() {{alt=53;}};
-        DFA.State s52 = new DFA.State() {{alt=59;}};
+        DFA.State s46 = new DFA.State() {{alt=53;}};
+        DFA.State s47 = new DFA.State() {{alt=54;}};
+        DFA.State s52 = new DFA.State() {{alt=60;}};
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -4658,16 +4753,16 @@
                 case 'q':
                     return s13;
 
-                case 'r':
+                case 't':
                     return s14;
 
-                case 'w':
+                case 'r':
                     return s15;
 
-                case ':':
+                case 'w':
                     return s16;
 
-                case 't':
+                case ':':
                     return s17;
 
                 case 'a':

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g	2006-08-04 10:33:01 UTC (rev 5466)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g	2006-08-04 10:51:30 UTC (rev 5467)
@@ -258,6 +258,7 @@
 		prolog 
 		(	r=rule 	{this.packageDescr.addRule( r ); } 
 		| 	q=query	{this.packageDescr.addRule( q ); }
+		|	t=template	{this.packageDescr.addFactTemplate ( t ); }
 		|	extra_statement 
 		)*
 	;
@@ -384,7 +385,42 @@
 					
 		'end' opt_eol
 	;
-
+	
+template returns [FactTemplateDescr template]
+	@init {
+		template = null;		
+	}
+	:
+		opt_eol
+		loc='template' templateName=ID EOL
+		{
+			template = new FactTemplateDescr(templateName.getText());
+			template.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );			
+		}
+		(
+			slot=template_slot 
+			{
+				template.addFieldTemplate(slot);
+			}
+		)+
+		'end' EOL		
+	;
+	
+template_slot returns [FieldTemplateDescr field]
+	@init {
+		field = null;
+	}
+	:
+		//name=ID ':' fieldType=dotted_name ( EOL | ';' )
+		 fieldType=dotted_name name=ID ( EOL | ';' )
+		{
+			
+			
+			field = new FieldTemplateDescr(name.getText(), fieldType);
+			field.setLocation( offset(name.getLine()), name.getCharPositionInLine() );
+		}
+	;	
+	
 rule returns [RuleDescr rule]
 	@init {
 		rule = null;
@@ -1051,7 +1087,7 @@
 	|	'when'     { word="when"; }
 	|	'then'     { word="then"; }
 	|	'end'      { word="end"; }
-	|	str=STRING { word=getString(str);} //str.getText(); word=word.substring( 1, word.length()-1 ); }
+	|	str=STRING { word=getString(str);} 
 	;
 
 operator returns [String str] 	
@@ -1117,6 +1153,7 @@
 ID	
 	:	('a'..'z'|'A'..'Z'|'_'|'$' | '\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9' | '\u00c0'..'\u00ff')* 
 	;
+	
 		
 
 SH_STYLE_SINGLE_LINE_COMMENT	

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2006-08-04 10:33:01 UTC (rev 5466)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2006-08-04 10:51:30 UTC (rev 5467)
@@ -36,8 +36,10 @@
 import org.drools.lang.descr.ColumnDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.FactTemplateDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.FieldTemplateDescr;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.LiteralRestrictionDescr;
 import org.drools.lang.descr.NotDescr;
@@ -119,6 +121,51 @@
         
     }
     
+    public void testTemplates() throws Exception {
+        
+        final RuleParser parser = parseResource( "test_Templates.drl" );
+
+        parser.compilation_unit();
+        final PackageDescr pkg = parser.getPackageDescr();
+
+        if (parser.hasErrors()) {
+        	System.err.println("FACT TEMPLATES FAILED: " + parser.getErrorMessages());
+        }
+        assertFalse( parser.hasErrors() );
+        
+        assertEquals( 1, pkg.getRules().size() );
+        assertEquals(2, pkg.getFactTemplates().size());
+        
+        FactTemplateDescr fact1 = (FactTemplateDescr) pkg.getFactTemplates().get(0);
+        assertEquals("Cheese", fact1.getName());
+        assertEquals(2, fact1.getFields().size());
+        
+        assertEquals("name", ((FieldTemplateDescr)fact1.getFields().get(0)).getName());
+        assertEquals("String", ((FieldTemplateDescr)fact1.getFields().get(0)).getClassType());
+        
+        assertEquals("age", ((FieldTemplateDescr)fact1.getFields().get(1)).getName());
+        assertEquals("Integer", ((FieldTemplateDescr)fact1.getFields().get(1)).getClassType());
+        
+        fact1 = null;
+        
+        FactTemplateDescr fact2 = (FactTemplateDescr) pkg.getFactTemplates().get(1);
+        assertEquals("Wine", fact2.getName());
+        assertEquals(3, fact2.getFields().size());
+        
+        assertEquals("name", ((FieldTemplateDescr)fact2.getFields().get(0)).getName());
+        assertEquals("String", ((FieldTemplateDescr)fact2.getFields().get(0)).getClassType());
+
+        assertEquals("year", ((FieldTemplateDescr)fact2.getFields().get(1)).getName());
+        assertEquals("String", ((FieldTemplateDescr)fact2.getFields().get(1)).getClassType());
+        
+        assertEquals("accolades", ((FieldTemplateDescr)fact2.getFields().get(2)).getName());
+        assertEquals("String[]", ((FieldTemplateDescr)fact2.getFields().get(2)).getClassType());
+
+        
+        
+        
+    }    
+    
     public void testTernaryExpression() throws Exception {
 
         final RuleParser parser = parseResource( "ternary_expression.drl" );
@@ -157,10 +204,14 @@
     }
 
     public void testFunctionWithArrays() throws Exception {
-        final DrlParser parser = new DrlParser();
-        final Reader drl = new InputStreamReader( this.getClass().getResourceAsStream( "function_arrays.drl" ) );
+        RuleParser parser = parseResource( "function_arrays.drl" );
 
-        final PackageDescr pkg = parser.parse( drl );
+        parser.compilation_unit();
+        PackageDescr pkg = parser.getPackageDescr();
+        
+        if (parser.hasErrors()) {
+        	System.err.println(parser.getErrorMessages());
+        }
         assertFalse( parser.hasErrors() );
         assertEquals( "foo",
                       pkg.getName() );

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/test_Templates.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/test_Templates.drl	2006-08-04 10:33:01 UTC (rev 5466)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/test_Templates.drl	2006-08-04 10:51:30 UTC (rev 5467)
@@ -0,0 +1,21 @@
+package test.templates
+
+template Cheese
+	String 	name
+	Integer age
+end
+
+template Wine
+	String 		name
+	String 		year
+	String[] 	accolades
+end
+
+
+rule "a rule"
+  when
+	Cheese(name == "Stilton", age==2001)
+	Wine(name == "Grange", age == "1978", accolades contains "world champion")
+  then
+  	baz();
+end
\ No newline at end of file


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/test_Templates.drl
___________________________________________________________________
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list