[jboss-svn-commits] JBL Code SVN: r5850 - in labs/jbossrules/trunk/drools-compiler/src: main/java/org/drools/lang main/java/org/drools/lang/descr 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
Mon Aug 14 05:26:19 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-08-14 05:26:07 -0400 (Mon, 14 Aug 2006)
New Revision: 5850

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/java/org/drools/lang/descr/FromDescr.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
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/expander_post_errors.drl
Log:
JBRULES-341 - from language support

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-14 09:06:40 UTC (rev 5849)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java	2006-08-14 09:26:07 UTC (rev 5850)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-10 17:28:02
+// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-13 21:06:22
 
 	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\'", "\'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\'"
+        "<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\'", "\'from\'", "\'null\'", "\'or\'", "\'||\'", "\'&\'", "\'|\'", "\'->\'", "\'and\'", "\'&&\'", "\'exists\'", "\'not\'", "\'eval\'", "\'[\'", "\']\'", "\'use\'", "\'==\'", "\'=\'", "\'>\'", "\'>=\'", "\'<\'", "\'<=\'", "\'!=\'", "\'contains\'", "\'matches\'", "\'excludes\'"
     };
     public static final int BOOL=7;
     public static final int INT=6;
@@ -138,7 +138,7 @@
         	
             	/** Reparse the results of the expansion */
         	private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
-        		CharStream charStream = new ANTLRStringStream( text );
+        		CharStream charStream = new ANTLRStringStream( text  + " \n  then"); //need to then so it knows when to end... werd...
         		RuleParserLexer lexer = new RuleParserLexer( charStream );
         		TokenStream tokenStream = new CommonTokenStream( lexer );
         		RuleParser parser = new RuleParser( tokenStream );
@@ -936,7 +936,7 @@
 
 
     // $ANTLR start function
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:354: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:354:1: function : 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol ;
     public void function() throws RecognitionException {   
         Token name=null;
         String retType = null;
@@ -952,8 +952,8 @@
         		FunctionDescr f = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:359: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:359: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:359:17: ( 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:359:17: 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol
             {
             match(input,22,FOLLOW_22_in_function372); 
             following.push(FOLLOW_opt_eol_in_function374);
@@ -996,7 +996,7 @@
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:365: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:365:25: ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
             if ( (LA16_0>=EOL && LA16_0<=ID)||LA16_0==15 ) {
@@ -1007,13 +1007,13 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("365: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("365:25: ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( \',\' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name 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:365: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:365:33: (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )*
                     {
                     // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:365:33: (paramType= dotted_name )?
                     int alt13=2;
@@ -1036,8 +1036,8 @@
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_argument_in_function418);
-                    paramName=argument();
+                    following.push(FOLLOW_argument_name_in_function418);
+                    paramName=argument_name();
                     following.pop();
 
                     following.push(FOLLOW_opt_eol_in_function420);
@@ -1047,7 +1047,7 @@
 
                     					f.addParameter( paramType, paramName );
                     				
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:369: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:369:33: ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )*
                     loop15:
                     do {
                         int alt15=2;
@@ -1059,7 +1059,7 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:369: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:369:41: ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol
                     	    {
                     	    match(input,24,FOLLOW_24_in_function434); 
                     	    following.push(FOLLOW_opt_eol_in_function436);
@@ -1087,8 +1087,8 @@
                     	    opt_eol();
                     	    following.pop();
 
-                    	    following.push(FOLLOW_argument_in_function449);
-                    	    paramName=argument();
+                    	    following.push(FOLLOW_argument_name_in_function449);
+                    	    paramName=argument_name();
                     	    following.pop();
 
                     	    following.push(FOLLOW_opt_eol_in_function451);
@@ -1232,7 +1232,7 @@
                     throw nvae;
                 }
                 break;
-            case 50:
+            case 51:
                 int LA17_4 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1247,7 +1247,7 @@
                     throw nvae;
                 }
                 break;
-            case 51:
+            case 52:
                 int LA17_5 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1262,7 +1262,7 @@
                     throw nvae;
                 }
                 break;
-            case 52:
+            case 53:
                 int LA17_6 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1348,7 +1348,7 @@
             case 47:
             case 48:
             case 49:
-            case 53:
+            case 50:
             case 54:
             case 55:
             case 56:
@@ -1361,6 +1361,7 @@
             case 63:
             case 64:
             case 65:
+            case 66:
                 alt17=1;
                 break;
             default:
@@ -1696,7 +1697,7 @@
                                     throw nvae;
                                 }
                             }
-                            else if ( (LA20_0>=EOL && LA20_0<=32)||(LA20_0>=34 && LA20_0<=65) ) {
+                            else if ( (LA20_0>=EOL && LA20_0<=32)||(LA20_0>=34 && LA20_0<=66) ) {
                                 alt20=2;
                             }
                             else {
@@ -1802,7 +1803,7 @@
                                     throw nvae;
                                 }
                                 break;
-                            case 50:
+                            case 51:
                                 int LA21_6 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt21=1;
@@ -1817,7 +1818,7 @@
                                     throw nvae;
                                 }
                                 break;
-                            case 51:
+                            case 52:
                                 int LA21_7 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt21=1;
@@ -1832,7 +1833,7 @@
                                     throw nvae;
                                 }
                                 break;
-                            case 52:
+                            case 53:
                                 int LA21_8 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt21=1;
@@ -1902,7 +1903,7 @@
                             case 47:
                             case 48:
                             case 49:
-                            case 53:
+                            case 50:
                             case 54:
                             case 55:
                             case 56:
@@ -1915,6 +1916,7 @@
                             case 63:
                             case 64:
                             case 65:
+                            case 66:
                                 alt21=1;
                                 break;
                             default:
@@ -1988,7 +1990,7 @@
                             if ( LA23_0==33 ) {
                                 alt23=1;
                             }
-                            else if ( (LA23_0>=EOL && LA23_0<=32)||(LA23_0>=34 && LA23_0<=65) ) {
+                            else if ( (LA23_0>=EOL && LA23_0<=32)||(LA23_0>=34 && LA23_0<=66) ) {
                                 alt23=2;
                             }
                             else {
@@ -2020,7 +2022,7 @@
                                 if ( LA24_0==29 ) {
                                     alt24=2;
                                 }
-                                else if ( (LA24_0>=EOL && LA24_0<=28)||(LA24_0>=30 && LA24_0<=65) ) {
+                                else if ( (LA24_0>=EOL && LA24_0<=28)||(LA24_0>=30 && LA24_0<=66) ) {
                                     alt24=1;
                                 }
 
@@ -3034,7 +3036,7 @@
             do {
                 int alt43=2;
                 int LA43_0 = input.LA(1);
-                if ( LA43_0==ID||LA43_0==23||(LA43_0>=50 && LA43_0<=52) ) {
+                if ( LA43_0==ID||LA43_0==23||(LA43_0>=51 && LA43_0<=53) ) {
                     alt43=1;
                 }
 
@@ -3168,6 +3170,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     alt44=1;
                     break;
                 case 15:
@@ -3326,8 +3329,397 @@
     // $ANTLR end lhs_column
 
 
+    // $ANTLR start from_statement
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:699:1: from_statement returns [FromDescr d] : 'from' opt_eol ds= from_source ;
+    public FromDescr from_statement() throws RecognitionException {   
+        FromDescr d;
+        DeclarativeInvokerDescr ds = null;
+
+
+
+        		d=new FromDescr();
+        	
+        try {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: ( 'from' opt_eol ds= from_source )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: 'from' opt_eol ds= from_source
+            {
+            match(input,42,FOLLOW_42_in_from_statement1599); 
+            following.push(FOLLOW_opt_eol_in_from_statement1601);
+            opt_eol();
+            following.pop();
+
+            following.push(FOLLOW_from_source_in_from_statement1605);
+            ds=from_source();
+            following.pop();
+
+
+             			d.setDataSource(ds);
+             		
+             		
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return d;
+    }
+    // $ANTLR end from_statement
+
+
+    // $ANTLR start from_source
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:714:1: from_source returns [DeclarativeInvokerDescr ds] : ( (var= ID '.' field= ID ) | (var= ID '.' method= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' ) | (functionName= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' ) );
+    public DeclarativeInvokerDescr from_source() throws RecognitionException {   
+        DeclarativeInvokerDescr ds;
+        Token var=null;
+        Token field=null;
+        Token method=null;
+        Token functionName=null;
+        ArrayList args = null;
+
+
+
+        		ds = null;
+        	
+        try {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:719:17: ( (var= ID '.' field= ID ) | (var= ID '.' method= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' ) | (functionName= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' ) )
+            int alt46=3;
+            alt46 = dfa46.predict(input); 
+            switch (alt46) {
+                case 1 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:719:17: (var= ID '.' field= ID )
+                    {
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:719:17: (var= ID '.' field= ID )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:719:18: var= ID '.' field= ID
+                    {
+                    var=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_from_source1649); 
+                    match(input,18,FOLLOW_18_in_from_source1651); 
+                    field=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_from_source1655); 
+
+                    			  FieldAccessDescr fa = new FieldAccessDescr(var.getText(), field.getText());	
+                    			  fa.setLine(var.getLine());
+                    			  ds = fa;
+                    			 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:729:17: (var= ID '.' method= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' )
+                    {
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:729:17: (var= ID '.' method= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:729:18: var= ID '.' method= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')'
+                    {
+                    var=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_from_source1682); 
+                    match(input,18,FOLLOW_18_in_from_source1684); 
+                    method=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_from_source1688); 
+                    following.push(FOLLOW_opt_eol_in_from_source1690);
+                    opt_eol();
+                    following.pop();
+
+                    match(input,23,FOLLOW_23_in_from_source1693); 
+                    following.push(FOLLOW_opt_eol_in_from_source1695);
+                    opt_eol();
+                    following.pop();
+
+                    following.push(FOLLOW_parameter_list_in_from_source1699);
+                    args=parameter_list();
+                    following.pop();
+
+                    following.push(FOLLOW_opt_eol_in_from_source1701);
+                    opt_eol();
+                    following.pop();
+
+                    match(input,25,FOLLOW_25_in_from_source1703); 
+
+                    			MethodAccessDescr mc = new MethodAccessDescr(var.getText(), method.getText());
+                    			mc.setArguments(args);
+                    			mc.setLine(var.getLine());
+                    			ds = mc;
+                    			
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:738:17: (functionName= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' )
+                    {
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:738:17: (functionName= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:738:18: functionName= ID opt_eol '(' opt_eol args= parameter_list opt_eol ')'
+                    {
+                    functionName=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_from_source1725); 
+                    following.push(FOLLOW_opt_eol_in_from_source1727);
+                    opt_eol();
+                    following.pop();
+
+                    match(input,23,FOLLOW_23_in_from_source1729); 
+                    following.push(FOLLOW_opt_eol_in_from_source1731);
+                    opt_eol();
+                    following.pop();
+
+                    following.push(FOLLOW_parameter_list_in_from_source1735);
+                    args=parameter_list();
+                    following.pop();
+
+                    following.push(FOLLOW_opt_eol_in_from_source1737);
+                    opt_eol();
+                    following.pop();
+
+                    match(input,25,FOLLOW_25_in_from_source1739); 
+
+                    			FunctionCallDescr fc = new FunctionCallDescr(functionName.getText());
+                    			fc.setLine(functionName.getLine());
+                    			fc.setArguments(args);
+                    			ds = fc;
+                    			
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ds;
+    }
+    // $ANTLR end from_source
+
+
+    // $ANTLR start parameter_list
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:751:1: parameter_list returns [ArrayList args] : (param= parameter_value ( opt_eol ',' opt_eol param= parameter_value )* )? ;
+    public ArrayList parameter_list() throws RecognitionException {   
+        ArrayList args;
+        String param = null;
+
+
+
+        		args = new ArrayList();
+        	
+        try {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:756:17: ( (param= parameter_value ( opt_eol ',' opt_eol param= parameter_value )* )? )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:756:17: (param= parameter_value ( opt_eol ',' opt_eol param= parameter_value )* )?
+            {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:756:17: (param= parameter_value ( opt_eol ',' opt_eol param= parameter_value )* )?
+            int alt48=2;
+            int LA48_0 = input.LA(1);
+            if ( (LA48_0>=ID && LA48_0<=FLOAT)||LA48_0==43 ) {
+                alt48=1;
+            }
+            else if ( LA48_0==EOL||LA48_0==15||LA48_0==25 ) {
+                alt48=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("756:17: (param= parameter_value ( opt_eol \',\' opt_eol param= parameter_value )* )?", 48, 0, input);
+
+                throw nvae;
+            }
+            switch (alt48) {
+                case 1 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:756:18: param= parameter_value ( opt_eol ',' opt_eol param= parameter_value )*
+                    {
+                    following.push(FOLLOW_parameter_value_in_parameter_list1782);
+                    param=parameter_value();
+                    following.pop();
+
+
+                    			if (param != null) {
+                    				args.add(param);
+                    			}
+                    		
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:762:17: ( opt_eol ',' opt_eol param= parameter_value )*
+                    loop47:
+                    do {
+                        int alt47=2;
+                        alt47 = dfa47.predict(input); 
+                        switch (alt47) {
+                    	case 1 :
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:763:25: opt_eol ',' opt_eol param= parameter_value
+                    	    {
+                    	    following.push(FOLLOW_opt_eol_in_parameter_list1798);
+                    	    opt_eol();
+                    	    following.pop();
+
+                    	    match(input,24,FOLLOW_24_in_parameter_list1800); 
+                    	    following.push(FOLLOW_opt_eol_in_parameter_list1802);
+                    	    opt_eol();
+                    	    following.pop();
+
+                    	    following.push(FOLLOW_parameter_value_in_parameter_list1806);
+                    	    param=parameter_value();
+                    	    following.pop();
+
+
+                    	    				if (param != null) {
+                    	    					args.add(param);
+                    	    				}
+                    	    			
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop47;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return args;
+    }
+    // $ANTLR end parameter_list
+
+
+    // $ANTLR start parameter_value
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:772:1: parameter_value returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' ) ;
+    public String parameter_value() throws RecognitionException {   
+        String text;
+        Token t=null;
+
+
+        		text = null;
+        	
+        try {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:776:17: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:776:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' )
+            {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:776:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' )
+            int alt49=6;
+            switch ( input.LA(1) ) {
+            case STRING:
+                alt49=1;
+                break;
+            case INT:
+                alt49=2;
+                break;
+            case FLOAT:
+                alt49=3;
+                break;
+            case BOOL:
+                alt49=4;
+                break;
+            case ID:
+                alt49=5;
+                break;
+            case 43:
+                alt49=6;
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("776:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= \'null\' )", 49, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt49) {
+                case 1 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:776:25: t= STRING
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_parameter_value1844); 
+                     text = getString( t ); 
+
+                    }
+                    break;
+                case 2 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:777:25: t= INT
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_parameter_value1855); 
+                     text = t.getText(); 
+
+                    }
+                    break;
+                case 3 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:778:25: t= FLOAT
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,FLOAT,FOLLOW_FLOAT_in_parameter_value1868); 
+                     text = t.getText(); 
+
+                    }
+                    break;
+                case 4 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:779:25: t= BOOL
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_parameter_value1879); 
+                     text = t.getText(); 
+
+                    }
+                    break;
+                case 5 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:780:25: t= ID
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_parameter_value1891); 
+                     text = t.getText(); 
+
+                    }
+                    break;
+                case 6 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:781:25: t= 'null'
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,43,FOLLOW_43_in_parameter_value1902); 
+                     text = "null"; 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return text;
+    }
+    // $ANTLR end parameter_value
+
+
     // $ANTLR start fact_binding
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:699: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:785: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;
@@ -3339,21 +3731,21 @@
         		boolean multi=false;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:705: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:705: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:791: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:791:17: id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()]
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_fact_binding1603); 
-            following.push(FOLLOW_opt_eol_in_fact_binding1613);
+            match(input,ID,FOLLOW_ID_in_fact_binding1941); 
+            following.push(FOLLOW_opt_eol_in_fact_binding1951);
             opt_eol();
             following.pop();
 
-            match(input,33,FOLLOW_33_in_fact_binding1615); 
-            following.push(FOLLOW_opt_eol_in_fact_binding1617);
+            match(input,33,FOLLOW_33_in_fact_binding1953); 
+            following.push(FOLLOW_opt_eol_in_fact_binding1955);
             opt_eol();
             following.pop();
 
-            following.push(FOLLOW_fact_expression_in_fact_binding1621);
+            following.push(FOLLOW_fact_expression_in_fact_binding1959);
             fe=fact_expression(id.getText());
             following.pop();
 
@@ -3376,7 +3768,7 @@
 
 
     // $ANTLR start fact_expression
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:713: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:799: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;
@@ -3389,51 +3781,51 @@
          		boolean multi = false;
          	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:718: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;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:804:17: ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* )
+            int alt51=2;
+            int LA51_0 = input.LA(1);
+            if ( LA51_0==23 ) {
+                alt51=1;
             }
-            else if ( LA47_0==ID ) {
-                alt47=2;
+            else if ( LA51_0==ID ) {
+                alt51=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("713: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);
+                    new NoViableAltException("799: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 )* );", 51, 0, input);
 
                 throw nvae;
             }
-            switch (alt47) {
+            switch (alt51) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:718:17: '(' opt_eol fe= fact_expression[id] opt_eol ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:804:17: '(' opt_eol fe= fact_expression[id] opt_eol ')'
                     {
-                    match(input,23,FOLLOW_23_in_fact_expression1653); 
-                    following.push(FOLLOW_opt_eol_in_fact_expression1655);
+                    match(input,23,FOLLOW_23_in_fact_expression1991); 
+                    following.push(FOLLOW_opt_eol_in_fact_expression1993);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_fact_expression_in_fact_expression1659);
+                    following.push(FOLLOW_fact_expression_in_fact_expression1997);
                     fe=fact_expression(id);
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_fact_expression1661);
+                    following.push(FOLLOW_opt_eol_in_fact_expression1999);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_fact_expression1663); 
+                    match(input,25,FOLLOW_25_in_fact_expression2001); 
                      pd=fe; 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:719: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:805:17: f= fact opt_eol ( ('or'|'||') opt_eol f= fact )*
                     {
-                    following.push(FOLLOW_fact_in_fact_expression1674);
+                    following.push(FOLLOW_fact_in_fact_expression2012);
                     f=fact();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_fact_expression1676);
+                    following.push(FOLLOW_opt_eol_in_fact_expression2014);
                     opt_eol();
                     following.pop();
 
@@ -3441,31 +3833,31 @@
                      			((ColumnDescr)f).setIdentifier( id );
                      			pd = f;
                      		
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:724:17: ( ('or'|'||') opt_eol f= fact )*
-                    loop46:
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:810:17: ( ('or'|'||') opt_eol f= fact )*
+                    loop50:
                     do {
-                        int alt46=2;
-                        int LA46_0 = input.LA(1);
-                        if ( (LA46_0>=42 && LA46_0<=43) ) {
-                            alt46=1;
+                        int alt50=2;
+                        int LA50_0 = input.LA(1);
+                        if ( (LA50_0>=44 && LA50_0<=45) ) {
+                            alt50=1;
                         }
 
 
-                        switch (alt46) {
+                        switch (alt50) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:724:25: ('or'|'||') opt_eol f= fact
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:810:25: ('or'|'||') opt_eol f= fact
                     	    {
-                    	    if ( (input.LA(1)>=42 && input.LA(1)<=43) ) {
+                    	    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_fact_expression1689);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_expression2027);    throw mse;
                     	    }
 
-                    	    following.push(FOLLOW_opt_eol_in_fact_expression1694);
+                    	    following.push(FOLLOW_opt_eol_in_fact_expression2032);
                     	    opt_eol();
                     	    following.pop();
 
@@ -3476,7 +3868,7 @@
                     	     					multi=true;
                     	     				}
                     	     			
-                    	    following.push(FOLLOW_fact_in_fact_expression1708);
+                    	    following.push(FOLLOW_fact_in_fact_expression2046);
                     	    f=fact();
                     	    following.pop();
 
@@ -3489,7 +3881,7 @@
                     	    break;
 
                     	default :
-                    	    break loop46;
+                    	    break loop50;
                         }
                     } while (true);
 
@@ -3511,7 +3903,7 @@
 
 
     // $ANTLR start fact
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:740: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:826: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;
@@ -3525,37 +3917,37 @@
         		d=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:744: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:744: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:830: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:830:17: id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol
             {
-            following.push(FOLLOW_dotted_name_in_fact1747);
+            following.push(FOLLOW_dotted_name_in_fact2085);
             id=dotted_name();
             following.pop();
 
              
              			d = new ColumnDescr( id ); 
              		
-            following.push(FOLLOW_opt_eol_in_fact1755);
+            following.push(FOLLOW_opt_eol_in_fact2093);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,23,FOLLOW_23_in_fact1763); 
+            match(input,23,FOLLOW_23_in_fact2101); 
 
              				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
              			
-            following.push(FOLLOW_opt_eol_in_fact1766);
+            following.push(FOLLOW_opt_eol_in_fact2104);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:750:34: (c= constraints )?
-            int alt48=2;
-            alt48 = dfa48.predict(input); 
-            switch (alt48) {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:34: (c= constraints )?
+            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:750:41: c= constraints
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:41: c= constraints
                     {
-                    following.push(FOLLOW_constraints_in_fact1772);
+                    following.push(FOLLOW_constraints_in_fact2110);
                     c=constraints();
                     following.pop();
 
@@ -3570,13 +3962,13 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_fact1791);
+            following.push(FOLLOW_opt_eol_in_fact2129);
             opt_eol();
             following.pop();
 
             endLoc=(Token)input.LT(1);
-            match(input,25,FOLLOW_25_in_fact1795); 
-            following.push(FOLLOW_opt_eol_in_fact1797);
+            match(input,25,FOLLOW_25_in_fact2133); 
+            following.push(FOLLOW_opt_eol_in_fact2135);
             opt_eol();
             following.pop();
 
@@ -3599,76 +3991,76 @@
 
 
     // $ANTLR start constraints
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:764: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:850: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:768: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:768: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:854: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:854:17: opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_constraints1829);
+            following.push(FOLLOW_opt_eol_in_constraints2167);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:769:17: ( 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:855:17: ( constraint[constraints] | predicate[constraints] )
+            int alt53=2;
+            int LA53_0 = input.LA(1);
+            if ( LA53_0==EOL||LA53_0==15 ) {
+                alt53=1;
             }
-            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 ( LA53_0==ID ) {
+                int LA53_2 = input.LA(2);
+                if ( LA53_2==33 ) {
+                    int LA53_3 = input.LA(3);
+                    if ( LA53_3==ID ) {
+                        int LA53_17 = input.LA(4);
+                        if ( LA53_17==48 ) {
+                            alt53=2;
                         }
-                        else if ( LA49_17==EOL||LA49_17==15||(LA49_17>=24 && LA49_17<=25)||(LA49_17>=56 && LA49_17<=65) ) {
-                            alt49=1;
+                        else if ( LA53_17==EOL||LA53_17==15||(LA53_17>=24 && LA53_17<=25)||(LA53_17>=57 && LA53_17<=66) ) {
+                            alt53=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("769:17: ( constraint[constraints] | predicate[constraints] )", 49, 17, input);
+                                new NoViableAltException("855:17: ( constraint[constraints] | predicate[constraints] )", 53, 17, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( LA49_3==EOL||LA49_3==15 ) {
-                        alt49=1;
+                    else if ( LA53_3==EOL||LA53_3==15 ) {
+                        alt53=1;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("769:17: ( constraint[constraints] | predicate[constraints] )", 49, 3, input);
+                            new NoViableAltException("855:17: ( constraint[constraints] | predicate[constraints] )", 53, 3, input);
 
                         throw nvae;
                     }
                 }
-                else if ( LA49_2==EOL||LA49_2==15||(LA49_2>=24 && LA49_2<=25)||(LA49_2>=56 && LA49_2<=65) ) {
-                    alt49=1;
+                else if ( LA53_2==EOL||LA53_2==15||(LA53_2>=24 && LA53_2<=25)||(LA53_2>=57 && LA53_2<=66) ) {
+                    alt53=1;
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("769:17: ( constraint[constraints] | predicate[constraints] )", 49, 2, input);
+                        new NoViableAltException("855:17: ( constraint[constraints] | predicate[constraints] )", 53, 2, input);
 
                     throw nvae;
                 }
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("769:17: ( constraint[constraints] | predicate[constraints] )", 49, 0, input);
+                    new NoViableAltException("855:17: ( constraint[constraints] | predicate[constraints] )", 53, 0, input);
 
                 throw nvae;
             }
-            switch (alt49) {
+            switch (alt53) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:769:18: constraint[constraints]
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:855:18: constraint[constraints]
                     {
-                    following.push(FOLLOW_constraint_in_constraints1834);
+                    following.push(FOLLOW_constraint_in_constraints2172);
                     constraint(constraints);
                     following.pop();
 
@@ -3676,9 +4068,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:769:42: predicate[constraints]
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:855:42: predicate[constraints]
                     {
-                    following.push(FOLLOW_predicate_in_constraints1837);
+                    following.push(FOLLOW_predicate_in_constraints2175);
                     predicate(constraints);
                     following.pop();
 
@@ -3688,80 +4080,80 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:770:17: ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )*
-            loop51:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:856:17: ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )*
+            loop55:
             do {
-                int alt51=2;
-                alt51 = dfa51.predict(input); 
-                switch (alt51) {
+                int alt55=2;
+                alt55 = dfa55.predict(input); 
+                switch (alt55) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:770:19: opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] )
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:856:19: opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] )
             	    {
-            	    following.push(FOLLOW_opt_eol_in_constraints1845);
+            	    following.push(FOLLOW_opt_eol_in_constraints2183);
             	    opt_eol();
             	    following.pop();
 
-            	    match(input,24,FOLLOW_24_in_constraints1847); 
-            	    following.push(FOLLOW_opt_eol_in_constraints1849);
+            	    match(input,24,FOLLOW_24_in_constraints2185); 
+            	    following.push(FOLLOW_opt_eol_in_constraints2187);
             	    opt_eol();
             	    following.pop();
 
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:770:39: ( constraint[constraints] | predicate[constraints] )
-            	    int alt50=2;
-            	    int LA50_0 = input.LA(1);
-            	    if ( LA50_0==EOL||LA50_0==15 ) {
-            	        alt50=1;
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:856:39: ( constraint[constraints] | predicate[constraints] )
+            	    int alt54=2;
+            	    int LA54_0 = input.LA(1);
+            	    if ( LA54_0==EOL||LA54_0==15 ) {
+            	        alt54=1;
             	    }
-            	    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 ( LA54_0==ID ) {
+            	        int LA54_2 = input.LA(2);
+            	        if ( LA54_2==33 ) {
+            	            int LA54_3 = input.LA(3);
+            	            if ( LA54_3==ID ) {
+            	                int LA54_17 = input.LA(4);
+            	                if ( LA54_17==48 ) {
+            	                    alt54=2;
             	                }
-            	                else if ( LA50_17==EOL||LA50_17==15||(LA50_17>=24 && LA50_17<=25)||(LA50_17>=56 && LA50_17<=65) ) {
-            	                    alt50=1;
+            	                else if ( LA54_17==EOL||LA54_17==15||(LA54_17>=24 && LA54_17<=25)||(LA54_17>=57 && LA54_17<=66) ) {
+            	                    alt54=1;
             	                }
             	                else {
             	                    NoViableAltException nvae =
-            	                        new NoViableAltException("770:39: ( constraint[constraints] | predicate[constraints] )", 50, 17, input);
+            	                        new NoViableAltException("856:39: ( constraint[constraints] | predicate[constraints] )", 54, 17, input);
 
             	                    throw nvae;
             	                }
             	            }
-            	            else if ( LA50_3==EOL||LA50_3==15 ) {
-            	                alt50=1;
+            	            else if ( LA54_3==EOL||LA54_3==15 ) {
+            	                alt54=1;
             	            }
             	            else {
             	                NoViableAltException nvae =
-            	                    new NoViableAltException("770:39: ( constraint[constraints] | predicate[constraints] )", 50, 3, input);
+            	                    new NoViableAltException("856:39: ( constraint[constraints] | predicate[constraints] )", 54, 3, input);
 
             	                throw nvae;
             	            }
             	        }
-            	        else if ( LA50_2==EOL||LA50_2==15||(LA50_2>=24 && LA50_2<=25)||(LA50_2>=56 && LA50_2<=65) ) {
-            	            alt50=1;
+            	        else if ( LA54_2==EOL||LA54_2==15||(LA54_2>=24 && LA54_2<=25)||(LA54_2>=57 && LA54_2<=66) ) {
+            	            alt54=1;
             	        }
             	        else {
             	            NoViableAltException nvae =
-            	                new NoViableAltException("770:39: ( constraint[constraints] | predicate[constraints] )", 50, 2, input);
+            	                new NoViableAltException("856:39: ( constraint[constraints] | predicate[constraints] )", 54, 2, input);
 
             	            throw nvae;
             	        }
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("770:39: ( constraint[constraints] | predicate[constraints] )", 50, 0, input);
+            	            new NoViableAltException("856:39: ( constraint[constraints] | predicate[constraints] )", 54, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt50) {
+            	    switch (alt54) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:770:40: constraint[constraints]
+            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:856:40: constraint[constraints]
             	            {
-            	            following.push(FOLLOW_constraint_in_constraints1852);
+            	            following.push(FOLLOW_constraint_in_constraints2190);
             	            constraint(constraints);
             	            following.pop();
 
@@ -3769,9 +4161,9 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:770:64: predicate[constraints]
+            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:856:64: predicate[constraints]
             	            {
-            	            following.push(FOLLOW_predicate_in_constraints1855);
+            	            following.push(FOLLOW_predicate_in_constraints2193);
             	            predicate(constraints);
             	            following.pop();
 
@@ -3786,11 +4178,11 @@
             	    break;
 
             	default :
-            	    break loop51;
+            	    break loop55;
                 }
             } while (true);
 
-            following.push(FOLLOW_opt_eol_in_constraints1863);
+            following.push(FOLLOW_opt_eol_in_constraints2201);
             opt_eol();
             following.pop();
 
@@ -3810,7 +4202,7 @@
 
 
     // $ANTLR start constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:774: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:860: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;
@@ -3827,28 +4219,28 @@
         		PatternDescr d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:778: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:778: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:864: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:864: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_constraint1882);
+            following.push(FOLLOW_opt_eol_in_constraint2220);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:779:17: (fb= ID opt_eol ':' opt_eol )?
-            int alt52=2;
-            alt52 = dfa52.predict(input); 
-            switch (alt52) {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:865:17: (fb= ID opt_eol ':' opt_eol )?
+            int alt56=2;
+            alt56 = dfa56.predict(input); 
+            switch (alt56) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:779:19: fb= ID opt_eol ':' opt_eol
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:865:19: fb= ID opt_eol ':' opt_eol
                     {
                     fb=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_constraint1890); 
-                    following.push(FOLLOW_opt_eol_in_constraint1892);
+                    match(input,ID,FOLLOW_ID_in_constraint2228); 
+                    following.push(FOLLOW_opt_eol_in_constraint2230);
                     opt_eol();
                     following.pop();
 
-                    match(input,33,FOLLOW_33_in_constraint1894); 
-                    following.push(FOLLOW_opt_eol_in_constraint1896);
+                    match(input,33,FOLLOW_33_in_constraint2232); 
+                    following.push(FOLLOW_opt_eol_in_constraint2234);
                     opt_eol();
                     following.pop();
 
@@ -3859,7 +4251,7 @@
             }
 
             f=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_constraint1906); 
+            match(input,ID,FOLLOW_ID_in_constraint2244); 
 
 
             			if ( fb != null ) {
@@ -3876,51 +4268,51 @@
             									
             			
             		
-            following.push(FOLLOW_opt_eol_in_constraint1920);
+            following.push(FOLLOW_opt_eol_in_constraint2258);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:797: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;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:883: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 alt60=2;
+            int LA60_0 = input.LA(1);
+            if ( (LA60_0>=57 && LA60_0<=66) ) {
+                alt60=1;
             }
-            else if ( LA56_0==EOL||LA56_0==15||(LA56_0>=24 && LA56_0<=25) ) {
-                alt56=2;
+            else if ( LA60_0==EOL||LA60_0==15||(LA60_0>=24 && LA60_0<=25) ) {
+                alt60=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("797: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);
+                    new NoViableAltException("883: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 ) )* )?", 60, 0, input);
 
                 throw nvae;
             }
-            switch (alt56) {
+            switch (alt60) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:797: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:883: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_constraint1926);
+                    following.push(FOLLOW_operator_in_constraint2264);
                     op=operator();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_constraint1928);
+                    following.push(FOLLOW_opt_eol_in_constraint2266);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:799:41: (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:885:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    int alt57=4;
                     switch ( input.LA(1) ) {
                     case ID:
-                        int LA53_1 = input.LA(2);
-                        if ( LA53_1==18 ) {
-                            alt53=2;
+                        int LA57_1 = input.LA(2);
+                        if ( LA57_1==18 ) {
+                            alt57=2;
                         }
-                        else if ( LA53_1==EOL||LA53_1==15||(LA53_1>=24 && LA53_1<=25)||(LA53_1>=44 && LA53_1<=45) ) {
-                            alt53=1;
+                        else if ( LA57_1==EOL||LA57_1==15||(LA57_1>=24 && LA57_1<=25)||(LA57_1>=46 && LA57_1<=47) ) {
+                            alt57=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("799:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 1, input);
+                                new NoViableAltException("885:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 57, 1, input);
 
                             throw nvae;
                         }
@@ -3929,25 +4321,25 @@
                     case BOOL:
                     case STRING:
                     case FLOAT:
-                    case 46:
-                        alt53=3;
+                    case 43:
+                        alt57=3;
                         break;
                     case 23:
-                        alt53=4;
+                        alt57=4;
                         break;
                     default:
                         NoViableAltException nvae =
-                            new NoViableAltException("799:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 0, input);
+                            new NoViableAltException("885:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 57, 0, input);
 
                         throw nvae;
                     }
 
-                    switch (alt53) {
+                    switch (alt57) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:799:49: bvc= ID
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:885:49: bvc= ID
                             {
                             bvc=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_constraint1946); 
+                            match(input,ID,FOLLOW_ID_in_constraint2284); 
 
                             							
                             														
@@ -3961,9 +4353,9 @@
                             }
                             break;
                         case 2 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:810:49: lc= enum_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:896:49: lc= enum_constraint
                             {
-                            following.push(FOLLOW_enum_constraint_in_constraint1971);
+                            following.push(FOLLOW_enum_constraint_in_constraint2309);
                             lc=enum_constraint();
                             following.pop();
 
@@ -3978,9 +4370,9 @@
                             }
                             break;
                         case 3 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:819:49: lc= literal_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:905:49: lc= literal_constraint
                             {
-                            following.push(FOLLOW_literal_constraint_in_constraint2003);
+                            following.push(FOLLOW_literal_constraint_in_constraint2341);
                             lc=literal_constraint();
                             following.pop();
 
@@ -3995,9 +4387,9 @@
                             }
                             break;
                         case 4 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:827:49: rvc= retval_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:913:49: rvc= retval_constraint
                             {
-                            following.push(FOLLOW_retval_constraint_in_constraint2023);
+                            following.push(FOLLOW_retval_constraint_in_constraint2361);
                             rvc=retval_constraint();
                             following.pop();
 
@@ -4016,29 +4408,29 @@
 
                     }
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:838:41: (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
-                    loop55:
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:924:41: (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
+                    loop59:
                     do {
-                        int alt55=2;
-                        int LA55_0 = input.LA(1);
-                        if ( (LA55_0>=44 && LA55_0<=45) ) {
-                            alt55=1;
+                        int alt59=2;
+                        int LA59_0 = input.LA(1);
+                        if ( (LA59_0>=46 && LA59_0<=47) ) {
+                            alt59=1;
                         }
 
 
-                        switch (alt55) {
+                        switch (alt59) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:839: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:925:49: con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
                     	    {
                     	    con=(Token)input.LT(1);
-                    	    if ( (input.LA(1)>=44 && input.LA(1)<=45) ) {
+                    	    if ( (input.LA(1)>=46 && input.LA(1)<=47) ) {
                     	        input.consume();
                     	        errorRecovery=false;
                     	    }
                     	    else {
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2058);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2396);    throw mse;
                     	    }
 
 
@@ -4048,24 +4440,24 @@
                     	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
                     	    							}							
                     	    						
-                    	    following.push(FOLLOW_operator_in_constraint2080);
+                    	    following.push(FOLLOW_operator_in_constraint2418);
                     	    op=operator();
                     	    following.pop();
 
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
-                    	    int alt54=4;
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:935:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    	    int alt58=4;
                     	    switch ( input.LA(1) ) {
                     	    case ID:
-                    	        int LA54_1 = input.LA(2);
-                    	        if ( LA54_1==18 ) {
-                    	            alt54=2;
+                    	        int LA58_1 = input.LA(2);
+                    	        if ( LA58_1==18 ) {
+                    	            alt58=2;
                     	        }
-                    	        else if ( LA54_1==EOL||LA54_1==15||(LA54_1>=24 && LA54_1<=25)||(LA54_1>=44 && LA54_1<=45) ) {
-                    	            alt54=1;
+                    	        else if ( LA58_1==EOL||LA58_1==15||(LA58_1>=24 && LA58_1<=25)||(LA58_1>=46 && LA58_1<=47) ) {
+                    	            alt58=1;
                     	        }
                     	        else {
                     	            NoViableAltException nvae =
-                    	                new NoViableAltException("849:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 54, 1, input);
+                    	                new NoViableAltException("935:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 58, 1, input);
 
                     	            throw nvae;
                     	        }
@@ -4074,25 +4466,25 @@
                     	    case BOOL:
                     	    case STRING:
                     	    case FLOAT:
-                    	    case 46:
-                    	        alt54=3;
+                    	    case 43:
+                    	        alt58=3;
                     	        break;
                     	    case 23:
-                    	        alt54=4;
+                    	        alt58=4;
                     	        break;
                     	    default:
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("849:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 54, 0, input);
+                    	            new NoViableAltException("935:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 58, 0, input);
 
                     	        throw nvae;
                     	    }
 
-                    	    switch (alt54) {
+                    	    switch (alt58) {
                     	        case 1 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:57: bvc= ID
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:935:57: bvc= ID
                     	            {
                     	            bvc=(Token)input.LT(1);
-                    	            match(input,ID,FOLLOW_ID_in_constraint2092); 
+                    	            match(input,ID,FOLLOW_ID_in_constraint2430); 
 
                     	            								VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
                     	            								fc.addRestriction(vd);
@@ -4101,9 +4493,9 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:855:57: lc= enum_constraint
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:941:57: lc= enum_constraint
                     	            {
-                    	            following.push(FOLLOW_enum_constraint_in_constraint2120);
+                    	            following.push(FOLLOW_enum_constraint_in_constraint2458);
                     	            lc=enum_constraint();
                     	            following.pop();
 
@@ -4116,9 +4508,9 @@
                     	            }
                     	            break;
                     	        case 3 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:862:57: lc= literal_constraint
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:948:57: lc= literal_constraint
                     	            {
-                    	            following.push(FOLLOW_literal_constraint_in_constraint2155);
+                    	            following.push(FOLLOW_literal_constraint_in_constraint2493);
                     	            lc=literal_constraint();
                     	            following.pop();
 
@@ -4131,9 +4523,9 @@
                     	            }
                     	            break;
                     	        case 4 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:868:57: rvc= retval_constraint
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:954:57: rvc= retval_constraint
                     	            {
-                    	            following.push(FOLLOW_retval_constraint_in_constraint2177);
+                    	            following.push(FOLLOW_retval_constraint_in_constraint2515);
                     	            rvc=retval_constraint();
                     	            following.pop();
 
@@ -4153,7 +4545,7 @@
                     	    break;
 
                     	default :
-                    	    break loop55;
+                    	    break loop59;
                         }
                     } while (true);
 
@@ -4163,7 +4555,7 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_constraint2233);
+            following.push(FOLLOW_opt_eol_in_constraint2571);
             opt_eol();
             following.pop();
 
@@ -4183,7 +4575,7 @@
 
 
     // $ANTLR start literal_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:881: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:967: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;
@@ -4192,76 +4584,76 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:885: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:885: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:971: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:971: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:885:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
-            int alt57=5;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:971:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
+            int alt61=5;
             switch ( input.LA(1) ) {
             case STRING:
-                alt57=1;
+                alt61=1;
                 break;
             case INT:
-                alt57=2;
+                alt61=2;
                 break;
             case FLOAT:
-                alt57=3;
+                alt61=3;
                 break;
             case BOOL:
-                alt57=4;
+                alt61=4;
                 break;
-            case 46:
-                alt57=5;
+            case 43:
+                alt61=5;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("885:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 57, 0, input);
+                    new NoViableAltException("971:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 61, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt57) {
+            switch (alt61) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:885:25: t= STRING
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:971:25: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2260); 
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2598); 
                      text = getString( t ); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:886:25: t= INT
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:972:25: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint2271); 
+                    match(input,INT,FOLLOW_INT_in_literal_constraint2609); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:887:25: t= FLOAT
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:973:25: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2284); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2622); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:888:25: t= BOOL
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:974:25: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2295); 
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2633); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:889:25: t= 'null'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:975:25: t= 'null'
                     {
                     t=(Token)input.LT(1);
-                    match(input,46,FOLLOW_46_in_literal_constraint2307); 
+                    match(input,43,FOLLOW_43_in_literal_constraint2645); 
                      text = null; 
 
                     }
@@ -4285,7 +4677,7 @@
 
 
     // $ANTLR start enum_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:893: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:979:1: enum_constraint returns [String text] : (cls= ID '.' en= ID ) ;
     public String enum_constraint() throws RecognitionException {   
         String text;
         Token cls=null;
@@ -4295,17 +4687,17 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:897:17: ( (cls= ID '.' en= ID ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:897:17: (cls= ID '.' en= ID )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:983:17: ( (cls= ID '.' en= ID ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:983:17: (cls= ID '.' en= ID )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:897:17: (cls= ID '.' en= ID )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:897:18: cls= ID '.' en= ID
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:983:17: (cls= ID '.' en= ID )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:983:18: cls= ID '.' en= ID
             {
             cls=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint2338); 
-            match(input,18,FOLLOW_18_in_enum_constraint2340); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint2676); 
+            match(input,18,FOLLOW_18_in_enum_constraint2678); 
             en=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint2344); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint2682); 
 
             }
 
@@ -4326,7 +4718,7 @@
 
 
     // $ANTLR start retval_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:900:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:986:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
     public String retval_constraint() throws RecognitionException {   
         String text;
         String c = null;
@@ -4336,15 +4728,15 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:905:17: ( '(' c= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:905:17: '(' c= paren_chunk ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:17: ( '(' c= paren_chunk ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:17: '(' c= paren_chunk ')'
             {
-            match(input,23,FOLLOW_23_in_retval_constraint2373); 
-            following.push(FOLLOW_paren_chunk_in_retval_constraint2378);
+            match(input,23,FOLLOW_23_in_retval_constraint2711); 
+            following.push(FOLLOW_paren_chunk_in_retval_constraint2716);
             c=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_retval_constraint2381); 
+            match(input,25,FOLLOW_25_in_retval_constraint2719); 
              text = c; 
 
             }
@@ -4362,7 +4754,7 @@
 
 
     // $ANTLR start predicate
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908: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:994:1: predicate[List constraints] : decl= ID ':' field= ID '->' '(' text= paren_chunk ')' ;
     public void predicate(List constraints) throws RecognitionException {   
         Token decl=null;
         Token field=null;
@@ -4370,21 +4762,21 @@
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:910:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:910:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:996:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:996:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
             {
             decl=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_predicate2399); 
-            match(input,33,FOLLOW_33_in_predicate2401); 
+            match(input,ID,FOLLOW_ID_in_predicate2737); 
+            match(input,33,FOLLOW_33_in_predicate2739); 
             field=(Token)input.LT(1);
-            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);
+            match(input,ID,FOLLOW_ID_in_predicate2743); 
+            match(input,48,FOLLOW_48_in_predicate2745); 
+            match(input,23,FOLLOW_23_in_predicate2747); 
+            following.push(FOLLOW_paren_chunk_in_predicate2751);
             text=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_predicate2415); 
+            match(input,25,FOLLOW_25_in_predicate2753); 
 
             			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
             			constraints.add( d );
@@ -4405,7 +4797,7 @@
 
 
     // $ANTLR start paren_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:917: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:1003:1: paren_chunk returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* ;
     public String paren_chunk() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4416,22 +4808,22 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:923:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:923:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1009:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1009:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:923:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
-            loop58:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1009:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            loop62:
             do {
-                int alt58=3;
+                int alt62=3;
                 switch ( input.LA(1) ) {
                 case EOL:
-                    alt58=3;
+                    alt62=3;
                     break;
                 case 25:
-                    alt58=3;
+                    alt62=3;
                     break;
                 case 23:
-                    alt58=1;
+                    alt62=1;
                     break;
                 case ID:
                 case INT:
@@ -4492,21 +4884,22 @@
                 case 63:
                 case 64:
                 case 65:
-                    alt58=2;
+                case 66:
+                    alt62=2;
                     break;
 
                 }
 
-                switch (alt58) {
+                switch (alt62) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:924:25: '(' c= paren_chunk ')'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1010:25: '(' c= paren_chunk ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk2461); 
-            	    following.push(FOLLOW_paren_chunk_in_paren_chunk2465);
+            	    match(input,23,FOLLOW_23_in_paren_chunk2799); 
+            	    following.push(FOLLOW_paren_chunk_in_paren_chunk2803);
             	    c=paren_chunk();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk2467); 
+            	    match(input,25,FOLLOW_25_in_paren_chunk2805); 
 
             	    				if ( c == null ) {
             	    					c = "";
@@ -4521,7 +4914,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:935:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1021:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4537,7 +4930,7 @@
             	    break;
 
             	default :
-            	    break loop58;
+            	    break loop62;
                 }
             } while (true);
 
@@ -4557,7 +4950,7 @@
 
 
     // $ANTLR start paren_chunk2
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:947: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:1033:1: paren_chunk2 returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* ;
     public String paren_chunk2() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4568,19 +4961,19 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:953:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:953:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1039:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1039:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:953:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
-            loop59:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1039:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            loop63:
             do {
-                int alt59=3;
+                int alt63=3;
                 switch ( input.LA(1) ) {
                 case 25:
-                    alt59=3;
+                    alt63=3;
                     break;
                 case 23:
-                    alt59=1;
+                    alt63=1;
                     break;
                 case EOL:
                 case ID:
@@ -4642,21 +5035,22 @@
                 case 63:
                 case 64:
                 case 65:
-                    alt59=2;
+                case 66:
+                    alt63=2;
                     break;
 
                 }
 
-                switch (alt59) {
+                switch (alt63) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:954:25: '(' c= paren_chunk2 ')'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1040:25: '(' c= paren_chunk2 ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk22538); 
-            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk22542);
+            	    match(input,23,FOLLOW_23_in_paren_chunk22876); 
+            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk22880);
             	    c=paren_chunk2();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk22544); 
+            	    match(input,25,FOLLOW_25_in_paren_chunk22882); 
 
             	    				if ( c == null ) {
             	    					c = "";
@@ -4671,7 +5065,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:965:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1051:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4687,7 +5081,7 @@
             	    break;
 
             	default :
-            	    break loop59;
+            	    break loop63;
                 }
             } while (true);
 
@@ -4707,7 +5101,7 @@
 
 
     // $ANTLR start curly_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:976: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:1062:1: curly_chunk returns [String text] : ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* ;
     public String curly_chunk() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4718,19 +5112,19 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:982:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:982:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1068:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1068:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:982:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
-            loop60:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1068:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            loop64:
             do {
-                int alt60=3;
+                int alt64=3;
                 switch ( input.LA(1) ) {
                 case 27:
-                    alt60=3;
+                    alt64=3;
                     break;
                 case 26:
-                    alt60=1;
+                    alt64=1;
                     break;
                 case EOL:
                 case ID:
@@ -4792,21 +5186,22 @@
                 case 63:
                 case 64:
                 case 65:
-                    alt60=2;
+                case 66:
+                    alt64=2;
                     break;
 
                 }
 
-                switch (alt60) {
+                switch (alt64) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:983:25: '{' c= curly_chunk '}'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1069:25: '{' c= curly_chunk '}'
             	    {
-            	    match(input,26,FOLLOW_26_in_curly_chunk2613); 
-            	    following.push(FOLLOW_curly_chunk_in_curly_chunk2617);
+            	    match(input,26,FOLLOW_26_in_curly_chunk2951); 
+            	    following.push(FOLLOW_curly_chunk_in_curly_chunk2955);
             	    c=curly_chunk();
             	    following.pop();
 
-            	    match(input,27,FOLLOW_27_in_curly_chunk2619); 
+            	    match(input,27,FOLLOW_27_in_curly_chunk2957); 
 
             	    				//System.err.println( "chunk [" + c + "]" );
             	    				if ( c == null ) {
@@ -4822,7 +5217,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:995:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4839,7 +5234,7 @@
             	    break;
 
             	default :
-            	    break loop60;
+            	    break loop64;
                 }
             } while (true);
 
@@ -4859,7 +5254,7 @@
 
 
     // $ANTLR start lhs_or
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1007: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:1093: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;
@@ -4871,44 +5266,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1012: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:1012: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:1098: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:1098:17: left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )*
             {
              OrDescr or = null; 
-            following.push(FOLLOW_lhs_and_in_lhs_or2677);
+            following.push(FOLLOW_lhs_and_in_lhs_or3015);
             left=lhs_and();
             following.pop();
 
             d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1014:17: ( ('or'|'||') opt_eol right= lhs_and )*
-            loop61:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1100:17: ( ('or'|'||') opt_eol right= lhs_and )*
+            loop65:
             do {
-                int alt61=2;
-                int LA61_0 = input.LA(1);
-                if ( (LA61_0>=42 && LA61_0<=43) ) {
-                    alt61=1;
+                int alt65=2;
+                int LA65_0 = input.LA(1);
+                if ( (LA65_0>=44 && LA65_0<=45) ) {
+                    alt65=1;
                 }
 
 
-                switch (alt61) {
+                switch (alt65) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1014:19: ('or'|'||') opt_eol right= lhs_and
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1100:19: ('or'|'||') opt_eol right= lhs_and
             	    {
-            	    if ( (input.LA(1)>=42 && input.LA(1)<=43) ) {
+            	    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_lhs_or2686);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3024);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_or2691);
+            	    following.push(FOLLOW_opt_eol_in_lhs_or3029);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_and_in_lhs_or2698);
+            	    following.push(FOLLOW_lhs_and_in_lhs_or3036);
             	    right=lhs_and();
             	    following.pop();
 
@@ -4926,7 +5321,7 @@
             	    break;
 
             	default :
-            	    break loop61;
+            	    break loop65;
                 }
             } while (true);
 
@@ -4946,7 +5341,7 @@
 
 
     // $ANTLR start lhs_and
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028: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:1114: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;
@@ -4958,44 +5353,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1033: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:1033: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:1119: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:1119:17: left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )*
             {
              AndDescr and = null; 
-            following.push(FOLLOW_lhs_unary_in_lhs_and2738);
+            following.push(FOLLOW_lhs_unary_in_lhs_and3076);
             left=lhs_unary();
             following.pop();
 
              d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
-            loop62:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1121:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
+            loop66:
             do {
-                int alt62=2;
-                int LA62_0 = input.LA(1);
-                if ( (LA62_0>=48 && LA62_0<=49) ) {
-                    alt62=1;
+                int alt66=2;
+                int LA66_0 = input.LA(1);
+                if ( (LA66_0>=49 && LA66_0<=50) ) {
+                    alt66=1;
                 }
 
 
-                switch (alt62) {
+                switch (alt66) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:19: ('and'|'&&') opt_eol right= lhs_unary
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1121:19: ('and'|'&&') opt_eol right= lhs_unary
             	    {
-            	    if ( (input.LA(1)>=48 && input.LA(1)<=49) ) {
+            	    if ( (input.LA(1)>=49 && input.LA(1)<=50) ) {
             	        input.consume();
             	        errorRecovery=false;
             	    }
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and2747);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3085);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_and2752);
+            	    following.push(FOLLOW_opt_eol_in_lhs_and3090);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_unary_in_lhs_and2759);
+            	    following.push(FOLLOW_lhs_unary_in_lhs_and3097);
             	    right=lhs_unary();
             	    following.pop();
 
@@ -5013,7 +5408,7 @@
             	    break;
 
             	default :
-            	    break loop62;
+            	    break loop66;
                 }
             } while (true);
 
@@ -5033,49 +5428,51 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1049: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:1135:1: lhs_unary returns [PatternDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' ) ;
     public PatternDescr lhs_unary() throws RecognitionException {   
         PatternDescr d;
         PatternDescr u = null;
 
+        FromDescr fm = null;
 
 
+
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1053: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:1053: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:1139:17: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1139:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1053:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
-            int alt63=5;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1139:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' )
+            int alt68=5;
             switch ( input.LA(1) ) {
-            case 50:
-                alt63=1;
-                break;
             case 51:
-                alt63=2;
+                alt68=1;
                 break;
             case 52:
-                alt63=3;
+                alt68=2;
                 break;
+            case 53:
+                alt68=3;
+                break;
             case ID:
-                alt63=4;
+                alt68=4;
                 break;
             case 23:
-                alt63=5;
+                alt68=5;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1053:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | \'(\' opt_eol u= lhs opt_eol \')\' )", 63, 0, input);
+                    new NoViableAltException("1139:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | \'(\' opt_eol u= lhs opt_eol \')\' )", 68, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt63) {
+            switch (alt68) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1053:25: u= lhs_exist
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1139:25: u= lhs_exist
                     {
-                    following.push(FOLLOW_lhs_exist_in_lhs_unary2797);
+                    following.push(FOLLOW_lhs_exist_in_lhs_unary3135);
                     u=lhs_exist();
                     following.pop();
 
@@ -5083,9 +5480,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1054:25: u= lhs_not
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1140:25: u= lhs_not
                     {
-                    following.push(FOLLOW_lhs_not_in_lhs_unary2805);
+                    following.push(FOLLOW_lhs_not_in_lhs_unary3143);
                     u=lhs_not();
                     following.pop();
 
@@ -5093,9 +5490,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1055:25: u= lhs_eval
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1141:25: u= lhs_eval
                     {
-                    following.push(FOLLOW_lhs_eval_in_lhs_unary2813);
+                    following.push(FOLLOW_lhs_eval_in_lhs_unary3151);
                     u=lhs_eval();
                     following.pop();
 
@@ -5103,32 +5500,62 @@
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1056:25: u= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:25: u= lhs_column (fm= from_statement )?
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_unary2821);
+                    following.push(FOLLOW_lhs_column_in_lhs_unary3163);
                     u=lhs_column();
                     following.pop();
 
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:38: (fm= from_statement )?
+                    int alt67=2;
+                    int LA67_0 = input.LA(1);
+                    if ( LA67_0==42 ) {
+                        alt67=1;
+                    }
+                    else if ( (LA67_0>=EOL && LA67_0<=ID)||LA67_0==15||LA67_0==23||LA67_0==25||LA67_0==29||LA67_0==34||(LA67_0>=44 && LA67_0<=45)||(LA67_0>=49 && LA67_0<=53) ) {
+                        alt67=2;
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("1142:38: (fm= from_statement )?", 67, 0, input);
 
+                        throw nvae;
                     }
+                    switch (alt67) {
+                        case 1 :
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:39: fm= from_statement
+                            {
+                            following.push(FOLLOW_from_statement_in_lhs_unary3168);
+                            fm=from_statement();
+                            following.pop();
+
+                            fm.setColumn((ColumnDescr) u); u=fm;
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:25: '(' opt_eol u= lhs opt_eol ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1143:25: '(' opt_eol u= lhs opt_eol ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_unary2827); 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary2829);
+                    match(input,23,FOLLOW_23_in_lhs_unary3178); 
+                    following.push(FOLLOW_opt_eol_in_lhs_unary3180);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_lhs_in_lhs_unary2833);
+                    following.push(FOLLOW_lhs_in_lhs_unary3184);
                     u=lhs();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary2835);
+                    following.push(FOLLOW_opt_eol_in_lhs_unary3186);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_unary2837); 
+                    match(input,25,FOLLOW_25_in_lhs_unary3188); 
 
                     }
                     break;
@@ -5152,7 +5579,7 @@
 
 
     // $ANTLR start lhs_exist
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1061: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:1147: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;
@@ -5163,43 +5590,43 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1151:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1151:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,50,FOLLOW_50_in_lhs_exist2867); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:30: ( '(' 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_exist3218); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1151:30: ( '(' column= lhs_column ')' | column= lhs_column )
+            int alt69=2;
+            int LA69_0 = input.LA(1);
+            if ( LA69_0==23 ) {
+                alt69=1;
             }
-            else if ( LA64_0==ID ) {
-                alt64=2;
+            else if ( LA69_0==ID ) {
+                alt69=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1065:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 64, 0, input);
+                    new NoViableAltException("1151:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 69, 0, input);
 
                 throw nvae;
             }
-            switch (alt64) {
+            switch (alt69) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:31: '(' column= lhs_column ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1151:31: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_exist2870); 
-                    following.push(FOLLOW_lhs_column_in_lhs_exist2874);
+                    match(input,23,FOLLOW_23_in_lhs_exist3221); 
+                    following.push(FOLLOW_lhs_column_in_lhs_exist3225);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_exist2876); 
+                    match(input,25,FOLLOW_25_in_lhs_exist3227); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:59: column= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1151:59: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_exist2882);
+                    following.push(FOLLOW_lhs_column_in_lhs_exist3233);
                     column=lhs_column();
                     following.pop();
 
@@ -5229,7 +5656,7 @@
 
 
     // $ANTLR start lhs_not
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1072: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:1158: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;
@@ -5240,43 +5667,43 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1076:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1076:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1162:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1162:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,51,FOLLOW_51_in_lhs_not2912); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1076:27: ( '(' column= lhs_column ')' | column= lhs_column )
-            int alt65=2;
-            int LA65_0 = input.LA(1);
-            if ( LA65_0==23 ) {
-                alt65=1;
+            match(input,52,FOLLOW_52_in_lhs_not3263); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1162:27: ( '(' column= lhs_column ')' | column= lhs_column )
+            int alt70=2;
+            int LA70_0 = input.LA(1);
+            if ( LA70_0==23 ) {
+                alt70=1;
             }
-            else if ( LA65_0==ID ) {
-                alt65=2;
+            else if ( LA70_0==ID ) {
+                alt70=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1076:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 65, 0, input);
+                    new NoViableAltException("1162:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 70, 0, input);
 
                 throw nvae;
             }
-            switch (alt65) {
+            switch (alt70) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1076:28: '(' column= lhs_column ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1162:28: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_not2915); 
-                    following.push(FOLLOW_lhs_column_in_lhs_not2919);
+                    match(input,23,FOLLOW_23_in_lhs_not3266); 
+                    following.push(FOLLOW_lhs_column_in_lhs_not3270);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_not2922); 
+                    match(input,25,FOLLOW_25_in_lhs_not3273); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1076:57: column= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1162:57: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_not2928);
+                    following.push(FOLLOW_lhs_column_in_lhs_not3279);
                     column=lhs_column();
                     following.pop();
 
@@ -5306,7 +5733,7 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1083: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:1169:1: lhs_eval returns [PatternDescr d] : 'eval' loc= '(' c= paren_chunk2 ')' ;
     public PatternDescr lhs_eval() throws RecognitionException {   
         PatternDescr d;
         Token loc=null;
@@ -5318,17 +5745,17 @@
         		String text = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1088:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1088:17: 'eval' loc= '(' c= paren_chunk2 ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1174:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1174:17: 'eval' loc= '(' c= paren_chunk2 ')'
             {
-            match(input,52,FOLLOW_52_in_lhs_eval2954); 
+            match(input,53,FOLLOW_53_in_lhs_eval3305); 
             loc=(Token)input.LT(1);
-            match(input,23,FOLLOW_23_in_lhs_eval2958); 
-            following.push(FOLLOW_paren_chunk2_in_lhs_eval2966);
+            match(input,23,FOLLOW_23_in_lhs_eval3309); 
+            following.push(FOLLOW_paren_chunk2_in_lhs_eval3317);
             c=paren_chunk2();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_lhs_eval2970); 
+            match(input,25,FOLLOW_25_in_lhs_eval3321); 
              
             			checkTrailingSemicolon( c, offset(loc.getLine()) );
             			d = new EvalDescr( c ); 
@@ -5349,7 +5776,7 @@
 
 
     // $ANTLR start dotted_name
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1097: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:1183:1: dotted_name returns [String name] : id= ID ( '.' id= ID )* ( '[' ']' )* ;
     public String dotted_name() throws RecognitionException {   
         String name;
         Token id=null;
@@ -5358,62 +5785,62 @@
         		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:17: id= ID ( '.' id= ID )* ( '[' ']' )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:17: id= ID ( '.' id= ID )* ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dotted_name3002); 
+            match(input,ID,FOLLOW_ID_in_dotted_name3353); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:46: ( '.' id= ID )*
-            loop66:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:46: ( '.' id= ID )*
+            loop71:
             do {
-                int alt66=2;
-                int LA66_0 = input.LA(1);
-                if ( LA66_0==18 ) {
-                    alt66=1;
+                int alt71=2;
+                int LA71_0 = input.LA(1);
+                if ( LA71_0==18 ) {
+                    alt71=1;
                 }
 
 
-                switch (alt66) {
+                switch (alt71) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:48: '.' id= ID
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:48: '.' id= ID
             	    {
-            	    match(input,18,FOLLOW_18_in_dotted_name3008); 
+            	    match(input,18,FOLLOW_18_in_dotted_name3359); 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_dotted_name3012); 
+            	    match(input,ID,FOLLOW_ID_in_dotted_name3363); 
             	     name = name + "." + id.getText(); 
 
             	    }
             	    break;
 
             	default :
-            	    break loop66;
+            	    break loop71;
                 }
             } while (true);
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:99: ( '[' ']' )*
-            loop67:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:99: ( '[' ']' )*
+            loop72:
             do {
-                int alt67=2;
-                int LA67_0 = input.LA(1);
-                if ( LA67_0==53 ) {
-                    alt67=1;
+                int alt72=2;
+                int LA72_0 = input.LA(1);
+                if ( LA72_0==54 ) {
+                    alt72=1;
                 }
 
 
-                switch (alt67) {
+                switch (alt72) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1102:101: '[' ']'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:101: '[' ']'
             	    {
-            	    match(input,53,FOLLOW_53_in_dotted_name3021); 
-            	    match(input,54,FOLLOW_54_in_dotted_name3023); 
+            	    match(input,54,FOLLOW_54_in_dotted_name3372); 
+            	    match(input,55,FOLLOW_55_in_dotted_name3374); 
             	     name = name + "[]";
 
             	    }
             	    break;
 
             	default :
-            	    break loop67;
+            	    break loop72;
                 }
             } while (true);
 
@@ -5432,9 +5859,9 @@
     // $ANTLR end dotted_name
 
 
-    // $ANTLR start argument
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:1: argument returns [String name] : id= ID ( '[' ']' )* ;
-    public String argument() throws RecognitionException {   
+    // $ANTLR start argument_name
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1191:1: argument_name returns [String name] : id= ID ( '[' ']' )* ;
+    public String argument_name() throws RecognitionException {   
         String name;
         Token id=null;
 
@@ -5442,35 +5869,35 @@
         		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:17: (id= ID ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:17: id= ID ( '[' ']' )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1196:17: (id= ID ( '[' ']' )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1196:17: id= ID ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument3053); 
+            match(input,ID,FOLLOW_ID_in_argument_name3404); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:46: ( '[' ']' )*
-            loop68:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1196:46: ( '[' ']' )*
+            loop73:
             do {
-                int alt68=2;
-                int LA68_0 = input.LA(1);
-                if ( LA68_0==53 ) {
-                    alt68=1;
+                int alt73=2;
+                int LA73_0 = input.LA(1);
+                if ( LA73_0==54 ) {
+                    alt73=1;
                 }
 
 
-                switch (alt68) {
+                switch (alt73) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1110:48: '[' ']'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1196:48: '[' ']'
             	    {
-            	    match(input,53,FOLLOW_53_in_argument3059); 
-            	    match(input,54,FOLLOW_54_in_argument3061); 
+            	    match(input,54,FOLLOW_54_in_argument_name3410); 
+            	    match(input,55,FOLLOW_55_in_argument_name3412); 
             	     name = name + "[]";
 
             	    }
             	    break;
 
             	default :
-            	    break loop68;
+            	    break loop73;
                 }
             } while (true);
 
@@ -5486,11 +5913,11 @@
         }
         return name;
     }
-    // $ANTLR end argument
+    // $ANTLR end argument_name
 
 
     // $ANTLR start word
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1114: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:1200: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;
@@ -5500,136 +5927,136 @@
         		word = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
-            int alt69=11;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1204:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
+            int alt74=11;
             switch ( input.LA(1) ) {
             case ID:
-                alt69=1;
+                alt74=1;
                 break;
             case 17:
-                alt69=2;
+                alt74=2;
                 break;
-            case 55:
-                alt69=3;
+            case 56:
+                alt74=3;
                 break;
             case 31:
-                alt69=4;
+                alt74=4;
                 break;
             case 28:
-                alt69=5;
+                alt74=5;
                 break;
             case 36:
-                alt69=6;
+                alt74=6;
                 break;
             case 37:
-                alt69=7;
+                alt74=7;
                 break;
             case 32:
-                alt69=8;
+                alt74=8;
                 break;
             case 34:
-                alt69=9;
+                alt74=9;
                 break;
             case 29:
-                alt69=10;
+                alt74=10;
                 break;
             case STRING:
-                alt69=11;
+                alt74=11;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1114:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 69, 0, input);
+                    new NoViableAltException("1200:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 74, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt69) {
+            switch (alt74) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1118:17: id= ID
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1204:17: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_word3089); 
+                    match(input,ID,FOLLOW_ID_in_word3440); 
                      word=id.getText(); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1119:17: 'import'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1205:17: 'import'
                     {
-                    match(input,17,FOLLOW_17_in_word3101); 
+                    match(input,17,FOLLOW_17_in_word3452); 
                      word="import"; 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1120:17: 'use'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1206:17: 'use'
                     {
-                    match(input,55,FOLLOW_55_in_word3110); 
+                    match(input,56,FOLLOW_56_in_word3461); 
                      word="use"; 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1121:17: 'rule'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1207:17: 'rule'
                     {
-                    match(input,31,FOLLOW_31_in_word3122); 
+                    match(input,31,FOLLOW_31_in_word3473); 
                      word="rule"; 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1122:17: 'query'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1208:17: 'query'
                     {
-                    match(input,28,FOLLOW_28_in_word3133); 
+                    match(input,28,FOLLOW_28_in_word3484); 
                      word="query"; 
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:17: 'salience'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1209:17: 'salience'
                     {
-                    match(input,36,FOLLOW_36_in_word3143); 
+                    match(input,36,FOLLOW_36_in_word3494); 
                      word="salience"; 
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1124:17: 'no-loop'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1210:17: 'no-loop'
                     {
-                    match(input,37,FOLLOW_37_in_word3151); 
+                    match(input,37,FOLLOW_37_in_word3502); 
                      word="no-loop"; 
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1125:17: 'when'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1211:17: 'when'
                     {
-                    match(input,32,FOLLOW_32_in_word3159); 
+                    match(input,32,FOLLOW_32_in_word3510); 
                      word="when"; 
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1126:17: 'then'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1212:17: 'then'
                     {
-                    match(input,34,FOLLOW_34_in_word3170); 
+                    match(input,34,FOLLOW_34_in_word3521); 
                      word="then"; 
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1127:17: 'end'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1213:17: 'end'
                     {
-                    match(input,29,FOLLOW_29_in_word3181); 
+                    match(input,29,FOLLOW_29_in_word3532); 
                      word="end"; 
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1128:17: str= STRING
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1214:17: str= STRING
                     {
                     str=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_word3195); 
+                    match(input,STRING,FOLLOW_STRING_in_word3546); 
                      word=getString(str);
 
                     }
@@ -5649,130 +6076,130 @@
 
 
     // $ANTLR start operator
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1131:1: operator returns [String str] : ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' );
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1217: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:1137:17: ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' )
-            int alt70=10;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1223:17: ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' )
+            int alt75=10;
             switch ( input.LA(1) ) {
-            case 56:
-                alt70=1;
-                break;
             case 57:
-                alt70=2;
+                alt75=1;
                 break;
             case 58:
-                alt70=3;
+                alt75=2;
                 break;
             case 59:
-                alt70=4;
+                alt75=3;
                 break;
             case 60:
-                alt70=5;
+                alt75=4;
                 break;
             case 61:
-                alt70=6;
+                alt75=5;
                 break;
             case 62:
-                alt70=7;
+                alt75=6;
                 break;
             case 63:
-                alt70=8;
+                alt75=7;
                 break;
             case 64:
-                alt70=9;
+                alt75=8;
                 break;
             case 65:
-                alt70=10;
+                alt75=9;
                 break;
+            case 66:
+                alt75=10;
+                break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1131:1: operator returns [String str] : ( \'==\' | \'=\' | \'>\' | \'>=\' | \'<\' | \'<=\' | \'!=\' | \'contains\' | \'matches\' | \'excludes\' );", 70, 0, input);
+                    new NoViableAltException("1217:1: operator returns [String str] : ( \'==\' | \'=\' | \'>\' | \'>=\' | \'<\' | \'<=\' | \'!=\' | \'contains\' | \'matches\' | \'excludes\' );", 75, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt70) {
+            switch (alt75) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1137:17: '=='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1223:17: '=='
                     {
-                    match(input,56,FOLLOW_56_in_operator3224); 
+                    match(input,57,FOLLOW_57_in_operator3575); 
                     str= "==";
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1138:18: '='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1224:18: '='
                     {
-                    match(input,57,FOLLOW_57_in_operator3231); 
+                    match(input,58,FOLLOW_58_in_operator3582); 
                     str="==";
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1139:18: '>'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1225:18: '>'
                     {
-                    match(input,58,FOLLOW_58_in_operator3238); 
+                    match(input,59,FOLLOW_59_in_operator3589); 
                     str=">";
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1140:18: '>='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1226:18: '>='
                     {
-                    match(input,59,FOLLOW_59_in_operator3245); 
+                    match(input,60,FOLLOW_60_in_operator3596); 
                     str=">=";
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1141:18: '<'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1227:18: '<'
                     {
-                    match(input,60,FOLLOW_60_in_operator3254); 
+                    match(input,61,FOLLOW_61_in_operator3605); 
                     str="<";
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1142:18: '<='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1228:18: '<='
                     {
-                    match(input,61,FOLLOW_61_in_operator3261); 
+                    match(input,62,FOLLOW_62_in_operator3612); 
                     str="<=";
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1143:18: '!='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1229:18: '!='
                     {
-                    match(input,62,FOLLOW_62_in_operator3268); 
+                    match(input,63,FOLLOW_63_in_operator3619); 
                     str="!=";
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1144:18: 'contains'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1230:18: 'contains'
                     {
-                    match(input,63,FOLLOW_63_in_operator3275); 
+                    match(input,64,FOLLOW_64_in_operator3626); 
                     str="contains";
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1145:18: 'matches'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1231:18: 'matches'
                     {
-                    match(input,64,FOLLOW_64_in_operator3282); 
+                    match(input,65,FOLLOW_65_in_operator3633); 
                     str="matches";
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1146:18: 'excludes'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1232:18: 'excludes'
                     {
-                    match(input,65,FOLLOW_65_in_operator3289); 
+                    match(input,66,FOLLOW_66_in_operator3640); 
                     str="excludes";
 
                     }
@@ -5791,7 +6218,7 @@
     // $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 DFA45 dfa45 = new DFA45();protected DFA48 dfa48 = new DFA48();protected DFA51 dfa51 = new DFA51();protected DFA52 dfa52 = new DFA52();
+    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 DFA46 dfa46 = new DFA46();protected DFA47 dfa47 = new DFA47();protected DFA52 dfa52 = new DFA52();protected DFA55 dfa55 = new DFA55();protected DFA56 dfa56 = new DFA56();
     class DFA2 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
@@ -5891,7 +6318,7 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA4_28 = input.LA(1);
                 if ( LA4_28==ID ) {return s19;}
-                if ( LA4_28==53 ) {return s18;}
+                if ( LA4_28==54 ) {return s18;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 4, 28, input);
@@ -5902,7 +6329,7 @@
         DFA.State s18 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA4_18 = input.LA(1);
-                if ( LA4_18==54 ) {return s28;}
+                if ( LA4_18==55 ) {return s28;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 4, 18, input);
@@ -5913,7 +6340,7 @@
         DFA.State s27 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 53:
+                case 54:
                     return s18;
 
                 case ID:
@@ -5946,7 +6373,7 @@
                 case 18:
                     return s17;
 
-                case 53:
+                case 54:
                     return s18;
 
                 case ID:
@@ -5970,7 +6397,6 @@
                 throw nvae;
             }
         };
-        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 {
@@ -6041,6 +6467,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s123;
 
                 default:
@@ -6119,6 +6546,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s123;
 
                 default:
@@ -6128,7 +6556,7 @@
                     throw nvae;        }
             }
         };
-        DFA.State s116 = new DFA.State() {
+        DFA.State s115 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
@@ -6197,23 +6625,25 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s123;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 116, input);
+                        new NoViableAltException("", 4, 115, input);
 
                     throw nvae;        }
             }
         };
+        DFA.State s116 = new DFA.State() {{alt=1;}};
         DFA.State s117 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 27:
-                    return s115;
+                    return s116;
 
                 case 26:
-                    return s116;
+                    return s115;
 
                 case EOL:
                 case ID:
@@ -6275,6 +6705,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s117;
 
                 default:
@@ -6287,10 +6718,10 @@
         DFA.State s106 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 27:
+                case 26:
                     return s115;
 
-                case 26:
+                case 27:
                     return s116;
 
                 case EOL:
@@ -6353,6 +6784,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s117;
 
                 default:
@@ -6432,6 +6864,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s108;
 
                 default:
@@ -6510,6 +6943,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s108;
 
                 default:
@@ -6589,6 +7023,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s90;
 
                 default:
@@ -6667,6 +7102,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s90;
 
                 default:
@@ -6746,6 +7182,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s70;
 
                 default:
@@ -6824,6 +7261,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s70;
 
                 default:
@@ -6857,221 +7295,221 @@
                 throw nvae;
             }
         };
-        DFA.State s61 = new DFA.State() {
+        DFA.State s99 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                    return s49;
-
                 case 25:
                     return s34;
 
+                case 24:
+                    return s47;
+
                 case EOL:
                 case 15:
-                    return s61;
+                    return s99;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 61, input);
+                        new NoViableAltException("", 4, 99, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s76 = new DFA.State() {
+        DFA.State s83 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 54:
+                    return s62;
+
                 case EOL:
                 case 15:
-                    return s61;
+                    return s99;
 
-                case 24:
-                    return s49;
-
                 case 25:
                     return s34;
 
-                case 53:
-                    return s60;
+                case 24:
+                    return s47;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 76, input);
+                        new NoViableAltException("", 4, 83, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s60 = new DFA.State() {
+        DFA.State s79 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_60 = input.LA(1);
-                if ( LA4_60==54 ) {return s76;}
-
-                NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 60, input);
-
-                throw nvae;
-            }
-        };
-        DFA.State s103 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 25:
                     return s34;
 
                 case 24:
-                    return s49;
+                    return s47;
 
                 case EOL:
                 case 15:
-                    return s103;
+                    return s79;
 
+                case ID:
+                    return s83;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 103, input);
+                        new NoViableAltException("", 4, 79, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s87 = new DFA.State() {
+        DFA.State s61 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 53:
-                    return s60;
+                case 54:
+                    return s45;
 
                 case EOL:
                 case 15:
-                    return s103;
+                    return s79;
 
                 case 25:
                     return s34;
 
                 case 24:
-                    return s49;
+                    return s47;
 
+                case 18:
+                    return s17;
+
+                case ID:
+                    return s83;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 87, input);
+                        new NoViableAltException("", 4, 61, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s83 = new DFA.State() {
+        DFA.State s60 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA4_60 = input.LA(1);
+                if ( LA4_60==ID ) {return s61;}
+                if ( LA4_60==EOL||LA4_60==15 ) {return s60;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 4, 60, input);
+
+                throw nvae;
+            }
+        };
+        DFA.State s47 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA4_47 = input.LA(1);
+                if ( LA4_47==EOL||LA4_47==15 ) {return s60;}
+                if ( LA4_47==ID ) {return s61;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 4, 47, input);
+
+                throw nvae;
+            }
+        };
+        DFA.State s63 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                    return s87;
+                case 24:
+                    return s47;
 
-                case EOL:
-                case 15:
-                    return s83;
-
                 case 25:
                     return s34;
 
-                case 24:
-                    return s49;
+                case EOL:
+                case 15:
+                    return s63;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 83, input);
+                        new NoViableAltException("", 4, 63, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s65 = new DFA.State() {
+        DFA.State s84 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 53:
-                    return s46;
-
                 case EOL:
                 case 15:
-                    return s83;
+                    return s63;
 
+                case 24:
+                    return s47;
+
                 case 25:
                     return s34;
 
-                case 24:
-                    return s49;
+                case 54:
+                    return s62;
 
-                case 18:
-                    return s17;
-
-                case ID:
-                    return s87;
-
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 65, input);
+                        new NoViableAltException("", 4, 84, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s64 = new DFA.State() {
+        DFA.State s62 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_64 = input.LA(1);
-                if ( LA4_64==ID ) {return s65;}
-                if ( LA4_64==EOL||LA4_64==15 ) {return s64;}
+                int LA4_62 = input.LA(1);
+                if ( LA4_62==55 ) {return s84;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 64, input);
+        	    new NoViableAltException("", 4, 62, input);
 
                 throw nvae;
             }
         };
-        DFA.State s49 = new DFA.State() {
+        DFA.State s50 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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, 49, input);
-
-                throw nvae;
-            }
-        };
-        DFA.State s48 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 53:
-                    return s60;
+                case 54:
+                    return s62;
 
                 case EOL:
                 case 15:
-                    return s61;
+                    return s63;
 
                 case 24:
-                    return s49;
+                    return s47;
 
                 case 25:
                     return s34;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 48, input);
+                        new NoViableAltException("", 4, 50, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s47 = new DFA.State() {
+        DFA.State s46 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                    return s49;
+                case ID:
+                    return s50;
 
-                case 25:
-                    return s34;
-
                 case EOL:
                 case 15:
+                    return s46;
+
+                case 24:
                     return s47;
 
-                case ID:
-                    return s48;
+                case 25:
+                    return s34;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 47, input);
+                        new NoViableAltException("", 4, 46, input);
 
                     throw nvae;        }
             }
@@ -7081,16 +7519,16 @@
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s47;
+                    return s46;
 
                 case ID:
-                    return s48;
+                    return s50;
 
-                case 53:
-                    return s46;
+                case 54:
+                    return s45;
 
                 case 24:
-                    return s49;
+                    return s47;
 
                 case 25:
                     return s34;
@@ -7102,13 +7540,13 @@
                     throw nvae;        }
             }
         };
-        DFA.State s46 = new DFA.State() {
+        DFA.State s45 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_46 = input.LA(1);
-                if ( LA4_46==54 ) {return s55;}
+                int LA4_45 = input.LA(1);
+                if ( LA4_45==55 ) {return s55;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 46, input);
+        	    new NoViableAltException("", 4, 45, input);
 
                 throw nvae;
             }
@@ -7116,25 +7554,25 @@
         DFA.State s33 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 18:
-                    return s17;
+                case 54:
+                    return s45;
 
-                case 53:
-                    return s46;
-
                 case EOL:
                 case 15:
-                    return s47;
+                    return s46;
 
-                case ID:
-                    return s48;
-
                 case 24:
-                    return s49;
+                    return s47;
 
                 case 25:
                     return s34;
 
+                case 18:
+                    return s17;
+
+                case ID:
+                    return s50;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 4, 33, input);
@@ -7239,7 +7677,7 @@
                 case 18:
                     return s17;
 
-                case 53:
+                case 54:
                     return s18;
 
                 case ID:
@@ -7339,7 +7777,7 @@
                 switch ( input.LA(1) ) {
                 case ID:
                 case 18:
-                case 53:
+                case 54:
                     return s3;
 
                 case EOL:
@@ -7373,25 +7811,25 @@
         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() {
+        DFA.State s7 = new DFA.State() {{alt=1;}};
+        DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                    return s3;
+                case 24:
+                case 25:
+                    return s2;
 
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
-                case 24:
-                case 25:
-                    return s2;
+                case ID:
+                    return s7;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 13, 5, input);
+                        new NoViableAltException("", 13, 4, input);
 
                     throw nvae;        }
             }
@@ -7401,14 +7839,14 @@
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
                 case ID:
+                    return s7;
+
+                case 54:
                     return s3;
 
-                case 53:
-                    return s4;
-
                 case 24:
                 case 25:
                     return s2;
@@ -7420,13 +7858,13 @@
                     throw nvae;        }
             }
         };
-        DFA.State s4 = new DFA.State() {
+        DFA.State s3 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA13_4 = input.LA(1);
-                if ( LA13_4==54 ) {return s9;}
+                int LA13_3 = input.LA(1);
+                if ( LA13_3==55 ) {return s9;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 13, 4, input);
+        	    new NoViableAltException("", 13, 3, input);
 
                 throw nvae;
             }
@@ -7434,21 +7872,21 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                case 18:
+                case 54:
                     return s3;
 
-                case 53:
-                    return s4;
-
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
                 case 24:
                 case 25:
                     return s2;
 
+                case ID:
+                case 18:
+                    return s7;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 13, 1, input);
@@ -7473,25 +7911,25 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
-        DFA.State s3 = new DFA.State() {{alt=1;}};
+        DFA.State s7 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {{alt=2;}};
-        DFA.State s5 = new DFA.State() {
+        DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                case 25:
-                    return s2;
+                case ID:
+                    return s7;
 
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
-                case ID:
-                    return s3;
+                case 24:
+                case 25:
+                    return s2;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 14, 5, input);
+                        new NoViableAltException("", 14, 4, input);
 
                     throw nvae;        }
             }
@@ -7501,14 +7939,14 @@
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
                 case ID:
+                    return s7;
+
+                case 54:
                     return s3;
 
-                case 53:
-                    return s4;
-
                 case 24:
                 case 25:
                     return s2;
@@ -7520,13 +7958,13 @@
                     throw nvae;        }
             }
         };
-        DFA.State s4 = new DFA.State() {
+        DFA.State s3 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA14_4 = input.LA(1);
-                if ( LA14_4==54 ) {return s9;}
+                int LA14_3 = input.LA(1);
+                if ( LA14_3==55 ) {return s9;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 14, 4, input);
+        	    new NoViableAltException("", 14, 3, input);
 
                 throw nvae;
             }
@@ -7534,21 +7972,21 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                case 18:
+                case 54:
                     return s3;
 
-                case 53:
-                    return s4;
-
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
                 case 24:
                 case 25:
                     return s2;
 
+                case ID:
+                case 18:
+                    return s7;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 14, 1, input);
@@ -7600,7 +8038,7 @@
                 switch ( input.LA(1) ) {
                 case 18:
                 case 23:
-                case 53:
+                case 54:
                     return s2;
 
                 case EOL:
@@ -7629,28 +8067,281 @@
             }
         };
 
-    }class DFA48 extends DFA {
+    }class DFA46 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
-        DFA.State s2 = new DFA.State() {{alt=1;}};
-        DFA.State s3 = new DFA.State() {{alt=2;}};
+        DFA.State s8 = new DFA.State() {{alt=1;}};
+        DFA.State s32 = new DFA.State() {{alt=2;}};
+        DFA.State s52 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case 24:
+                case 25:
+                    return s32;
+
+                case EOL:
+                case 15:
+                    return s52;
+
+                case 23:
+                case 33:
+                    return s8;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 46, 52, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s30 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case 18:
+                case 23:
+                case 33:
+                case 54:
+                    return s8;
+
+                case EOL:
+                case 15:
+                    return s52;
+
+                case 24:
+                case 25:
+                    return s32;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 46, 30, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s26 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case INT:
+                case BOOL:
+                case STRING:
+                case FLOAT:
+                case 25:
+                case 43:
+                    return s32;
+
+                case ID:
+                    return s30;
+
+                case EOL:
+                case 15:
+                    return s26;
+
+                case 23:
+                case 51:
+                case 52:
+                case 53:
+                    return s8;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 46, 26, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s7 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case EOL:
+                case 15:
+                    return s26;
+
+                case 23:
+                case 51:
+                case 52:
+                case 53:
+                    return s8;
+
+                case ID:
+                    return s30;
+
+                case INT:
+                case BOOL:
+                case STRING:
+                case FLOAT:
+                case 25:
+                case 43:
+                    return s32;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 46, 7, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s6 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case EOL:
+                case 15:
+                    return s6;
+
+                case ID:
+                case 25:
+                case 29:
+                case 34:
+                case 51:
+                case 52:
+                case 53:
+                    return s8;
+
+                case 23:
+                    return s7;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 46, 6, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s5 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case EOL:
+                case 15:
+                    return s6;
+
+                case 23:
+                    return s7;
+
+                case ID:
+                case 25:
+                case 29:
+                case 34:
+                case 44:
+                case 45:
+                case 49:
+                case 50:
+                case 51:
+                case 52:
+                case 53:
+                    return s8;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 46, 5, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s2 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA46_2 = input.LA(1);
+                if ( LA46_2==ID ) {return s5;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 46, 2, input);
+
+                throw nvae;
+            }
+        };
+        DFA.State s3 = new DFA.State() {{alt=3;}};
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA46_1 = input.LA(1);
+                if ( LA46_1==18 ) {return s2;}
+                if ( LA46_1==EOL||LA46_1==15||LA46_1==23 ) {return s3;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 46, 1, input);
+
+                throw nvae;
+            }
+        };
+        DFA.State s0 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA46_0 = input.LA(1);
+                if ( LA46_0==ID ) {return s1;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 46, 0, input);
+
+                throw nvae;
+            }
+        };
+
+    }class DFA47 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 s1 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 25:
+                    return s2;
+
                 case EOL:
                 case 15:
                     return s1;
 
+                case 24:
+                    return s3;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 47, 1, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s0 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case EOL:
+                case 15:
+                    return s1;
+
+                case 25:
+                    return s2;
+
+                case 24:
+                    return s3;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 47, 0, input);
+
+                    throw nvae;        }
+            }
+        };
+
+    }class DFA52 extends DFA {
+        public int predict(IntStream input) throws RecognitionException {
+            return predict(input, s0);
+        }
+        DFA.State s2 = new DFA.State() {{alt=1;}};
+        DFA.State s3 = new DFA.State() {{alt=2;}};
+        DFA.State s1 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
                 case ID:
                     return s2;
 
+                case EOL:
+                case 15:
+                    return s1;
+
                 case 25:
                     return s3;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 48, 1, input);
+                        new NoViableAltException("", 52, 1, input);
 
                     throw nvae;        }
             }
@@ -7670,13 +8361,13 @@
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 48, 0, input);
+                        new NoViableAltException("", 52, 0, input);
 
                     throw nvae;        }
             }
         };
 
-    }class DFA51 extends DFA {
+    }class DFA55 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
@@ -7697,7 +8388,7 @@
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 51, 1, input);
+                        new NoViableAltException("", 55, 1, input);
 
                     throw nvae;        }
             }
@@ -7717,13 +8408,13 @@
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 51, 0, input);
+                        new NoViableAltException("", 55, 0, input);
 
                     throw nvae;        }
             }
         };
 
-    }class DFA52 extends DFA {
+    }class DFA56 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
@@ -7732,13 +8423,8 @@
         DFA.State s2 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case EOL:
-                case 15:
-                    return s2;
-
                 case 24:
                 case 25:
-                case 56:
                 case 57:
                 case 58:
                 case 59:
@@ -7748,14 +8434,19 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s3;
 
+                case EOL:
+                case 15:
+                    return s2;
+
                 case 33:
                     return s15;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 52, 2, input);
+                        new NoViableAltException("", 56, 2, input);
 
                     throw nvae;        }
             }
@@ -7769,7 +8460,6 @@
 
                 case 24:
                 case 25:
-                case 56:
                 case 57:
                 case 58:
                 case 59:
@@ -7779,6 +8469,7 @@
                 case 63:
                 case 64:
                 case 65:
+                case 66:
                     return s3;
 
                 case 33:
@@ -7786,18 +8477,18 @@
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 52, 1, input);
+                        new NoViableAltException("", 56, 1, input);
 
                     throw nvae;        }
             }
         };
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA52_0 = input.LA(1);
-                if ( LA52_0==ID ) {return s1;}
+                int LA56_0 = input.LA(1);
+                if ( LA56_0==ID ) {return s1;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 52, 0, input);
+        	    new NoViableAltException("", 56, 0, input);
 
                 throw nvae;
             }
@@ -7851,24 +8542,24 @@
     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_argument_name_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_argument_name_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_26_in_function484 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
     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_28_in_query538 = new BitSet(new long[]{0x01000035B0020120L});
     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_opt_eol_in_query544 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
     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});
@@ -7884,20 +8575,20 @@
     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_31_in_rule734 = new BitSet(new long[]{0x01000035B0020120L});
     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_opt_eol_in_rule775 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
     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_opt_eol_in_rule835 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0000000000000007L});
     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});
@@ -7954,151 +8645,185 @@
     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_block1425 = new BitSet(new long[]{0x0038000000808032L});
     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_EOL_in_expander_lhs_block1482 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
     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});
+    public static final BitSet FOLLOW_42_in_from_statement1599 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_statement1601 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_from_source_in_from_statement1605 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source1649 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_18_in_from_source1651 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_from_source1655 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source1682 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_18_in_from_source1684 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_from_source1688 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1690 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_from_source1693 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1695 = new BitSet(new long[]{0x00000800000003E2L});
+    public static final BitSet FOLLOW_parameter_list_in_from_source1699 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1701 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_from_source1703 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source1725 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1727 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_from_source1729 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1731 = new BitSet(new long[]{0x00000800000003E2L});
+    public static final BitSet FOLLOW_parameter_list_in_from_source1735 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1737 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_from_source1739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_parameter_value_in_parameter_list1782 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_parameter_list1798 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_parameter_list1800 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_parameter_list1802 = new BitSet(new long[]{0x00000800000003E0L});
+    public static final BitSet FOLLOW_parameter_value_in_parameter_list1806 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_STRING_in_parameter_value1844 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_parameter_value1855 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_parameter_value1868 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_parameter_value1879 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_parameter_value1891 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_43_in_parameter_value1902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_fact_binding1941 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_binding1951 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_fact_binding1953 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_binding1955 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_binding1959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_fact_expression1991 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression1993 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1997 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression1999 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_fact_expression2001 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2012 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression2014 = new BitSet(new long[]{0x0000300000000002L});
+    public static final BitSet FOLLOW_set_in_fact_expression2027 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression2032 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2046 = new BitSet(new long[]{0x0000300000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_fact2085 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2093 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_fact2101 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2104 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_constraints_in_fact2110 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2129 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_fact2133 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2135 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2167 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_constraint_in_constraints2172 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_predicate_in_constraints2175 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2183 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_constraints2185 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2187 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_constraint_in_constraints2190 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_predicate_in_constraints2193 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2201 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2220 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_constraint2228 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2230 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_constraint2232 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2234 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_constraint2244 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2258 = new BitSet(new long[]{0xFE00000000008012L,0x0000000000000007L});
+    public static final BitSet FOLLOW_operator_in_constraint2264 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2266 = new BitSet(new long[]{0x00000800008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint2284 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint2309 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint2341 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint2361 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_set_in_constraint2396 = new BitSet(new long[]{0xFE00000000000000L,0x0000000000000007L});
+    public static final BitSet FOLLOW_operator_in_constraint2418 = new BitSet(new long[]{0x00000800008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint2430 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint2458 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint2493 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint2515 = new BitSet(new long[]{0x0000C00000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2571 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint2598 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint2609 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint2622 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint2633 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_43_in_literal_constraint2645 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint2676 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_18_in_enum_constraint2678 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint2682 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_retval_constraint2711 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint2716 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_retval_constraint2719 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_predicate2737 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_predicate2739 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_predicate2743 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_48_in_predicate2745 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_predicate2747 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_paren_chunk_in_predicate2751 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_predicate2753 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_paren_chunk2799 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk2803 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk2805 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_23_in_paren_chunk22876 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_paren_chunk2_in_paren_chunk22880 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk22882 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_26_in_curly_chunk2951 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk2955 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_curly_chunk2957 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3015 = new BitSet(new long[]{0x0000300000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_or3024 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_or3029 = new BitSet(new long[]{0x0038000000800020L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3036 = new BitSet(new long[]{0x0000300000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3076 = new BitSet(new long[]{0x0006000000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_and3085 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_and3090 = new BitSet(new long[]{0x0038000000800020L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3097 = new BitSet(new long[]{0x0006000000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3135 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3151 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_unary3163 = new BitSet(new long[]{0x0000040000000002L});
+    public static final BitSet FOLLOW_from_statement_in_lhs_unary3168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_lhs_unary3178 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary3180 = new BitSet(new long[]{0x0038000000800020L});
+    public static final BitSet FOLLOW_lhs_in_lhs_unary3184 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary3186 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_unary3188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_51_in_lhs_exist3218 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_exist3221 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist3225 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_exist3227 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist3233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_52_in_lhs_not3263 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_not3266 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not3270 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_not3273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not3279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_53_in_lhs_eval3305 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_lhs_eval3309 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x0000000000000007L});
+    public static final BitSet FOLLOW_paren_chunk2_in_lhs_eval3317 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_eval3321 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dotted_name3353 = new BitSet(new long[]{0x0040000000040002L});
+    public static final BitSet FOLLOW_18_in_dotted_name3359 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_dotted_name3363 = new BitSet(new long[]{0x0040000000040002L});
+    public static final BitSet FOLLOW_54_in_dotted_name3372 = new BitSet(new long[]{0x0080000000000000L});
+    public static final BitSet FOLLOW_55_in_dotted_name3374 = new BitSet(new long[]{0x0040000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument_name3404 = new BitSet(new long[]{0x0040000000000002L});
+    public static final BitSet FOLLOW_54_in_argument_name3410 = new BitSet(new long[]{0x0080000000000000L});
+    public static final BitSet FOLLOW_55_in_argument_name3412 = new BitSet(new long[]{0x0040000000000002L});
+    public static final BitSet FOLLOW_ID_in_word3440 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_word3452 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_56_in_word3461 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_word3473 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_word3484 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_word3494 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_word3502 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_word3510 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_word3521 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_word3532 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_word3546 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_57_in_operator3575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_58_in_operator3582 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_59_in_operator3589 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_60_in_operator3596 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_61_in_operator3605 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_62_in_operator3612 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_63_in_operator3619 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_64_in_operator3626 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_operator3633 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_66_in_operator3640 = 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-14 09:06:40 UTC (rev 5849)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java	2006-08-14 09:26:07 UTC (rev 5850)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-10 17:28:02
+// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-08-13 21:06:23
 
 	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=67;
+    public static final int Synpred1_fragment=68;
     public static final int T62=62;
     public static final int T44=44;
     public static final int T55=55;
@@ -53,6 +53,7 @@
     public static final int T23=23;
     public static final int T28=28;
     public static final int T42=42;
+    public static final int T66=66;
     public static final int T40=40;
     public static final int T63=63;
     public static final int T57=57;
@@ -65,7 +66,7 @@
     public static final int EOF=-1;
     public static final int T47=47;
     public static final int EOL=4;
-    public static final int Tokens=66;
+    public static final int Tokens=67;
     public static final int T53=53;
     public static final int T60=60;
     public static final int T31=31;
@@ -78,7 +79,7 @@
     public RuleParserLexer() {;} 
     public RuleParserLexer(CharStream input) {
         super(input);
-        ruleMemo = new Map[64+1];
+        ruleMemo = new Map[65+1];
      }
 
 
@@ -813,10 +814,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: ( 'or' )
-            // /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: ( 'from' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:33:7: 'from'
             {
-            match("or"); if (failed) return ;
+            match("from"); if (failed) return ;
 
 
             }
@@ -840,10 +841,10 @@
             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: ( 'null' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: 'null'
             {
-            match("||"); if (failed) return ;
+            match("null"); if (failed) return ;
 
 
             }
@@ -867,11 +868,12 @@
             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: ( 'or' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: 'or'
             {
-            match('&'); if (failed) return ;
+            match("or"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -893,11 +895,12 @@
             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: ( '|' )
-            // /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: ( '||' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: '||'
             {
-            match('|'); if (failed) return ;
+            match("||"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -919,12 +922,11 @@
             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: ( 'null' )
-            // /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: ( '&' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: '&'
             {
-            match("null"); if (failed) return ;
+            match('&'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -946,12 +948,11 @@
             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: ( '->' )
-            // /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: ( '|' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: '|'
             {
-            match("->"); if (failed) return ;
+            match('|'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -973,10 +974,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: ( 'and' )
-            // /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: ( '->' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: '->'
             {
-            match("and"); if (failed) return ;
+            match("->"); if (failed) return ;
 
 
             }
@@ -1000,10 +1001,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: ( '&&' )
-            // /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: ( 'and' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: 'and'
             {
-            match("&&"); if (failed) return ;
+            match("and"); if (failed) return ;
 
 
             }
@@ -1027,10 +1028,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: ( 'exists' )
-            // /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: ( '&&' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: '&&'
             {
-            match("exists"); if (failed) return ;
+            match("&&"); if (failed) return ;
 
 
             }
@@ -1054,10 +1055,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: ( 'not' )
-            // /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: ( 'exists' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: 'exists'
             {
-            match("not"); if (failed) return ;
+            match("exists"); if (failed) return ;
 
 
             }
@@ -1081,10 +1082,10 @@
             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: ( 'eval' )
-            // /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: ( 'not' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: 'not'
             {
-            match("eval"); if (failed) return ;
+            match("not"); if (failed) return ;
 
 
             }
@@ -1108,11 +1109,12 @@
             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: ( 'eval' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: 'eval'
             {
-            match('['); if (failed) return ;
+            match("eval"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1134,10 +1136,10 @@
             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: ( ']' )
-            // /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: ( '[' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: '['
             {
-            match(']'); if (failed) return ;
+            match('['); if (failed) return ;
 
             }
 
@@ -1160,12 +1162,11 @@
             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: ( 'use' )
-            // /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: ( ']' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: ']'
             {
-            match("use"); if (failed) return ;
+            match(']'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1187,10 +1188,10 @@
             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: ( 'use' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: 'use'
             {
-            match("=="); if (failed) return ;
+            match("use"); if (failed) return ;
 
 
             }
@@ -1214,11 +1215,12 @@
             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 ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1240,10 +1242,10 @@
             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 ;
 
             }
 
@@ -1266,12 +1268,11 @@
             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);}
@@ -1293,11 +1294,12 @@
             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);}
@@ -1319,12 +1321,11 @@
             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 ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1346,10 +1347,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: ( '!=' )
-            // /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: ( '<=' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: '<='
             {
-            match("!="); if (failed) return ;
+            match("<="); if (failed) return ;
 
 
             }
@@ -1373,10 +1374,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: ( 'contains' )
-            // /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: ( '!=' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:54:7: '!='
             {
-            match("contains"); if (failed) return ;
+            match("!="); if (failed) return ;
 
 
             }
@@ -1400,10 +1401,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: ( 'matches' )
-            // /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: ( 'contains' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:55:7: 'contains'
             {
-            match("matches"); if (failed) return ;
+            match("contains"); if (failed) return ;
 
 
             }
@@ -1427,10 +1428,10 @@
             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'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:56:7: ( 'matches' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:56:7: 'matches'
             {
-            match("excludes"); if (failed) return ;
+            match("matches"); if (failed) return ;
 
 
             }
@@ -1444,6 +1445,33 @@
     // $ANTLR end T65
 
 
+    // $ANTLR start T66
+    public void mT66() throws RecognitionException {
+        int T66_StartIndex = input.index();
+        try {
+            int type = T66;
+            int start = getCharIndex();
+            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:57:7: ( 'excludes' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:57:7: 'excludes'
+            {
+            match("excludes"); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 52, T66_StartIndex); }
+        }
+    }
+    // $ANTLR end T66
+
+
     // $ANTLR start MISC
     public void mMISC() throws RecognitionException {
         int MISC_StartIndex = input.index();
@@ -1453,8 +1481,8 @@
             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:1154:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
+            if ( backtracking>0 && alreadyParsedRule(input, 53) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
             int alt1=39;
             switch ( input.LA(1) ) {
             case '!':
@@ -1493,24 +1521,24 @@
                 break;
             case '-':
                 switch ( input.LA(2) ) {
+                case '=':
+                    alt1=33;
+                    break;
                 case '-':
                     alt1=28;
                     break;
-                case '=':
-                    alt1=33;
-                    break;
                 default:
                     alt1=9;}
 
                 break;
             case '+':
                 switch ( input.LA(2) ) {
+                case '+':
+                    alt1=27;
+                    break;
                 case '=':
                     alt1=31;
                     break;
-                case '+':
-                    alt1=27;
-                    break;
                 default:
                     alt1=10;}
 
@@ -1543,21 +1571,21 @@
                 break;
             case '=':
                 switch ( input.LA(2) ) {
-                case '/':
-                    alt1=38;
-                    break;
                 case '*':
                     alt1=36;
                     break;
-                case '+':
-                    alt1=32;
-                    break;
                 case '-':
                     alt1=34;
                     break;
+                case '/':
+                    alt1=38;
+                    break;
                 case '=':
                     alt1=30;
                     break;
+                case '+':
+                    alt1=32;
+                    break;
                 default:
                     alt1=18;}
 
@@ -1589,16 +1617,16 @@
                 int LA1_25 = input.LA(2);
                 if ( LA1_25=='>' ) {
                     int LA1_46 = input.LA(3);
-                    if ( LA1_46=='=' ) {
+                    if ( LA1_46=='>' ) {
+                        alt1=29;
+                    }
+                    else if ( LA1_46=='=' ) {
                         alt1=39;
                     }
-                    else if ( LA1_46=='>' ) {
-                        alt1=29;
-                    }
                     else {
                         if (backtracking>0) {failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1153:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
+                            new NoViableAltException("1239:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
 
                         throw nvae;
                     }
@@ -1606,7 +1634,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1153:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
+                        new NoViableAltException("1239:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
 
                     throw nvae;
                 }
@@ -1614,175 +1642,175 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1153:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 0, input);
+                    new NoViableAltException("1239: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:1154:17: '!'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:17: '!'
                     {
                     match('!'); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:23: '@'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:23: '@'
                     {
                     match('@'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:29: '$'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:29: '$'
                     {
                     match('$'); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:35: '%'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:35: '%'
                     {
                     match('%'); if (failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:41: '^'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:41: '^'
                     {
                     match('^'); if (failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:47: '&'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:47: '&'
                     {
                     match('&'); if (failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:53: '*'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:53: '*'
                     {
                     match('*'); if (failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:59: '_'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:59: '_'
                     {
                     match('_'); if (failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:65: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:65: '-'
                     {
                     match('-'); if (failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:71: '+'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:71: '+'
                     {
                     match('+'); if (failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1154:78: '?'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1240:78: '?'
                     {
                     match('?'); if (failed) return ;
 
                     }
                     break;
                 case 12 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:19: '|'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:19: '|'
                     {
                     match('|'); if (failed) return ;
 
                     }
                     break;
                 case 13 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:25: ','
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:25: ','
                     {
                     match(','); if (failed) return ;
 
                     }
                     break;
                 case 14 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:31: '{'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:31: '{'
                     {
                     match('{'); if (failed) return ;
 
                     }
                     break;
                 case 15 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:37: '}'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:37: '}'
                     {
                     match('}'); if (failed) return ;
 
                     }
                     break;
                 case 16 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:43: '['
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:43: '['
                     {
                     match('['); if (failed) return ;
 
                     }
                     break;
                 case 17 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:49: ']'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:49: ']'
                     {
                     match(']'); if (failed) return ;
 
                     }
                     break;
                 case 18 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:55: '='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:55: '='
                     {
                     match('='); if (failed) return ;
 
                     }
                     break;
                 case 19 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:61: '/'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:61: '/'
                     {
                     match('/'); if (failed) return ;
 
                     }
                     break;
                 case 20 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:67: '('
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:67: '('
                     {
                     match('('); if (failed) return ;
 
                     }
                     break;
                 case 21 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:73: ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:73: ')'
                     {
                     match(')'); if (failed) return ;
 
                     }
                     break;
                 case 22 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:79: '\''
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:79: '\''
                     {
                     match('\''); if (failed) return ;
 
                     }
                     break;
                 case 23 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1155:86: '\\'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:86: '\\'
                     {
                     match('\\'); if (failed) return ;
 
                     }
                     break;
                 case 24 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:19: '||'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:19: '||'
                     {
                     match("||"); if (failed) return ;
 
@@ -1790,7 +1818,7 @@
                     }
                     break;
                 case 25 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:26: '&&'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:26: '&&'
                     {
                     match("&&"); if (failed) return ;
 
@@ -1798,7 +1826,7 @@
                     }
                     break;
                 case 26 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:33: '<<<'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:33: '<<<'
                     {
                     match("<<<"); if (failed) return ;
 
@@ -1806,7 +1834,7 @@
                     }
                     break;
                 case 27 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:41: '++'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:41: '++'
                     {
                     match("++"); if (failed) return ;
 
@@ -1814,7 +1842,7 @@
                     }
                     break;
                 case 28 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:48: '--'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:48: '--'
                     {
                     match("--"); if (failed) return ;
 
@@ -1822,7 +1850,7 @@
                     }
                     break;
                 case 29 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:55: '>>>'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:55: '>>>'
                     {
                     match(">>>"); if (failed) return ;
 
@@ -1830,7 +1858,7 @@
                     }
                     break;
                 case 30 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:63: '=='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:63: '=='
                     {
                     match("=="); if (failed) return ;
 
@@ -1838,7 +1866,7 @@
                     }
                     break;
                 case 31 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:70: '+='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:70: '+='
                     {
                     match("+="); if (failed) return ;
 
@@ -1846,7 +1874,7 @@
                     }
                     break;
                 case 32 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:77: '=+'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:77: '=+'
                     {
                     match("=+"); if (failed) return ;
 
@@ -1854,7 +1882,7 @@
                     }
                     break;
                 case 33 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:84: '-='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:84: '-='
                     {
                     match("-="); if (failed) return ;
 
@@ -1862,7 +1890,7 @@
                     }
                     break;
                 case 34 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:91: '=-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:91: '=-'
                     {
                     match("=-"); if (failed) return ;
 
@@ -1870,7 +1898,7 @@
                     }
                     break;
                 case 35 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:97: '*='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:97: '*='
                     {
                     match("*="); if (failed) return ;
 
@@ -1878,7 +1906,7 @@
                     }
                     break;
                 case 36 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1156:104: '=*'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1242:104: '=*'
                     {
                     match("=*"); if (failed) return ;
 
@@ -1886,7 +1914,7 @@
                     }
                     break;
                 case 37 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1157:19: '/='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1243:19: '/='
                     {
                     match("/="); if (failed) return ;
 
@@ -1894,7 +1922,7 @@
                     }
                     break;
                 case 38 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1157:26: '=/'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1243:26: '=/'
                     {
                     match("=/"); if (failed) return ;
 
@@ -1902,7 +1930,7 @@
                     }
                     break;
                 case 39 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1157:33: '>>='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1243:33: '>>='
                     {
                     match(">>="); if (failed) return ;
 
@@ -1914,7 +1942,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 52, MISC_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 53, MISC_StartIndex); }
         }
     }
     // $ANTLR end MISC
@@ -1929,9 +1957,9 @@
             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:1161:17: ( (' '|'\t'|'\f'))
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1161:17: (' '|'\t'|'\f')
+            if ( backtracking>0 && alreadyParsedRule(input, 54) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1247:17: ( (' '|'\t'|'\f'))
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1247:17: (' '|'\t'|'\f')
             {
             if ( input.LA(1)=='\t'||input.LA(1)=='\f'||input.LA(1)==' ' ) {
                 input.consume();
@@ -1953,7 +1981,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 53, WS_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 54, WS_StartIndex); }
         }
     }
     // $ANTLR end WS
@@ -1968,11 +1996,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:1169:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1169:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            if ( backtracking>0 && alreadyParsedRule(input, 55) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1255:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1255:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1169:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1255:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
             if ( LA2_0=='\r' ) {
@@ -1989,13 +2017,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1169:17: ( ( \'\\r\\n\' )=> \'\\r\\n\' | \'\\r\' | \'\\n\' )", 2, 0, input);
+                    new NoViableAltException("1255: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:1169:25: ( '\r\n' )=> '\r\n'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1255:25: ( '\r\n' )=> '\r\n'
                     {
 
                     match("\r\n"); if (failed) return ;
@@ -2004,14 +2032,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1170:25: '\r'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1256: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:1171:25: '\n'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1257:25: '\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -2026,7 +2054,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 54, EOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 55, EOL_StartIndex); }
         }
     }
     // $ANTLR end EOL
@@ -2041,11 +2069,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:1176:17: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1176:17: ( '-' )? ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1262:17: ( ( '-' )? ( '0' .. '9' )+ )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1262:17: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1176:17: ( '-' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1262:17: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
             if ( LA3_0=='-' ) {
@@ -2057,13 +2085,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1176:17: ( \'-\' )?", 3, 0, input);
+                    new NoViableAltException("1262: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:1176:18: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1262:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -2072,7 +2100,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1176:23: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1262:23: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -2085,7 +2113,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1176:24: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1262:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2108,7 +2136,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 55, INT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 56, INT_StartIndex); }
         }
     }
     // $ANTLR end INT
@@ -2123,11 +2151,11 @@
             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:1180:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1180:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1180:17: ( '-' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:17: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
             if ( LA5_0=='-' ) {
@@ -2139,13 +2167,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1180:17: ( \'-\' )?", 5, 0, input);
+                    new NoViableAltException("1266: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:1180:18: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -2154,7 +2182,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1180:23: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:23: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -2167,7 +2195,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1180:24: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2185,7 +2213,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1180:39: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:39: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -2198,7 +2226,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1180:40: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1266:40: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2221,7 +2249,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 56, FLOAT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 57, FLOAT_StartIndex); }
         }
     }
     // $ANTLR end FLOAT
@@ -2236,8 +2264,8 @@
             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:1184:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
+            if ( backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
             if ( LA10_0=='"' ) {
@@ -2249,19 +2277,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1183:1: STRING : ( ( \'\"\' ( options {greedy=false; } : . )* \'\"\' ) | ( \'\\\'\' ( options {greedy=false; } : . )* \'\\\'\' ) );", 10, 0, input);
+                    new NoViableAltException("1269: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:1184:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:17: ( '"' ( options {greedy=false; } : . )* '"' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:17: ( '"' ( options {greedy=false; } : . )* '"' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:18: '"' ( options {greedy=false; } : . )* '"'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:18: '"' ( options {greedy=false; } : . )* '"'
                     {
                     match('"'); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:22: ( options {greedy=false; } : . )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:22: ( options {greedy=false; } : . )*
                     loop8:
                     do {
                         int alt8=2;
@@ -2276,7 +2304,7 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:49: .
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:49: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2296,13 +2324,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:62: '\'' ( options {greedy=false; } : . )* '\''
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:62: '\'' ( options {greedy=false; } : . )* '\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:67: ( options {greedy=false; } : . )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:67: ( options {greedy=false; } : . )*
                     loop9:
                     do {
                         int alt9=2;
@@ -2317,7 +2345,7 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1184:94: .
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1270:94: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2341,7 +2369,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 57, STRING_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 58, STRING_StartIndex); }
         }
     }
     // $ANTLR end STRING
@@ -2356,11 +2384,11 @@
             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:1188:17: ( ( 'true' | 'false' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:17: ( 'true' | 'false' )
+            if ( backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1274:17: ( ( 'true' | 'false' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1274:17: ( 'true' | 'false' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:17: ( 'true' | 'false' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1274:17: ( 'true' | 'false' )
             int alt11=2;
             int LA11_0 = input.LA(1);
             if ( LA11_0=='t' ) {
@@ -2372,13 +2400,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1188:17: ( \'true\' | \'false\' )", 11, 0, input);
+                    new NoViableAltException("1274: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:1188:18: 'true'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1274:18: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -2386,7 +2414,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1188:25: 'false'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1274:25: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -2402,7 +2430,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 58, BOOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 59, BOOL_StartIndex); }
         }
     }
     // $ANTLR end BOOL
@@ -2417,9 +2445,9 @@
             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:1192: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:1192:17: ('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff') ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1278: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:1278: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();
@@ -2432,7 +2460,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1192:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1278:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
             loop12:
             do {
                 int alt12=2;
@@ -2444,7 +2472,7 @@
 
                 switch (alt12) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1192:66: ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1278: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();
@@ -2472,7 +2500,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 59, ID_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 60, ID_StartIndex); }
         }
     }
     // $ANTLR end ID
@@ -2487,12 +2515,12 @@
             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:1198:17: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1198: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:1284:17: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1284:17: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1198:21: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1284:21: ( options {greedy=false; } : . )*
             loop13:
             do {
                 int alt13=2;
@@ -2510,7 +2538,7 @@
 
                 switch (alt13) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1198:48: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1284:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2532,7 +2560,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 60, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 61, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end SH_STYLE_SINGLE_LINE_COMMENT
@@ -2547,13 +2575,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:1204:17: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1204:17: '//' ( options {greedy=false; } : . )* EOL
+            if ( backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1290:17: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1290:17: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1204:22: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1290:22: ( options {greedy=false; } : . )*
             loop14:
             do {
                 int alt14=2;
@@ -2571,7 +2599,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1204:49: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1290:49: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2593,7 +2621,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 61, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 62, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
@@ -2608,13 +2636,13 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1209:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1209:17: '/*' ( options {greedy=false; } : . )* '*/'
+            if ( backtracking>0 && alreadyParsedRule(input, 63) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1295:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1295:17: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1209:22: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1295:22: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2637,7 +2665,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1209:48: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1295:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2660,14 +2688,14 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 62, MULTI_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 63, 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 | 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;
+        // /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 | T66 | MISC | WS | EOL | INT | FLOAT | STRING | BOOL | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT )
+        int alt16=63;
         alt16 = dfa16.predict(input); if (failed) return ;
         switch (alt16) {
             case 1 :
@@ -3028,78 +3056,85 @@
                 }
                 break;
             case 52 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:214: MISC
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:214: T66
                 {
-                mMISC(); if (failed) return ;
+                mT66(); if (failed) return ;
 
                 }
                 break;
             case 53 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:219: WS
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:218: MISC
                 {
-                mWS(); if (failed) return ;
+                mMISC(); if (failed) return ;
 
                 }
                 break;
             case 54 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:222: EOL
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:223: WS
                 {
-                mEOL(); if (failed) return ;
+                mWS(); if (failed) return ;
 
                 }
                 break;
             case 55 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:226: INT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:226: EOL
                 {
-                mINT(); if (failed) return ;
+                mEOL(); if (failed) return ;
 
                 }
                 break;
             case 56 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:230: FLOAT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:230: INT
                 {
-                mFLOAT(); if (failed) return ;
+                mINT(); if (failed) return ;
 
                 }
                 break;
             case 57 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:236: STRING
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:234: FLOAT
                 {
-                mSTRING(); if (failed) return ;
+                mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 58 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:243: BOOL
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:240: STRING
                 {
-                mBOOL(); if (failed) return ;
+                mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 59 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:248: ID
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:247: BOOL
                 {
-                mID(); if (failed) return ;
+                mBOOL(); if (failed) return ;
 
                 }
                 break;
             case 60 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:251: SH_STYLE_SINGLE_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:252: ID
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mID(); if (failed) return ;
 
                 }
                 break;
             case 61 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:280: C_STYLE_SINGLE_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:255: SH_STYLE_SINGLE_LINE_COMMENT
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mSH_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
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:284: C_STYLE_SINGLE_LINE_COMMENT
                 {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 63 :
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:312: MULTI_LINE_COMMENT
+                {
                 mMULTI_LINE_COMMENT(); if (failed) return ;
 
                 }
@@ -3114,9 +3149,9 @@
     public void mSynpred1_fragment() throws RecognitionException {
         int Synpred1_fragment_StartIndex = input.index();
         try {
-            if ( backtracking>0 && alreadyParsedRule(input, 64) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1169:25: ( '\r\n' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1169:27: '\r\n'
+            if ( backtracking>0 && alreadyParsedRule(input, 65) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1255:25: ( '\r\n' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1255:27: '\r\n'
             {
             match("\r\n"); if (failed) return ;
 
@@ -3125,7 +3160,7 @@
 
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 64, Synpred1_fragment_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 65, Synpred1_fragment_StartIndex); }
         }
     }
     // $ANTLR end Synpred1_fragment
@@ -3142,44 +3177,44 @@
             return predict(input, s0);
         }
         DFA.State s1 = new DFA.State() {{alt=1;}};
-        DFA.State s483 = new DFA.State() {{alt=2;}};
-        DFA.State s51 = new DFA.State() {{alt=59;}};
-        DFA.State s441 = new DFA.State() {
+        DFA.State s492 = new DFA.State() {{alt=2;}};
+        DFA.State s51 = new DFA.State() {{alt=60;}};
+        DFA.State s450 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_450 = input.LA(1);
+                if ( (LA16_450>='0' && LA16_450<='9')||(LA16_450>='A' && LA16_450<='Z')||LA16_450=='_'||(LA16_450>='a' && LA16_450<='z')||(LA16_450>='\u00C0' && LA16_450<='\u00FF') ) {return s51;}
+                return s492;
 
             }
         };
-        DFA.State s392 = new DFA.State() {
+        DFA.State s401 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_392 = input.LA(1);
-                if ( LA16_392=='e' ) {return s441;}
+                int LA16_401 = input.LA(1);
+                if ( LA16_401=='e' ) {return s450;}
                 return s51;
 
             }
         };
-        DFA.State s326 = new DFA.State() {
+        DFA.State s333 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_326 = input.LA(1);
-                if ( LA16_326=='g' ) {return s392;}
+                int LA16_333 = input.LA(1);
+                if ( LA16_333=='g' ) {return s401;}
                 return s51;
 
             }
         };
-        DFA.State s246 = new DFA.State() {
+        DFA.State s250 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_246 = input.LA(1);
-                if ( LA16_246=='a' ) {return s326;}
+                int LA16_250 = input.LA(1);
+                if ( LA16_250=='a' ) {return s333;}
                 return s51;
 
             }
         };
-        DFA.State s160 = new DFA.State() {
+        DFA.State s161 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_160 = input.LA(1);
-                if ( LA16_160=='k' ) {return s246;}
+                int LA16_161 = input.LA(1);
+                if ( LA16_161=='k' ) {return s250;}
                 return s51;
 
             }
@@ -3187,7 +3222,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 s160;}
+                if ( LA16_53=='c' ) {return s161;}
                 return s51;
 
             }
@@ -3200,35 +3235,35 @@
 
             }
         };
-        DFA.State s444 = new DFA.State() {{alt=3;}};
-        DFA.State s395 = new DFA.State() {
+        DFA.State s453 = new DFA.State() {{alt=3;}};
+        DFA.State s404 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                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 s453;
 
             }
         };
-        DFA.State s329 = new DFA.State() {
+        DFA.State s336 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_329 = input.LA(1);
-                if ( LA16_329=='t' ) {return s395;}
+                int LA16_336 = input.LA(1);
+                if ( LA16_336=='t' ) {return s404;}
                 return s51;
 
             }
         };
-        DFA.State s249 = new DFA.State() {
+        DFA.State s253 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_249 = input.LA(1);
-                if ( LA16_249=='r' ) {return s329;}
+                int LA16_253 = input.LA(1);
+                if ( LA16_253=='r' ) {return s336;}
                 return s51;
 
             }
         };
-        DFA.State s163 = new DFA.State() {
+        DFA.State s164 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_163 = input.LA(1);
-                if ( LA16_163=='o' ) {return s249;}
+                int LA16_164 = input.LA(1);
+                if ( LA16_164=='o' ) {return s253;}
                 return s51;
 
             }
@@ -3236,7 +3271,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 s163;}
+                if ( LA16_56=='p' ) {return s164;}
                 return s51;
 
             }
@@ -3259,206 +3294,206 @@
 
             }
         };
-        DFA.State s514 = new DFA.State() {{alt=51;}};
-        DFA.State s485 = new DFA.State() {
+        DFA.State s256 = new DFA.State() {{alt=15;}};
+        DFA.State s167 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_167 = input.LA(1);
+                if ( (LA16_167>='0' && LA16_167<='9')||(LA16_167>='A' && LA16_167<='Z')||LA16_167=='_'||(LA16_167>='a' && LA16_167<='z')||(LA16_167>='\u00C0' && LA16_167<='\u00FF') ) {return s51;}
+                return s256;
 
             }
         };
-        DFA.State s446 = new DFA.State() {
+        DFA.State s61 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_446 = input.LA(1);
-                if ( LA16_446=='s' ) {return s485;}
+                int LA16_61 = input.LA(1);
+                if ( LA16_61=='d' ) {return s167;}
                 return s51;
 
             }
         };
-        DFA.State s398 = new DFA.State() {
+        DFA.State s339 = new DFA.State() {{alt=39;}};
+        DFA.State s258 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_398 = input.LA(1);
-                if ( LA16_398=='e' ) {return s446;}
-                return s51;
+                int LA16_258 = input.LA(1);
+                if ( (LA16_258>='0' && LA16_258<='9')||(LA16_258>='A' && LA16_258<='Z')||LA16_258=='_'||(LA16_258>='a' && LA16_258<='z')||(LA16_258>='\u00C0' && LA16_258<='\u00FF') ) {return s51;}
+                return s339;
 
             }
         };
-        DFA.State s332 = new DFA.State() {
+        DFA.State s170 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_332 = input.LA(1);
-                if ( LA16_332=='d' ) {return s398;}
+                int LA16_170 = input.LA(1);
+                if ( LA16_170=='l' ) {return s258;}
                 return s51;
 
             }
         };
-        DFA.State s252 = new DFA.State() {
+        DFA.State s62 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_252 = input.LA(1);
-                if ( LA16_252=='u' ) {return s332;}
+                int LA16_62 = input.LA(1);
+                if ( LA16_62=='a' ) {return s170;}
                 return s51;
 
             }
         };
-        DFA.State s166 = new DFA.State() {
+        DFA.State s523 = new DFA.State() {{alt=52;}};
+        DFA.State s494 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_166 = input.LA(1);
-                if ( LA16_166=='l' ) {return s252;}
-                return s51;
+                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 s523;
 
             }
         };
-        DFA.State s516 = new DFA.State() {{alt=6;}};
-        DFA.State s488 = new DFA.State() {
+        DFA.State s455 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_455 = input.LA(1);
+                if ( LA16_455=='s' ) {return s494;}
+                return s51;
 
             }
         };
-        DFA.State s449 = new DFA.State() {
+        DFA.State s407 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_449 = input.LA(1);
-                if ( LA16_449=='r' ) {return s488;}
+                int LA16_407 = input.LA(1);
+                if ( LA16_407=='e' ) {return s455;}
                 return s51;
 
             }
         };
-        DFA.State s401 = new DFA.State() {
+        DFA.State s341 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_401 = input.LA(1);
-                if ( LA16_401=='e' ) {return s449;}
+                int LA16_341 = input.LA(1);
+                if ( LA16_341=='d' ) {return s407;}
                 return s51;
 
             }
         };
-        DFA.State s335 = new DFA.State() {
+        DFA.State s261 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_335 = input.LA(1);
-                if ( LA16_335=='d' ) {return s401;}
+                int LA16_261 = input.LA(1);
+                if ( LA16_261=='u' ) {return s341;}
                 return s51;
 
             }
         };
-        DFA.State s255 = new DFA.State() {
+        DFA.State s173 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_255 = input.LA(1);
-                if ( LA16_255=='n' ) {return s335;}
+                int LA16_173 = input.LA(1);
+                if ( LA16_173=='l' ) {return s261;}
                 return s51;
 
             }
         };
-        DFA.State s167 = new DFA.State() {
+        DFA.State s458 = new DFA.State() {{alt=37;}};
+        DFA.State s410 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_167 = input.LA(1);
-                if ( LA16_167=='a' ) {return s255;}
-                return s51;
+                int LA16_410 = input.LA(1);
+                if ( (LA16_410>='0' && LA16_410<='9')||(LA16_410>='A' && LA16_410<='Z')||LA16_410=='_'||(LA16_410>='a' && LA16_410<='z')||(LA16_410>='\u00C0' && LA16_410<='\u00FF') ) {return s51;}
+                return s458;
 
             }
         };
-        DFA.State s452 = new DFA.State() {{alt=36;}};
-        DFA.State s404 = new DFA.State() {
+        DFA.State s344 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_344 = input.LA(1);
+                if ( LA16_344=='s' ) {return s410;}
+                return s51;
 
             }
         };
-        DFA.State s338 = new DFA.State() {
+        DFA.State s264 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_338 = input.LA(1);
-                if ( LA16_338=='s' ) {return s404;}
+                int LA16_264 = input.LA(1);
+                if ( LA16_264=='t' ) {return s344;}
                 return s51;
 
             }
         };
-        DFA.State s258 = new DFA.State() {
+        DFA.State s174 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_258 = input.LA(1);
-                if ( LA16_258=='t' ) {return s338;}
+                int LA16_174 = input.LA(1);
+                if ( LA16_174=='s' ) {return s264;}
                 return s51;
 
             }
         };
-        DFA.State s168 = new DFA.State() {
+        DFA.State s525 = new DFA.State() {{alt=6;}};
+        DFA.State s497 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_168 = input.LA(1);
-                if ( LA16_168=='s' ) {return s258;}
-                return s51;
+                int LA16_497 = input.LA(1);
+                if ( (LA16_497>='0' && LA16_497<='9')||(LA16_497>='A' && LA16_497<='Z')||LA16_497=='_'||(LA16_497>='a' && LA16_497<='z')||(LA16_497>='\u00C0' && LA16_497<='\u00FF') ) {return s51;}
+                return s525;
 
             }
         };
-        DFA.State s61 = new DFA.State() {
+        DFA.State s460 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                switch ( input.LA(1) ) {
-                case 'c':
-                    return s166;
+                int LA16_460 = input.LA(1);
+                if ( LA16_460=='r' ) {return s497;}
+                return s51;
 
-                case 'p':
-                    return s167;
-
-                case 'i':
-                    return s168;
-
-                default:
-                    return s51;
-        	        }
             }
         };
-        DFA.State s261 = new DFA.State() {{alt=15;}};
-        DFA.State s171 = new DFA.State() {
+        DFA.State s413 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_413 = input.LA(1);
+                if ( LA16_413=='e' ) {return s460;}
+                return s51;
 
             }
         };
-        DFA.State s62 = new DFA.State() {
+        DFA.State s347 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_62 = input.LA(1);
-                if ( LA16_62=='d' ) {return s171;}
+                int LA16_347 = input.LA(1);
+                if ( LA16_347=='d' ) {return s413;}
                 return s51;
 
             }
         };
-        DFA.State s341 = new DFA.State() {{alt=38;}};
-        DFA.State s263 = new DFA.State() {
+        DFA.State s267 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_267 = input.LA(1);
+                if ( LA16_267=='n' ) {return s347;}
+                return s51;
 
             }
         };
-        DFA.State s174 = new DFA.State() {
+        DFA.State s175 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_174 = input.LA(1);
-                if ( LA16_174=='l' ) {return s263;}
+                int LA16_175 = input.LA(1);
+                if ( LA16_175=='a' ) {return s267;}
                 return s51;
 
             }
         };
         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 s174;}
-                return s51;
+                switch ( input.LA(1) ) {
+                case 'c':
+                    return s173;
 
+                case 'i':
+                    return s174;
+
+                case 'p':
+                    return s175;
+
+                default:
+                    return s51;
+        	        }
             }
         };
         DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'x':
+                case 'n':
                     return s61;
 
-                case 'n':
+                case 'v':
                     return s62;
 
-                case 'v':
+                case 'x':
                     return s63;
 
                 default:
@@ -3466,35 +3501,35 @@
         	        }
             }
         };
-        DFA.State s454 = new DFA.State() {{alt=7;}};
-        DFA.State s407 = new DFA.State() {
+        DFA.State s463 = new DFA.State() {{alt=7;}};
+        DFA.State s416 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_416 = input.LA(1);
+                if ( (LA16_416>='0' && LA16_416<='9')||(LA16_416>='A' && LA16_416<='Z')||LA16_416=='_'||(LA16_416>='a' && LA16_416<='z')||(LA16_416>='\u00C0' && LA16_416<='\u00FF') ) {return s51;}
+                return s463;
 
             }
         };
-        DFA.State s343 = new DFA.State() {
+        DFA.State s350 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_343 = input.LA(1);
-                if ( LA16_343=='l' ) {return s407;}
+                int LA16_350 = input.LA(1);
+                if ( LA16_350=='l' ) {return s416;}
                 return s51;
 
             }
         };
-        DFA.State s266 = new DFA.State() {
+        DFA.State s270 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_266 = input.LA(1);
-                if ( LA16_266=='a' ) {return s343;}
+                int LA16_270 = input.LA(1);
+                if ( LA16_270=='a' ) {return s350;}
                 return s51;
 
             }
         };
-        DFA.State s177 = new DFA.State() {
+        DFA.State s178 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_177 = input.LA(1);
-                if ( LA16_177=='b' ) {return s266;}
+                int LA16_178 = input.LA(1);
+                if ( LA16_178=='b' ) {return s270;}
                 return s51;
 
             }
@@ -3502,7 +3537,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 s177;}
+                if ( LA16_66=='o' ) {return s178;}
                 return s51;
 
             }
@@ -3515,179 +3550,207 @@
 
             }
         };
-        DFA.State s518 = new DFA.State() {{alt=8;}};
-        DFA.State s491 = new DFA.State() {
+        DFA.State s366 = new DFA.State() {{alt=59;}};
+        DFA.State s353 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_353 = input.LA(1);
+                if ( (LA16_353>='0' && LA16_353<='9')||(LA16_353>='A' && LA16_353<='Z')||LA16_353=='_'||(LA16_353>='a' && LA16_353<='z')||(LA16_353>='\u00C0' && LA16_353<='\u00FF') ) {return s51;}
+                return s366;
 
             }
         };
-        DFA.State s456 = new DFA.State() {
+        DFA.State s273 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_456 = input.LA(1);
-                if ( LA16_456=='n' ) {return s491;}
+                int LA16_273 = input.LA(1);
+                if ( LA16_273=='e' ) {return s353;}
                 return s51;
 
             }
         };
-        DFA.State s410 = new DFA.State() {
+        DFA.State s181 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_410 = input.LA(1);
-                if ( LA16_410=='o' ) {return s456;}
+                int LA16_181 = input.LA(1);
+                if ( LA16_181=='s' ) {return s273;}
                 return s51;
 
             }
         };
-        DFA.State s346 = new DFA.State() {
+        DFA.State s69 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_346 = input.LA(1);
-                if ( LA16_346=='i' ) {return s410;}
+                int LA16_69 = input.LA(1);
+                if ( LA16_69=='l' ) {return s181;}
                 return s51;
 
             }
         };
-        DFA.State s269 = new DFA.State() {
+        DFA.State s356 = new DFA.State() {{alt=28;}};
+        DFA.State s276 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_269 = input.LA(1);
-                if ( LA16_269=='t' ) {return s346;}
+                int LA16_276 = input.LA(1);
+                if ( (LA16_276>='0' && LA16_276<='9')||(LA16_276>='A' && LA16_276<='Z')||LA16_276=='_'||(LA16_276>='a' && LA16_276<='z')||(LA16_276>='\u00C0' && LA16_276<='\u00FF') ) {return s51;}
+                return s356;
+
+            }
+        };
+        DFA.State s184 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_184 = input.LA(1);
+                if ( LA16_184=='m' ) {return s276;}
                 return s51;
 
             }
         };
-        DFA.State s180 = new DFA.State() {
+        DFA.State s70 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_180 = input.LA(1);
-                if ( LA16_180=='c' ) {return s269;}
+                int LA16_70 = input.LA(1);
+                if ( LA16_70=='o' ) {return s184;}
                 return s51;
 
             }
         };
-        DFA.State s69 = new DFA.State() {
+        DFA.State s527 = new DFA.State() {{alt=8;}};
+        DFA.State s500 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_69 = input.LA(1);
-                if ( LA16_69=='n' ) {return s180;}
+                int LA16_500 = input.LA(1);
+                if ( (LA16_500>='0' && LA16_500<='9')||(LA16_500>='A' && LA16_500<='Z')||LA16_500=='_'||(LA16_500>='a' && LA16_500<='z')||(LA16_500>='\u00C0' && LA16_500<='\u00FF') ) {return s51;}
+                return s527;
+
+            }
+        };
+        DFA.State s465 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_465 = input.LA(1);
+                if ( LA16_465=='n' ) {return s500;}
                 return s51;
 
             }
         };
-        DFA.State s358 = new DFA.State() {{alt=58;}};
-        DFA.State s349 = new DFA.State() {
+        DFA.State s421 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_421 = input.LA(1);
+                if ( LA16_421=='o' ) {return s465;}
+                return s51;
 
             }
         };
-        DFA.State s272 = new DFA.State() {
+        DFA.State s358 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_272 = input.LA(1);
-                if ( LA16_272=='e' ) {return s349;}
+                int LA16_358 = input.LA(1);
+                if ( LA16_358=='i' ) {return s421;}
                 return s51;
 
             }
         };
-        DFA.State s183 = new DFA.State() {
+        DFA.State s279 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_183 = input.LA(1);
-                if ( LA16_183=='s' ) {return s272;}
+                int LA16_279 = input.LA(1);
+                if ( LA16_279=='t' ) {return s358;}
                 return s51;
 
             }
         };
-        DFA.State s70 = new DFA.State() {
+        DFA.State s187 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_70 = input.LA(1);
-                if ( LA16_70=='l' ) {return s183;}
+                int LA16_187 = input.LA(1);
+                if ( LA16_187=='c' ) {return s279;}
                 return s51;
 
             }
         };
+        DFA.State s71 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_71 = input.LA(1);
+                if ( LA16_71=='n' ) {return s187;}
+                return s51;
+
+            }
+        };
         DFA.State s7 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'u':
+                case 'a':
                     return s69;
 
-                case 'a':
+                case 'r':
                     return s70;
 
+                case 'u':
+                    return s71;
+
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s73 = new DFA.State() {{alt=9;}};
+        DFA.State s74 = new DFA.State() {{alt=9;}};
         DFA.State s8 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_8 = input.LA(1);
-                return s73;
+                return s74;
 
             }
         };
-        DFA.State s74 = new DFA.State() {{alt=10;}};
+        DFA.State s75 = new DFA.State() {{alt=10;}};
         DFA.State s9 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_9 = input.LA(1);
-                return s74;
+                return s75;
 
             }
         };
-        DFA.State s75 = new DFA.State() {{alt=11;}};
+        DFA.State s76 = new DFA.State() {{alt=11;}};
         DFA.State s10 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_10 = input.LA(1);
-                return s75;
+                return s76;
 
             }
         };
-        DFA.State s76 = new DFA.State() {{alt=12;}};
+        DFA.State s77 = new DFA.State() {{alt=12;}};
         DFA.State s11 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_11 = input.LA(1);
-                return s76;
+                return s77;
 
             }
         };
-        DFA.State s77 = new DFA.State() {{alt=13;}};
+        DFA.State s78 = new DFA.State() {{alt=13;}};
         DFA.State s12 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_12 = input.LA(1);
-                return s77;
+                return s78;
 
             }
         };
-        DFA.State s415 = new DFA.State() {{alt=14;}};
-        DFA.State s352 = new DFA.State() {
+        DFA.State s424 = new DFA.State() {{alt=14;}};
+        DFA.State s361 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_361 = input.LA(1);
+                if ( (LA16_361>='0' && LA16_361<='9')||(LA16_361>='A' && LA16_361<='Z')||LA16_361=='_'||(LA16_361>='a' && LA16_361<='z')||(LA16_361>='\u00C0' && LA16_361<='\u00FF') ) {return s51;}
+                return s424;
 
             }
         };
-        DFA.State s275 = new DFA.State() {
+        DFA.State s282 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_275 = input.LA(1);
-                if ( LA16_275=='y' ) {return s352;}
+                int LA16_282 = input.LA(1);
+                if ( LA16_282=='y' ) {return s361;}
                 return s51;
 
             }
         };
-        DFA.State s186 = new DFA.State() {
+        DFA.State s190 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_186 = input.LA(1);
-                if ( LA16_186=='r' ) {return s275;}
+                int LA16_190 = input.LA(1);
+                if ( LA16_190=='r' ) {return s282;}
                 return s51;
 
             }
         };
-        DFA.State s78 = new DFA.State() {
+        DFA.State s79 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_78 = input.LA(1);
-                if ( LA16_78=='e' ) {return s186;}
+                int LA16_79 = input.LA(1);
+                if ( LA16_79=='e' ) {return s190;}
                 return s51;
 
             }
@@ -3695,113 +3758,113 @@
         DFA.State s13 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_13 = input.LA(1);
-                if ( LA16_13=='u' ) {return s78;}
+                if ( LA16_13=='u' ) {return s79;}
                 return s51;
 
             }
         };
-        DFA.State s520 = new DFA.State() {{alt=16;}};
-        DFA.State s494 = new DFA.State() {
+        DFA.State s364 = new DFA.State() {{alt=20;}};
+        DFA.State s285 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_285 = input.LA(1);
+                if ( (LA16_285>='0' && LA16_285<='9')||(LA16_285>='A' && LA16_285<='Z')||LA16_285=='_'||(LA16_285>='a' && LA16_285<='z')||(LA16_285>='\u00C0' && LA16_285<='\u00FF') ) {return s51;}
+                return s364;
 
             }
         };
-        DFA.State s459 = new DFA.State() {
+        DFA.State s193 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_459 = input.LA(1);
-                if ( LA16_459=='e' ) {return s494;}
+                int LA16_193 = input.LA(1);
+                if ( LA16_193=='n' ) {return s285;}
                 return s51;
 
             }
         };
-        DFA.State s417 = new DFA.State() {
+        DFA.State s82 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_417 = input.LA(1);
-                if ( LA16_417=='t' ) {return s459;}
+                int LA16_82 = input.LA(1);
+                if ( LA16_82=='e' ) {return s193;}
                 return s51;
 
             }
         };
-        DFA.State s355 = new DFA.State() {
+        DFA.State s288 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_355 = input.LA(1);
-                if ( LA16_355=='a' ) {return s417;}
-                return s51;
+                int LA16_288 = input.LA(1);
+                if ( (LA16_288>='0' && LA16_288<='9')||(LA16_288>='A' && LA16_288<='Z')||LA16_288=='_'||(LA16_288>='a' && LA16_288<='z')||(LA16_288>='\u00C0' && LA16_288<='\u00FF') ) {return s51;}
+                return s366;
 
             }
         };
-        DFA.State s278 = new DFA.State() {
+        DFA.State s196 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_278 = input.LA(1);
-                if ( LA16_278=='l' ) {return s355;}
+                int LA16_196 = input.LA(1);
+                if ( LA16_196=='e' ) {return s288;}
                 return s51;
 
             }
         };
-        DFA.State s189 = new DFA.State() {
+        DFA.State s83 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_189 = input.LA(1);
-                if ( LA16_189=='p' ) {return s278;}
+                int LA16_83 = input.LA(1);
+                if ( LA16_83=='u' ) {return s196;}
                 return s51;
 
             }
         };
-        DFA.State s81 = new DFA.State() {
+        DFA.State s529 = new DFA.State() {{alt=16;}};
+        DFA.State s503 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_81 = input.LA(1);
-                if ( LA16_81=='m' ) {return s189;}
-                return s51;
+                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 s529;
 
             }
         };
-        DFA.State s281 = new DFA.State() {
+        DFA.State s468 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_468 = input.LA(1);
+                if ( LA16_468=='e' ) {return s503;}
+                return s51;
 
             }
         };
-        DFA.State s192 = new DFA.State() {
+        DFA.State s426 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_192 = input.LA(1);
-                if ( LA16_192=='e' ) {return s281;}
+                int LA16_426 = input.LA(1);
+                if ( LA16_426=='t' ) {return s468;}
                 return s51;
 
             }
         };
-        DFA.State s82 = new DFA.State() {
+        DFA.State s368 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_82 = input.LA(1);
-                if ( LA16_82=='u' ) {return s192;}
+                int LA16_368 = input.LA(1);
+                if ( LA16_368=='a' ) {return s426;}
                 return s51;
 
             }
         };
-        DFA.State s360 = new DFA.State() {{alt=20;}};
-        DFA.State s284 = new DFA.State() {
+        DFA.State s291 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_291 = input.LA(1);
+                if ( LA16_291=='l' ) {return s368;}
+                return s51;
 
             }
         };
-        DFA.State s195 = new DFA.State() {
+        DFA.State s199 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_195 = input.LA(1);
-                if ( LA16_195=='n' ) {return s284;}
+                int LA16_199 = input.LA(1);
+                if ( LA16_199=='p' ) {return s291;}
                 return s51;
 
             }
         };
-        DFA.State s83 = new DFA.State() {
+        DFA.State s84 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_83 = input.LA(1);
-                if ( LA16_83=='e' ) {return s195;}
+                int LA16_84 = input.LA(1);
+                if ( LA16_84=='m' ) {return s199;}
                 return s51;
 
             }
@@ -3809,41 +3872,41 @@
         DFA.State s14 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'e':
-                    return s81;
+                case 'h':
+                    return s82;
 
                 case 'r':
-                    return s82;
-
-                case 'h':
                     return s83;
 
+                case 'e':
+                    return s84;
+
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s362 = new DFA.State() {{alt=17;}};
-        DFA.State s287 = new DFA.State() {
+        DFA.State s371 = new DFA.State() {{alt=17;}};
+        DFA.State s294 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_294 = input.LA(1);
+                if ( (LA16_294>='0' && LA16_294<='9')||(LA16_294>='A' && LA16_294<='Z')||LA16_294=='_'||(LA16_294>='a' && LA16_294<='z')||(LA16_294>='\u00C0' && LA16_294<='\u00FF') ) {return s51;}
+                return s371;
 
             }
         };
-        DFA.State s198 = new DFA.State() {
+        DFA.State s202 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_198 = input.LA(1);
-                if ( LA16_198=='e' ) {return s287;}
+                int LA16_202 = input.LA(1);
+                if ( LA16_202=='e' ) {return s294;}
                 return s51;
 
             }
         };
-        DFA.State s86 = new DFA.State() {
+        DFA.State s87 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_86 = input.LA(1);
-                if ( LA16_86=='l' ) {return s198;}
+                int LA16_87 = input.LA(1);
+                if ( LA16_87=='l' ) {return s202;}
                 return s51;
 
             }
@@ -3851,32 +3914,32 @@
         DFA.State s15 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_15 = input.LA(1);
-                if ( LA16_15=='u' ) {return s86;}
+                if ( LA16_15=='u' ) {return s87;}
                 return s51;
 
             }
         };
-        DFA.State s364 = new DFA.State() {{alt=18;}};
-        DFA.State s290 = new DFA.State() {
+        DFA.State s373 = new DFA.State() {{alt=18;}};
+        DFA.State s297 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_297 = input.LA(1);
+                if ( (LA16_297>='0' && LA16_297<='9')||(LA16_297>='A' && LA16_297<='Z')||LA16_297=='_'||(LA16_297>='a' && LA16_297<='z')||(LA16_297>='\u00C0' && LA16_297<='\u00FF') ) {return s51;}
+                return s373;
 
             }
         };
-        DFA.State s201 = new DFA.State() {
+        DFA.State s205 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_201 = input.LA(1);
-                if ( LA16_201=='n' ) {return s290;}
+                int LA16_205 = input.LA(1);
+                if ( LA16_205=='n' ) {return s297;}
                 return s51;
 
             }
         };
-        DFA.State s89 = new DFA.State() {
+        DFA.State s90 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_89 = input.LA(1);
-                if ( LA16_89=='e' ) {return s201;}
+                int LA16_90 = input.LA(1);
+                if ( LA16_90=='e' ) {return s205;}
                 return s51;
 
             }
@@ -3884,237 +3947,237 @@
         DFA.State s16 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_16 = input.LA(1);
-                if ( LA16_16=='h' ) {return s89;}
+                if ( LA16_16=='h' ) {return s90;}
                 return s51;
 
             }
         };
         DFA.State s17 = new DFA.State() {{alt=19;}};
-        DFA.State s293 = new DFA.State() {{alt=34;}};
-        DFA.State s204 = new DFA.State() {
+        DFA.State s471 = new DFA.State() {{alt=26;}};
+        DFA.State s429 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_429 = input.LA(1);
+                if ( LA16_429=='-' ) {return s471;}
+                return s51;
 
             }
         };
-        DFA.State s92 = new DFA.State() {
+        DFA.State s375 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_92 = input.LA(1);
-                if ( LA16_92=='d' ) {return s204;}
+                int LA16_375 = input.LA(1);
+                if ( LA16_375=='a' ) {return s429;}
                 return s51;
 
             }
         };
-        DFA.State s540 = new DFA.State() {{alt=21;}};
-        DFA.State s534 = new DFA.State() {
+        DFA.State s300 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_300 = input.LA(1);
+                if ( LA16_300=='d' ) {return s375;}
+                return s51;
 
             }
         };
-        DFA.State s522 = new DFA.State() {
+        DFA.State s208 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_522 = input.LA(1);
-                if ( LA16_522=='s' ) {return s534;}
+                int LA16_208 = input.LA(1);
+                if ( LA16_208=='n' ) {return s300;}
                 return s51;
 
             }
         };
-        DFA.State s497 = new DFA.State() {
+        DFA.State s93 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_497 = input.LA(1);
-                if ( LA16_497=='e' ) {return s522;}
+                int LA16_93 = input.LA(1);
+                if ( LA16_93=='e' ) {return s208;}
                 return s51;
 
             }
         };
-        DFA.State s462 = new DFA.State() {
+        DFA.State s303 = new DFA.State() {{alt=35;}};
+        DFA.State s211 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_462 = input.LA(1);
-                if ( LA16_462=='t' ) {return s497;}
-                return s51;
+                int LA16_211 = input.LA(1);
+                if ( (LA16_211>='0' && LA16_211<='9')||(LA16_211>='A' && LA16_211<='Z')||LA16_211=='_'||(LA16_211>='a' && LA16_211<='z')||(LA16_211>='\u00C0' && LA16_211<='\u00FF') ) {return s51;}
+                return s303;
 
             }
         };
-        DFA.State s420 = new DFA.State() {
+        DFA.State s94 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_420 = input.LA(1);
-                if ( LA16_420=='u' ) {return s462;}
+                int LA16_94 = input.LA(1);
+                if ( LA16_94=='d' ) {return s211;}
                 return s51;
 
             }
         };
-        DFA.State s366 = new DFA.State() {
+        DFA.State s378 = new DFA.State() {{alt=24;}};
+        DFA.State s305 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_366 = input.LA(1);
-                if ( LA16_366=='b' ) {return s420;}
+                int LA16_305 = input.LA(1);
+                if ( LA16_305=='-' ) {return s378;}
                 return s51;
 
             }
         };
-        DFA.State s295 = new DFA.State() {
+        DFA.State s214 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_295 = input.LA(1);
-                if ( LA16_295=='i' ) {return s366;}
+                int LA16_214 = input.LA(1);
+                if ( LA16_214=='o' ) {return s305;}
                 return s51;
 
             }
         };
-        DFA.State s207 = new DFA.State() {
+        DFA.State s95 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_207 = input.LA(1);
-                if ( LA16_207=='r' ) {return s295;}
+                int LA16_95 = input.LA(1);
+                if ( LA16_95=='t' ) {return s214;}
                 return s51;
 
             }
         };
-        DFA.State s93 = new DFA.State() {
+        DFA.State s549 = new DFA.State() {{alt=21;}};
+        DFA.State s543 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_93 = input.LA(1);
-                if ( LA16_93=='t' ) {return s207;}
-                return s51;
+                int LA16_543 = input.LA(1);
+                if ( (LA16_543>='0' && LA16_543<='9')||(LA16_543>='A' && LA16_543<='Z')||LA16_543=='_'||(LA16_543>='a' && LA16_543<='z')||(LA16_543>='\u00C0' && LA16_543<='\u00FF') ) {return s51;}
+                return s549;
 
             }
         };
-        DFA.State s542 = new DFA.State() {{alt=25;}};
-        DFA.State s537 = new DFA.State() {
+        DFA.State s531 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_537 = input.LA(1);
-                if ( LA16_537=='-' ) {return s542;}
+                int LA16_531 = input.LA(1);
+                if ( LA16_531=='s' ) {return s543;}
                 return s51;
 
             }
         };
-        DFA.State s525 = new DFA.State() {
+        DFA.State s506 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_525 = input.LA(1);
-                if ( LA16_525=='n' ) {return s537;}
+                int LA16_506 = input.LA(1);
+                if ( LA16_506=='e' ) {return s531;}
                 return s51;
 
             }
         };
-        DFA.State s500 = new DFA.State() {
+        DFA.State s474 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_500 = input.LA(1);
-                if ( LA16_500=='o' ) {return s525;}
+                int LA16_474 = input.LA(1);
+                if ( LA16_474=='t' ) {return s506;}
                 return s51;
 
             }
         };
-        DFA.State s465 = new DFA.State() {
+        DFA.State s432 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_465 = input.LA(1);
-                if ( LA16_465=='i' ) {return s500;}
+                int LA16_432 = input.LA(1);
+                if ( LA16_432=='u' ) {return s474;}
                 return s51;
 
             }
         };
-        DFA.State s423 = new DFA.State() {
+        DFA.State s381 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_423 = input.LA(1);
-                if ( LA16_423=='t' ) {return s465;}
+                int LA16_381 = input.LA(1);
+                if ( LA16_381=='b' ) {return s432;}
                 return s51;
 
             }
         };
-        DFA.State s369 = new DFA.State() {
+        DFA.State s308 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_369 = input.LA(1);
-                if ( LA16_369=='a' ) {return s423;}
+                int LA16_308 = input.LA(1);
+                if ( LA16_308=='i' ) {return s381;}
                 return s51;
 
             }
         };
-        DFA.State s298 = new DFA.State() {
+        DFA.State s217 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_298 = input.LA(1);
-                if ( LA16_298=='v' ) {return s369;}
+                int LA16_217 = input.LA(1);
+                if ( LA16_217=='r' ) {return s308;}
                 return s51;
 
             }
         };
-        DFA.State s210 = new DFA.State() {
+        DFA.State s96 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_210 = input.LA(1);
-                if ( LA16_210=='i' ) {return s298;}
+                int LA16_96 = input.LA(1);
+                if ( LA16_96=='t' ) {return s217;}
                 return s51;
 
             }
         };
-        DFA.State s94 = new DFA.State() {
+        DFA.State s551 = new DFA.State() {{alt=25;}};
+        DFA.State s546 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_94 = input.LA(1);
-                if ( LA16_94=='t' ) {return s210;}
+                int LA16_546 = input.LA(1);
+                if ( LA16_546=='-' ) {return s551;}
                 return s51;
 
             }
         };
-        DFA.State s468 = new DFA.State() {{alt=26;}};
-        DFA.State s426 = new DFA.State() {
+        DFA.State s534 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_426 = input.LA(1);
-                if ( LA16_426=='-' ) {return s468;}
+                int LA16_534 = input.LA(1);
+                if ( LA16_534=='n' ) {return s546;}
                 return s51;
 
             }
         };
-        DFA.State s372 = new DFA.State() {
+        DFA.State s509 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_372 = input.LA(1);
-                if ( LA16_372=='a' ) {return s426;}
+                int LA16_509 = input.LA(1);
+                if ( LA16_509=='o' ) {return s534;}
                 return s51;
 
             }
         };
-        DFA.State s301 = new DFA.State() {
+        DFA.State s477 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_301 = input.LA(1);
-                if ( LA16_301=='d' ) {return s372;}
+                int LA16_477 = input.LA(1);
+                if ( LA16_477=='i' ) {return s509;}
                 return s51;
 
             }
         };
-        DFA.State s213 = new DFA.State() {
+        DFA.State s435 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_213 = input.LA(1);
-                if ( LA16_213=='n' ) {return s301;}
+                int LA16_435 = input.LA(1);
+                if ( LA16_435=='t' ) {return s477;}
                 return s51;
 
             }
         };
-        DFA.State s95 = new DFA.State() {
+        DFA.State s384 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_95 = input.LA(1);
-                if ( LA16_95=='e' ) {return s213;}
+                int LA16_384 = input.LA(1);
+                if ( LA16_384=='a' ) {return s435;}
                 return s51;
 
             }
         };
-        DFA.State s375 = new DFA.State() {{alt=24;}};
-        DFA.State s304 = new DFA.State() {
+        DFA.State s311 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_304 = input.LA(1);
-                if ( LA16_304=='-' ) {return s375;}
+                int LA16_311 = input.LA(1);
+                if ( LA16_311=='v' ) {return s384;}
                 return s51;
 
             }
         };
-        DFA.State s216 = new DFA.State() {
+        DFA.State s220 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_216 = input.LA(1);
-                if ( LA16_216=='o' ) {return s304;}
+                int LA16_220 = input.LA(1);
+                if ( LA16_220=='i' ) {return s311;}
                 return s51;
 
             }
         };
-        DFA.State s96 = new DFA.State() {
+        DFA.State s97 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_96 = input.LA(1);
-                if ( LA16_96=='t' ) {return s216;}
+                int LA16_97 = input.LA(1);
+                if ( LA16_97=='t' ) {return s220;}
                 return s51;
 
             }
@@ -4122,79 +4185,79 @@
         DFA.State s18 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'n':
-                    return s92;
-
-                case 't':
+                case 'g':
                     return s93;
 
-                case 'c':
+                case 'n':
                     return s94;
 
-                case 'g':
+                case 'u':
                     return s95;
 
-                case 'u':
+                case 't':
                     return s96;
 
+                case 'c':
+                    return s97;
+
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s528 = new DFA.State() {{alt=22;}};
-        DFA.State s503 = new DFA.State() {
+        DFA.State s537 = new DFA.State() {{alt=22;}};
+        DFA.State s512 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_512 = input.LA(1);
+                if ( (LA16_512>='0' && LA16_512<='9')||(LA16_512>='A' && LA16_512<='Z')||LA16_512=='_'||(LA16_512>='a' && LA16_512<='z')||(LA16_512>='\u00C0' && LA16_512<='\u00FF') ) {return s51;}
+                return s537;
 
             }
         };
-        DFA.State s471 = new DFA.State() {
+        DFA.State s480 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_471 = input.LA(1);
-                if ( LA16_471=='e' ) {return s503;}
+                int LA16_480 = input.LA(1);
+                if ( LA16_480=='e' ) {return s512;}
                 return s51;
 
             }
         };
-        DFA.State s429 = new DFA.State() {
+        DFA.State s438 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_429 = input.LA(1);
-                if ( LA16_429=='c' ) {return s471;}
+                int LA16_438 = input.LA(1);
+                if ( LA16_438=='c' ) {return s480;}
                 return s51;
 
             }
         };
-        DFA.State s378 = new DFA.State() {
+        DFA.State s387 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_378 = input.LA(1);
-                if ( LA16_378=='n' ) {return s429;}
+                int LA16_387 = input.LA(1);
+                if ( LA16_387=='n' ) {return s438;}
                 return s51;
 
             }
         };
-        DFA.State s307 = new DFA.State() {
+        DFA.State s314 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_307 = input.LA(1);
-                if ( LA16_307=='e' ) {return s378;}
+                int LA16_314 = input.LA(1);
+                if ( LA16_314=='e' ) {return s387;}
                 return s51;
 
             }
         };
-        DFA.State s219 = new DFA.State() {
+        DFA.State s223 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_219 = input.LA(1);
-                if ( LA16_219=='i' ) {return s307;}
+                int LA16_223 = input.LA(1);
+                if ( LA16_223=='i' ) {return s314;}
                 return s51;
 
             }
         };
-        DFA.State s99 = new DFA.State() {
+        DFA.State s100 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_99 = input.LA(1);
-                if ( LA16_99=='l' ) {return s219;}
+                int LA16_100 = input.LA(1);
+                if ( LA16_100=='l' ) {return s223;}
                 return s51;
 
             }
@@ -4202,56 +4265,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 s99;}
+                if ( LA16_19=='a' ) {return s100;}
                 return s51;
 
             }
         };
-        DFA.State s222 = new DFA.State() {{alt=23;}};
-        DFA.State s310 = new DFA.State() {{alt=37;}};
-        DFA.State s223 = new DFA.State() {
+        DFA.State s317 = new DFA.State() {{alt=38;}};
+        DFA.State s226 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_226 = input.LA(1);
+                if ( (LA16_226>='0' && LA16_226<='9')||(LA16_226>='A' && LA16_226<='Z')||LA16_226=='_'||(LA16_226>='a' && LA16_226<='z')||(LA16_226>='\u00C0' && LA16_226<='\u00FF') ) {return s51;}
+                return s317;
 
             }
         };
-        DFA.State s102 = new DFA.State() {
+        DFA.State s227 = new DFA.State() {{alt=23;}};
+        DFA.State s103 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 't':
+                    return s226;
+
                 case '-':
-                    return s222;
+                    return s227;
 
-                case 't':
-                    return s223;
-
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s381 = new DFA.State() {{alt=32;}};
-        DFA.State s312 = new DFA.State() {
+        DFA.State s390 = new DFA.State() {{alt=29;}};
+        DFA.State s319 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_319 = input.LA(1);
+                if ( (LA16_319>='0' && LA16_319<='9')||(LA16_319>='A' && LA16_319<='Z')||LA16_319=='_'||(LA16_319>='a' && LA16_319<='z')||(LA16_319>='\u00C0' && LA16_319<='\u00FF') ) {return s51;}
+                return s390;
 
             }
         };
-        DFA.State s226 = new DFA.State() {
+        DFA.State s230 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_226 = input.LA(1);
-                if ( LA16_226=='l' ) {return s312;}
+                int LA16_230 = input.LA(1);
+                if ( LA16_230=='l' ) {return s319;}
                 return s51;
 
             }
         };
-        DFA.State s103 = new DFA.State() {
+        DFA.State s104 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_103 = input.LA(1);
-                if ( LA16_103=='l' ) {return s226;}
+                int LA16_104 = input.LA(1);
+                if ( LA16_104=='l' ) {return s230;}
                 return s51;
 
             }
@@ -4260,69 +4323,69 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 'o':
-                    return s102;
+                    return s103;
 
                 case 'u':
-                    return s103;
+                    return s104;
 
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s530 = new DFA.State() {{alt=27;}};
-        DFA.State s506 = new DFA.State() {
+        DFA.State s539 = new DFA.State() {{alt=27;}};
+        DFA.State s515 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_515 = input.LA(1);
+                if ( (LA16_515>='0' && LA16_515<='9')||(LA16_515>='A' && LA16_515<='Z')||LA16_515=='_'||(LA16_515>='a' && LA16_515<='z')||(LA16_515>='\u00C0' && LA16_515<='\u00FF') ) {return s51;}
+                return s539;
 
             }
         };
-        DFA.State s474 = new DFA.State() {
+        DFA.State s483 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_474 = input.LA(1);
-                if ( LA16_474=='n' ) {return s506;}
+                int LA16_483 = input.LA(1);
+                if ( LA16_483=='n' ) {return s515;}
                 return s51;
 
             }
         };
-        DFA.State s432 = new DFA.State() {
+        DFA.State s441 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_432 = input.LA(1);
-                if ( LA16_432=='o' ) {return s474;}
+                int LA16_441 = input.LA(1);
+                if ( LA16_441=='o' ) {return s483;}
                 return s51;
 
             }
         };
-        DFA.State s383 = new DFA.State() {
+        DFA.State s392 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_383 = input.LA(1);
-                if ( LA16_383=='i' ) {return s432;}
+                int LA16_392 = input.LA(1);
+                if ( LA16_392=='i' ) {return s441;}
                 return s51;
 
             }
         };
-        DFA.State s315 = new DFA.State() {
+        DFA.State s322 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_315 = input.LA(1);
-                if ( LA16_315=='t' ) {return s383;}
+                int LA16_322 = input.LA(1);
+                if ( LA16_322=='t' ) {return s392;}
                 return s51;
 
             }
         };
-        DFA.State s229 = new DFA.State() {
+        DFA.State s233 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_229 = input.LA(1);
-                if ( LA16_229=='a' ) {return s315;}
+                int LA16_233 = input.LA(1);
+                if ( LA16_233=='a' ) {return s322;}
                 return s51;
 
             }
         };
-        DFA.State s106 = new DFA.State() {
+        DFA.State s107 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_106 = input.LA(1);
-                if ( LA16_106=='r' ) {return s229;}
+                int LA16_107 = input.LA(1);
+                if ( LA16_107=='r' ) {return s233;}
                 return s51;
 
             }
@@ -4330,72 +4393,69 @@
         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 s106;}
+                if ( LA16_21=='u' ) {return s107;}
                 return s51;
 
             }
         };
-        DFA.State s232 = new DFA.State() {{alt=28;}};
-        DFA.State s109 = new DFA.State() {
+        DFA.State s236 = new DFA.State() {{alt=30;}};
+        DFA.State s110 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_110 = input.LA(1);
+                if ( (LA16_110>='0' && LA16_110<='9')||(LA16_110>='A' && LA16_110<='Z')||LA16_110=='_'||(LA16_110>='a' && LA16_110<='z')||(LA16_110>='\u00C0' && LA16_110<='\u00FF') ) {return s51;}
+                return s236;
 
             }
         };
         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 s109;}
+                if ( LA16_22=='r' ) {return s110;}
                 return s51;
 
             }
         };
-        DFA.State s234 = new DFA.State() {{alt=29;}};
-        DFA.State s112 = new DFA.State() {
+        DFA.State s238 = new DFA.State() {{alt=31;}};
+        DFA.State s113 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_112 = input.LA(1);
-                return s234;
+                int LA16_113 = input.LA(1);
+                return s238;
 
             }
         };
-        DFA.State s113 = new DFA.State() {{alt=31;}};
+        DFA.State s114 = new DFA.State() {{alt=33;}};
         DFA.State s23 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_23 = input.LA(1);
-                if ( LA16_23=='|' ) {return s112;}
-                return s113;
+                if ( LA16_23=='|' ) {return s113;}
+                return s114;
 
             }
         };
-        DFA.State s235 = new DFA.State() {{alt=35;}};
-        DFA.State s114 = new DFA.State() {
+        DFA.State s239 = new DFA.State() {{alt=36;}};
+        DFA.State s115 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_114 = input.LA(1);
-                return s235;
+                int LA16_115 = input.LA(1);
+                return s239;
 
             }
         };
-        DFA.State s115 = new DFA.State() {{alt=30;}};
+        DFA.State s116 = new DFA.State() {{alt=32;}};
         DFA.State s24 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_24 = input.LA(1);
-                if ( LA16_24=='&' ) {return s114;}
-                return s115;
+                if ( LA16_24=='&' ) {return s115;}
+                return s116;
 
             }
         };
-        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 s117 = new DFA.State() {{alt=34;}};
+        DFA.State s35 = new DFA.State() {{alt=53;}};
+        DFA.State s158 = new DFA.State() {{alt=56;}};
+        DFA.State s160 = new DFA.State() {{alt=57;}};
         DFA.State s49 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case '.':
-                    return s157;
-
                 case '0':
                 case '1':
                 case '2':
@@ -4408,8 +4468,11 @@
                 case '9':
                     return s49;
 
+                case '.':
+                    return s160;
+
                 default:
-                    return s159;
+                    return s158;
         	        }
             }
         };
@@ -4417,7 +4480,7 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case '>':
-                    return s116;
+                    return s117;
 
                 case '0':
                 case '1':
@@ -4436,35 +4499,35 @@
         	        }
             }
         };
-        DFA.State s121 = new DFA.State() {{alt=39;}};
+        DFA.State s122 = new DFA.State() {{alt=40;}};
         DFA.State s26 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_26 = input.LA(1);
-                return s121;
+                return s122;
 
             }
         };
-        DFA.State s122 = new DFA.State() {{alt=40;}};
+        DFA.State s123 = new DFA.State() {{alt=41;}};
         DFA.State s27 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_27 = input.LA(1);
-                return s122;
+                return s123;
 
             }
         };
-        DFA.State s318 = new DFA.State() {{alt=41;}};
-        DFA.State s236 = new DFA.State() {
+        DFA.State s325 = new DFA.State() {{alt=42;}};
+        DFA.State s240 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_240 = input.LA(1);
+                if ( (LA16_240>='0' && LA16_240<='9')||(LA16_240>='A' && LA16_240<='Z')||LA16_240=='_'||(LA16_240>='a' && LA16_240<='z')||(LA16_240>='\u00C0' && LA16_240<='\u00FF') ) {return s51;}
+                return s325;
 
             }
         };
-        DFA.State s123 = new DFA.State() {
+        DFA.State s124 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_123 = input.LA(1);
-                if ( LA16_123=='e' ) {return s236;}
+                int LA16_124 = input.LA(1);
+                if ( LA16_124=='e' ) {return s240;}
                 return s51;
 
             }
@@ -4472,20 +4535,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 s123;}
+                if ( LA16_28=='s' ) {return s124;}
                 return s51;
 
             }
         };
-        DFA.State s239 = new DFA.State() {{alt=42;}};
+        DFA.State s243 = new DFA.State() {{alt=43;}};
         DFA.State s128 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_128 = input.LA(1);
-                return s239;
+                return s243;
 
             }
         };
-        DFA.State s131 = new DFA.State() {{alt=43;}};
+        DFA.State s132 = new DFA.State() {{alt=44;}};
         DFA.State s29 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -4499,12 +4562,12 @@
                     return s128;
 
                 default:
-                    return s131;
+                    return s132;
         	        }
             }
         };
-        DFA.State s133 = new DFA.State() {{alt=45;}};
-        DFA.State s134 = new DFA.State() {{alt=44;}};
+        DFA.State s134 = new DFA.State() {{alt=46;}};
+        DFA.State s135 = new DFA.State() {{alt=45;}};
         DFA.State s30 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -4512,91 +4575,91 @@
                     return s35;
 
                 case '=':
-                    return s133;
+                    return s134;
 
                 default:
-                    return s134;
+                    return s135;
         	        }
             }
         };
-        DFA.State s135 = new DFA.State() {{alt=47;}};
-        DFA.State s137 = new DFA.State() {{alt=46;}};
+        DFA.State s137 = new DFA.State() {{alt=48;}};
+        DFA.State s138 = new DFA.State() {{alt=47;}};
         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 s137;
+
                 default:
-                    return s137;
+                    return s138;
         	        }
             }
         };
-        DFA.State s138 = new DFA.State() {{alt=48;}};
+        DFA.State s139 = new DFA.State() {{alt=49;}};
         DFA.State s32 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_32 = input.LA(1);
-                if ( LA16_32=='=' ) {return s138;}
+                if ( LA16_32=='=' ) {return s139;}
                 return s35;
 
             }
         };
-        DFA.State s532 = new DFA.State() {{alt=49;}};
-        DFA.State s509 = new DFA.State() {
+        DFA.State s541 = new DFA.State() {{alt=50;}};
+        DFA.State s518 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_518 = input.LA(1);
+                if ( (LA16_518>='0' && LA16_518<='9')||(LA16_518>='A' && LA16_518<='Z')||LA16_518=='_'||(LA16_518>='a' && LA16_518<='z')||(LA16_518>='\u00C0' && LA16_518<='\u00FF') ) {return s51;}
+                return s541;
 
             }
         };
-        DFA.State s477 = new DFA.State() {
+        DFA.State s486 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_477 = input.LA(1);
-                if ( LA16_477=='s' ) {return s509;}
+                int LA16_486 = input.LA(1);
+                if ( LA16_486=='s' ) {return s518;}
                 return s51;
 
             }
         };
-        DFA.State s435 = new DFA.State() {
+        DFA.State s444 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_435 = input.LA(1);
-                if ( LA16_435=='n' ) {return s477;}
+                int LA16_444 = input.LA(1);
+                if ( LA16_444=='n' ) {return s486;}
                 return s51;
 
             }
         };
-        DFA.State s386 = new DFA.State() {
+        DFA.State s395 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_386 = input.LA(1);
-                if ( LA16_386=='i' ) {return s435;}
+                int LA16_395 = input.LA(1);
+                if ( LA16_395=='i' ) {return s444;}
                 return s51;
 
             }
         };
-        DFA.State s320 = new DFA.State() {
+        DFA.State s327 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_320 = input.LA(1);
-                if ( LA16_320=='a' ) {return s386;}
+                int LA16_327 = input.LA(1);
+                if ( LA16_327=='a' ) {return s395;}
                 return s51;
 
             }
         };
-        DFA.State s240 = new DFA.State() {
+        DFA.State s244 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_240 = input.LA(1);
-                if ( LA16_240=='t' ) {return s320;}
+                int LA16_244 = input.LA(1);
+                if ( LA16_244=='t' ) {return s327;}
                 return s51;
 
             }
         };
-        DFA.State s140 = new DFA.State() {
+        DFA.State s141 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_140 = input.LA(1);
-                if ( LA16_140=='n' ) {return s240;}
+                int LA16_141 = input.LA(1);
+                if ( LA16_141=='n' ) {return s244;}
                 return s51;
 
             }
@@ -4604,56 +4667,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 s140;}
+                if ( LA16_33=='o' ) {return s141;}
                 return s51;
 
             }
         };
-        DFA.State s512 = new DFA.State() {{alt=50;}};
-        DFA.State s480 = new DFA.State() {
+        DFA.State s521 = new DFA.State() {{alt=51;}};
+        DFA.State s489 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                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;
+                int LA16_489 = input.LA(1);
+                if ( (LA16_489>='0' && LA16_489<='9')||(LA16_489>='A' && LA16_489<='Z')||LA16_489=='_'||(LA16_489>='a' && LA16_489<='z')||(LA16_489>='\u00C0' && LA16_489<='\u00FF') ) {return s51;}
+                return s521;
 
             }
         };
-        DFA.State s438 = new DFA.State() {
+        DFA.State s447 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_438 = input.LA(1);
-                if ( LA16_438=='s' ) {return s480;}
+                int LA16_447 = input.LA(1);
+                if ( LA16_447=='s' ) {return s489;}
                 return s51;
 
             }
         };
-        DFA.State s389 = new DFA.State() {
+        DFA.State s398 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_389 = input.LA(1);
-                if ( LA16_389=='e' ) {return s438;}
+                int LA16_398 = input.LA(1);
+                if ( LA16_398=='e' ) {return s447;}
                 return s51;
 
             }
         };
-        DFA.State s323 = new DFA.State() {
+        DFA.State s330 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_323 = input.LA(1);
-                if ( LA16_323=='h' ) {return s389;}
+                int LA16_330 = input.LA(1);
+                if ( LA16_330=='h' ) {return s398;}
                 return s51;
 
             }
         };
-        DFA.State s243 = new DFA.State() {
+        DFA.State s247 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_243 = input.LA(1);
-                if ( LA16_243=='c' ) {return s323;}
+                int LA16_247 = input.LA(1);
+                if ( LA16_247=='c' ) {return s330;}
                 return s51;
 
             }
         };
-        DFA.State s143 = new DFA.State() {
+        DFA.State s144 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_143 = input.LA(1);
-                if ( LA16_143=='t' ) {return s243;}
+                int LA16_144 = input.LA(1);
+                if ( LA16_144=='t' ) {return s247;}
                 return s51;
 
             }
@@ -4661,12 +4724,12 @@
         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 s143;}
+                if ( LA16_34=='a' ) {return s144;}
                 return s51;
 
             }
         };
-        DFA.State s147 = new DFA.State() {{alt=52;}};
+        DFA.State s147 = new DFA.State() {{alt=53;}};
         DFA.State s36 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_36 = input.LA(1);
@@ -4683,23 +4746,23 @@
 
             }
         };
-        DFA.State s151 = new DFA.State() {{alt=61;}};
-        DFA.State s152 = new DFA.State() {{alt=62;}};
+        DFA.State s151 = new DFA.State() {{alt=63;}};
+        DFA.State s153 = new DFA.State() {{alt=62;}};
         DFA.State s43 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case '/':
+                case '*':
                     return s151;
 
-                case '*':
-                    return s152;
+                case '/':
+                    return s153;
 
                 default:
                     return s147;
         	        }
             }
         };
-        DFA.State s50 = new DFA.State() {{alt=57;}};
+        DFA.State s50 = new DFA.State() {{alt=58;}};
         DFA.State s44 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_44 = input.LA(1);
@@ -4708,9 +4771,9 @@
 
             }
         };
-        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 s46 = new DFA.State() {{alt=54;}};
+        DFA.State s47 = new DFA.State() {{alt=55;}};
+        DFA.State s52 = new DFA.State() {{alt=61;}};
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2006-08-14 09:06:40 UTC (rev 5849)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2006-08-14 09:26:07 UTC (rev 5850)
@@ -18,4 +18,8 @@
 		this.dataSource = dataSource;
 	}
 	
+	public ColumnDescr getReturnedColumn() {
+		return column;
+	}
+	
 }

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-14 09:06:40 UTC (rev 5849)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g	2006-08-14 09:26:07 UTC (rev 5850)
@@ -111,7 +111,7 @@
     	
         	/** Reparse the results of the expansion */
     	private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
-    		CharStream charStream = new ANTLRStringStream( text );
+    		CharStream charStream = new ANTLRStringStream( text  + " \n  then"); //need to then so it knows when to end... werd...
     		RuleParserLexer lexer = new RuleParserLexer( charStream );
     		TokenStream tokenStream = new CommonTokenStream( lexer );
     		RuleParser parser = new RuleParser( tokenStream );
@@ -362,11 +362,11 @@
 			f = new FunctionDescr( name.getText(), retType );
 		} 
 		'(' opt_eol
-			(	(paramType=dotted_name)? opt_eol paramName=argument opt_eol
+			(	(paramType=dotted_name)? opt_eol paramName=argument_name opt_eol
 				{
 					f.addParameter( paramType, paramName );
 				}
-				(	',' opt_eol (paramType=dotted_name)? opt_eol paramName=argument opt_eol 
+				(	',' opt_eol (paramType=dotted_name)? opt_eol paramName=argument_name opt_eol 
 					{
 						f.addParameter( paramType, paramName );
 					}
@@ -692,9 +692,95 @@
 	@init {
 		d=null;
 	}
-	:	f=fact_binding	{ d = f; }
-	|	f=fact		{ d = f; }
+	:	f=fact_binding { d = f; }
+	|	f=fact { d = f; }
 	;
+	
+from_statement returns [FromDescr d]
+	@init {
+		d=new FromDescr();
+	}
+ 	:
+ 		'from' opt_eol ds=from_source
+ 		{
+ 			d.setDataSource(ds);
+ 		
+ 		}
+ 		
+ 		
+ 		
+	;
+	
+from_source returns [DeclarativeInvokerDescr ds]
+	@init {
+		ds = null;
+	}
+	:
+		(var=ID '.' field=ID 
+		
+			{
+			  FieldAccessDescr fa = new FieldAccessDescr(var.getText(), field.getText());	
+			  fa.setLine(var.getLine());
+			  ds = fa;
+			 }
+	
+		) 
+		|
+		(var=ID '.' method=ID opt_eol  '(' opt_eol args=parameter_list opt_eol ')' 
+			{
+			MethodAccessDescr mc = new MethodAccessDescr(var.getText(), method.getText());
+			mc.setArguments(args);
+			mc.setLine(var.getLine());
+			ds = mc;
+			}	
+		)
+		|
+		(functionName=ID opt_eol '(' opt_eol args=parameter_list opt_eol ')'
+			{
+			FunctionCallDescr fc = new FunctionCallDescr(functionName.getText());
+			fc.setLine(functionName.getLine());
+			fc.setArguments(args);
+			ds = fc;
+			}
+
+		
+		)
+	
+	;	
+	
+parameter_list returns [ArrayList args]
+	@init {
+		args = new ArrayList();
+	}
+	:
+		(param=parameter_value  {
+			if (param != null) {
+				args.add(param);
+			}
+		}
+		 
+		(
+			opt_eol ',' opt_eol param=parameter_value {
+				if (param != null) {
+					args.add(param);
+				}
+			}
+		)*
+		)?
+	;
+	
+parameter_value returns [String text]
+	@init {
+		text = null;
+	}
+	:	(	t=STRING { text = getString( t ); } //t.getText(); text=text.substring( 1, text.length() - 1 ); }
+		|	t=INT    { text = t.getText(); }
+		|	t=FLOAT	 { text = t.getText(); }
+		|	t=BOOL 	 { text = t.getText(); }
+		|	t=ID { text = t.getText(); }	
+		|	t='null' { text = "null"; }	
+		)
+	;			
  	
 fact_binding returns [PatternDescr d]
 	@init {
@@ -1052,8 +1138,8 @@
 	}
 	:	(	u=lhs_exist
 		|	u=lhs_not
-		|	u=lhs_eval
-		|	u=lhs_column
+		|	u=lhs_eval				
+		|	u=lhs_column (fm=from_statement {fm.setColumn((ColumnDescr) u); u=fm;})?
 		|	'(' opt_eol u=lhs opt_eol ')'
 		) { d = u; }
 	;
@@ -1102,7 +1188,7 @@
 		id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* ( '[' ']' { name = name + "[]";})*
 	;
 	
-argument returns [String name]
+argument_name returns [String name]
 	@init {
 		name = null;
 	}

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-14 09:06:40 UTC (rev 5849)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2006-08-14 09:26:07 UTC (rev 5850)
@@ -37,14 +37,19 @@
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FactTemplateDescr;
+import org.drools.lang.descr.FieldAccessDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.FieldTemplateDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.FunctionCallDescr;
 import org.drools.lang.descr.FunctionDescr;
 import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.MethodAccessDescr;
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
@@ -313,6 +318,21 @@
 
         assertFalse( this.parser.hasErrors() );
     }
+    
+    
+    public void testRuleParseLhs() throws Exception {
+    	String text = "Person(age < 42, location==\"atlanta\") \nor\nPerson(name==\"bob\") \n then";
+    	AndDescr descrs = new AndDescr();
+		CharStream charStream = new ANTLRStringStream( text );
+		RuleParserLexer lexer = new RuleParserLexer( charStream );
+		TokenStream tokenStream = new CommonTokenStream( lexer );
+		RuleParser parser = new RuleParser( tokenStream );
+		parser.setLineOffset( descrs.getLine() );
+		parser.normal_lhs_block(descrs);
+		System.err.println(parser.getErrorMessages());
+		assertFalse(parser.hasErrors());
+    	
+    }
 
     public void testLiteralBoolAndNegativeNumbersRule() throws Exception {
         final RuleParser parser = parseResource( "literal_bool_and_negative.drl" );
@@ -437,7 +457,64 @@
 
     }
 
-            
+
+    public void testFrom() throws Exception {
+        final RuleDescr rule = parseResource( "from.drl" ).rule();
+
+        System.err.println(parser.getErrorMessages());
+        assertFalse(parser.hasErrors());
+        
+        assertNotNull( rule );
+
+        assertEquals( "using_from",
+                      rule.getName() );
+
+        assertEquals(6, rule.getLhs().getDescrs().size());
+        
+        FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
+        
+        assertEquals(3, from.getLine());
+        
+        assertEquals("Foo", from.getReturnedColumn().getObjectType());
+        assertTrue(from.getDataSource() instanceof FieldAccessDescr);
+        assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());        
+        assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
+        
+        
+        from = (FromDescr) rule.getLhs().getDescrs().get(1);
+        assertEquals("Whee", from.getReturnedColumn().getObjectType());
+        assertEquals(1, from.getReturnedColumn().getDescrs().size());
+        assertTrue(from.getDataSource() instanceof FunctionCallDescr);
+        assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());        
+        assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
+        assertEquals("y", ((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
+
+        assertEquals(4, from.getLine());
+        assertEquals(4, from.getReturnedColumn().getLine());
+        
+        from = (FromDescr) rule.getLhs().getDescrs().get(2);
+        assertEquals("Foo", from.getReturnedColumn().getObjectType());
+        assertEquals(1, from.getReturnedColumn().getDescrs().size());
+        assertEquals("f", from.getReturnedColumn().getIdentifier());
+        assertTrue(from.getDataSource() instanceof MethodAccessDescr);
+        assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());        
+        assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
+        assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
+        assertEquals("x", ((MethodAccessDescr) from.getDataSource()).getArguments().get(0));        
+
+        assertEqualsIgnoreWhitespace("whee();", rule.getConsequence());
+        
+        from = (FromDescr) rule.getLhs().getDescrs().get(3);
+        assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
+
+        from = (FromDescr) rule.getLhs().getDescrs().get(4);
+        assertEquals("wa", ((MethodAccessDescr)from.getDataSource()).getMethodName());
+        assertEquals("la", ((MethodAccessDescr)from.getDataSource()).getVariableName());
+        
+        
+        assertEquals("Bam", ((ColumnDescr)rule.getLhs().getDescrs().get(5)).getObjectType());
+    }
+    
     public void testSimpleRule() throws Exception {
         final RuleDescr rule = parseResource( "simple_rule.drl" ).rule();
 
@@ -981,6 +1058,7 @@
         parser.setExpanderResolver( mockExpanderResolver );
         parser.compilation_unit();
         final PackageDescr pack = parser.getPackageDescr();
+        System.err.println(parser.getErrorMessages());
         assertNotNull( pack );
         assertEquals( 1,
                       pack.getRules().size() );
@@ -1077,12 +1155,19 @@
         parser.setExpanderResolver( res );
         parser.compilation_unit();
         assertTrue( parser.hasErrors() );
-        final RecognitionException err = (RecognitionException) parser.getErrors().get( 0 );
-        assertEquals( 5,
+        
+        RecognitionException err = (RecognitionException) parser.getErrors().get( 0 );
+        //System.err.println(parser.getErrorMessages());
+        assertEquals(2, parser.getErrors().size());
+        
+        assertEquals( 6,
                       err.line );
-
+        err = (RecognitionException) parser.getErrors().get(1);
+        assertEquals( 9,
+                err.line );
+        
     }
-
+    
     public void testExpanderLineSpread() throws Exception {
 
         final RuleParser parser = parseResource( "expander_spread_lines.drl" );
@@ -1090,6 +1175,8 @@
         parser.setExpanderResolver( res );
         parser.setExpanderDebug( true );
         parser.compilation_unit();
+        System.err.println(parser.getErrorMessages());
+        
         //        List errorMessages = parser.getErrorMessages();
         //        for ( Iterator iter = errorMessages.iterator(); iter.hasNext(); ) {
         //            String element = (String) iter.next();
@@ -1120,6 +1207,7 @@
         parser.setExpanderDebug( true );
         parser.compilation_unit();
       
+        System.err.println(parser.getErrorMessages());
 
         assertFalse( parser.hasErrors() );
         

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/expander_post_errors.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/expander_post_errors.drl	2006-08-14 09:06:40 UTC (rev 5849)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/expander_post_errors.drl	2006-08-14 09:26:07 UTC (rev 5850)
@@ -3,7 +3,10 @@
 
 rule simple_rule 
   when
-	Foo() bar
+	Foo().
+	Bar()
+	bax() from wee()
+	k x
   then
   	baz
 end
\ No newline at end of file




More information about the jboss-svn-commits mailing list