[jboss-svn-commits] JBL Code SVN: r5212 - 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
Fri Jul 21 07:42:04 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-07-21 07:41:53 -0400 (Fri, 21 Jul 2006)
New Revision: 5212

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Log:
JBRULES-334 - connective stuff added for parser

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-07-21 10:57:49 UTC (rev 5211)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java	2006-07-21 11:41:53 UTC (rev 5212)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-07-20 16:49:10
+// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-07-21 12:29:35
 
 	package org.drools.lang;
 	import java.util.List;
@@ -15,7 +15,7 @@
 
 public class RuleParser extends Parser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "EOL", "ID", "INT", "BOOL", "STRING", "FLOAT", "MISC", "WS", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "\';\'", "\'package\'", "\'import\'", "\'.\'", "\'.*\'", "\'expander\'", "\'global\'", "\'function\'", "\'(\'", "\',\'", "\')\'", "\'{\'", "\'}\'", "\'query\'", "\'end\'", "\'rule\'", "\'when\'", "\':\'", "\'then\'", "\'attributes\'", "\'salience\'", "\'no-loop\'", "\'auto-focus\'", "\'activation-group\'", "\'agenda-group\'", "\'duration\'", "\'or\'", "\'||\'", "\'==\'", "\'>\'", "\'>=\'", "\'<\'", "\'<=\'", "\'!=\'", "\'contains\'", "\'matches\'", "\'excludes\'", "\'null\'", "\'->\'", "\'and\'", "\'&&\'", "\'exists\'", "\'not\'", "\'eval\'", "\'[\'", "\']\'", "\'use\'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "EOL", "ID", "INT", "BOOL", "STRING", "FLOAT", "MISC", "WS", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "\';\'", "\'package\'", "\'import\'", "\'.\'", "\'.*\'", "\'expander\'", "\'global\'", "\'function\'", "\'(\'", "\',\'", "\')\'", "\'{\'", "\'}\'", "\'query\'", "\'end\'", "\'rule\'", "\'when\'", "\':\'", "\'then\'", "\'attributes\'", "\'salience\'", "\'no-loop\'", "\'auto-focus\'", "\'activation-group\'", "\'agenda-group\'", "\'duration\'", "\'or\'", "\'||\'", "\'&\'", "\'|\'", "\'null\'", "\'->\'", "\'and\'", "\'&&\'", "\'exists\'", "\'not\'", "\'eval\'", "\'[\'", "\']\'", "\'use\'", "\'==\'", "\'>\'", "\'>=\'", "\'<\'", "\'<=\'", "\'!=\'", "\'contains\'", "\'matches\'", "\'excludes\'"
     };
     public static final int BOOL=7;
     public static final int INT=6;
@@ -1197,7 +1197,7 @@
                     throw nvae;
                 }
                 break;
-            case 56:
+            case 49:
                 int LA17_4 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1212,7 +1212,7 @@
                     throw nvae;
                 }
                 break;
-            case 57:
+            case 50:
                 int LA17_5 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1227,7 +1227,7 @@
                     throw nvae;
                 }
                 break;
-            case 58:
+            case 51:
                 int LA17_6 = input.LA(2);
                 if (  expander != null  ) {
                     alt17=1;
@@ -1312,16 +1312,18 @@
             case 46:
             case 47:
             case 48:
-            case 49:
-            case 50:
-            case 51:
             case 52:
             case 53:
             case 54:
             case 55:
+            case 56:
+            case 57:
+            case 58:
             case 59:
             case 60:
             case 61:
+            case 62:
+            case 63:
                 alt17=1;
                 break;
             default:
@@ -1524,7 +1526,7 @@
                                     throw nvae;
                                 }
                             }
-                            else if ( (LA19_0>=EOL && LA19_0<=31)||(LA19_0>=33 && LA19_0<=61) ) {
+                            else if ( (LA19_0>=EOL && LA19_0<=31)||(LA19_0>=33 && LA19_0<=63) ) {
                                 alt19=2;
                             }
                             else {
@@ -1630,7 +1632,7 @@
                                     throw nvae;
                                 }
                                 break;
-                            case 56:
+                            case 49:
                                 int LA20_6 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt20=1;
@@ -1645,7 +1647,7 @@
                                     throw nvae;
                                 }
                                 break;
-                            case 57:
+                            case 50:
                                 int LA20_7 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt20=1;
@@ -1660,7 +1662,7 @@
                                     throw nvae;
                                 }
                                 break;
-                            case 58:
+                            case 51:
                                 int LA20_8 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt20=1;
@@ -1729,16 +1731,18 @@
                             case 46:
                             case 47:
                             case 48:
-                            case 49:
-                            case 50:
-                            case 51:
                             case 52:
                             case 53:
                             case 54:
                             case 55:
+                            case 56:
+                            case 57:
+                            case 58:
                             case 59:
                             case 60:
                             case 61:
+                            case 62:
+                            case 63:
                                 alt20=1;
                                 break;
                             default:
@@ -1812,7 +1816,7 @@
                             if ( LA22_0==32 ) {
                                 alt22=1;
                             }
-                            else if ( (LA22_0>=EOL && LA22_0<=31)||(LA22_0>=33 && LA22_0<=61) ) {
+                            else if ( (LA22_0>=EOL && LA22_0<=31)||(LA22_0>=33 && LA22_0<=63) ) {
                                 alt22=2;
                             }
                             else {
@@ -1844,7 +1848,7 @@
                                 if ( LA23_0==29 ) {
                                     alt23=2;
                                 }
-                                else if ( (LA23_0>=EOL && LA23_0<=28)||(LA23_0>=30 && LA23_0<=61) ) {
+                                else if ( (LA23_0>=EOL && LA23_0<=28)||(LA23_0>=30 && LA23_0<=63) ) {
                                     alt23=1;
                                 }
 
@@ -2858,7 +2862,7 @@
             do {
                 int alt42=2;
                 int LA42_0 = input.LA(1);
-                if ( LA42_0==ID||LA42_0==23||(LA42_0>=56 && LA42_0<=58) ) {
+                if ( LA42_0==ID||LA42_0==23||(LA42_0>=49 && LA42_0<=51) ) {
                     alt42=1;
                 }
 
@@ -2987,6 +2991,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     alt43=1;
                     break;
                 case 15:
@@ -3428,16 +3434,16 @@
                 if ( LA48_2==32 ) {
                     int LA48_3 = input.LA(3);
                     if ( LA48_3==ID ) {
-                        int LA48_8 = input.LA(4);
-                        if ( LA48_8==53 ) {
+                        int LA48_16 = input.LA(4);
+                        if ( LA48_16==46 ) {
                             alt48=2;
                         }
-                        else if ( LA48_8==EOL||LA48_8==15||(LA48_8>=24 && LA48_8<=25)||(LA48_8>=43 && LA48_8<=51) ) {
+                        else if ( LA48_16==EOL||LA48_16==15||(LA48_16>=24 && LA48_16<=25)||(LA48_16>=55 && LA48_16<=63) ) {
                             alt48=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("695:17: ( constraint[constraints] | predicate[constraints] )", 48, 8, input);
+                                new NoViableAltException("695:17: ( constraint[constraints] | predicate[constraints] )", 48, 16, input);
 
                             throw nvae;
                         }
@@ -3452,7 +3458,7 @@
                         throw nvae;
                     }
                 }
-                else if ( LA48_2==EOL||LA48_2==15||(LA48_2>=24 && LA48_2<=25)||(LA48_2>=43 && LA48_2<=51) ) {
+                else if ( LA48_2==EOL||LA48_2==15||(LA48_2>=24 && LA48_2<=25)||(LA48_2>=55 && LA48_2<=63) ) {
                     alt48=1;
                 }
                 else {
@@ -3521,16 +3527,16 @@
             	        if ( LA49_2==32 ) {
             	            int LA49_3 = input.LA(3);
             	            if ( LA49_3==ID ) {
-            	                int LA49_8 = input.LA(4);
-            	                if ( LA49_8==53 ) {
+            	                int LA49_16 = input.LA(4);
+            	                if ( LA49_16==46 ) {
             	                    alt49=2;
             	                }
-            	                else if ( LA49_8==EOL||LA49_8==15||(LA49_8>=24 && LA49_8<=25)||(LA49_8>=43 && LA49_8<=51) ) {
+            	                else if ( LA49_16==EOL||LA49_16==15||(LA49_16>=24 && LA49_16<=25)||(LA49_16>=55 && LA49_16<=63) ) {
             	                    alt49=1;
             	                }
             	                else {
             	                    NoViableAltException nvae =
-            	                        new NoViableAltException("696:39: ( constraint[constraints] | predicate[constraints] )", 49, 8, input);
+            	                        new NoViableAltException("696:39: ( constraint[constraints] | predicate[constraints] )", 49, 16, input);
 
             	                    throw nvae;
             	                }
@@ -3545,7 +3551,7 @@
             	                throw nvae;
             	            }
             	        }
-            	        else if ( LA49_2==EOL||LA49_2==15||(LA49_2>=24 && LA49_2<=25)||(LA49_2>=43 && LA49_2<=51) ) {
+            	        else if ( LA49_2==EOL||LA49_2==15||(LA49_2>=24 && LA49_2<=25)||(LA49_2>=55 && LA49_2<=63) ) {
             	            alt49=1;
             	        }
             	        else {
@@ -3614,12 +3620,14 @@
 
 
     // $ANTLR start constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:700:1: constraint[List constraints] : opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= ('=='|'>'|'>='|'<'|'<='|'!='|'contains'|'matches'|'excludes') opt_eol (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:700:1: constraint[List constraints] : opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol ;
     public void constraint(List constraints) throws RecognitionException {   
         Token fb=null;
         Token f=null;
-        Token op=null;
         Token bvc=null;
+        Token con=null;
+        String op = null;
+
         String lc = null;
 
         String rvc = null;
@@ -3629,8 +3637,8 @@
         		PatternDescr d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: ( opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= ('=='|'>'|'>='|'<'|'<='|'!='|'contains'|'matches'|'excludes') opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= ('=='|'>'|'>='|'<'|'<='|'!='|'contains'|'matches'|'excludes') opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )? opt_eol
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: ( opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: opt_eol (fb= ID opt_eol ':' opt_eol )? f= ID opt_eol (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )? opt_eol
             {
             following.push(FOLLOW_opt_eol_in_constraint1752);
             opt_eol();
@@ -3663,6 +3671,7 @@
             f=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_constraint1776); 
 
+
             			if ( fb != null ) {
             				//System.err.println( "fb: " + fb.getText() );
             				//System.err.println( " f: " + f.getText() );
@@ -3672,46 +3681,43 @@
             				d.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
             				constraints.add( d );
             			} 
+            			FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());
+            			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
+            									
+            			
             		
-            following.push(FOLLOW_opt_eol_in_constraint1786);
+            following.push(FOLLOW_opt_eol_in_constraint1790);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:718:33: (op= ('=='|'>'|'>='|'<'|'<='|'!='|'contains'|'matches'|'excludes') opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )?
-            int alt53=2;
-            int LA53_0 = input.LA(1);
-            if ( (LA53_0>=43 && LA53_0<=51) ) {
-                alt53=1;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:723:33: (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )?
+            int alt55=2;
+            int LA55_0 = input.LA(1);
+            if ( (LA55_0>=55 && LA55_0<=63) ) {
+                alt55=1;
             }
-            else if ( LA53_0==EOL||LA53_0==15||(LA53_0>=24 && LA53_0<=25) ) {
-                alt53=2;
+            else if ( LA55_0==EOL||LA55_0==15||(LA55_0>=24 && LA55_0<=25) ) {
+                alt55=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("718:33: (op= (\'==\'|\'>\'|\'>=\'|\'<\'|\'<=\'|\'!=\'|\'contains\'|\'matches\'|\'excludes\') opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )?", 53, 0, input);
+                    new NoViableAltException("723:33: (op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= (\'&\'|\'|\')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )* )?", 55, 0, input);
 
                 throw nvae;
             }
-            switch (alt53) {
+            switch (alt55) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:718:41: op= ('=='|'>'|'>='|'<'|'<='|'!='|'contains'|'matches'|'excludes') opt_eol (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:723:41: op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
                     {
-                    op=(Token)input.LT(1);
-                    if ( (input.LA(1)>=43 && input.LA(1)<=51) ) {
-                        input.consume();
-                        errorRecovery=false;
-                    }
-                    else {
-                        MismatchedSetException mse =
-                            new MismatchedSetException(null,input);
-                        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint1794);    throw mse;
-                    }
+                    following.push(FOLLOW_operator_in_constraint1796);
+                    op=operator();
+                    following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_constraint1881);
+                    following.push(FOLLOW_opt_eol_in_constraint1798);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:729:41: (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:725:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
                     int alt52=4;
                     switch ( input.LA(1) ) {
                     case ID:
@@ -3719,12 +3725,12 @@
                         if ( LA52_1==18 ) {
                             alt52=2;
                         }
-                        else if ( LA52_1==EOL||LA52_1==15||(LA52_1>=24 && LA52_1<=25) ) {
+                        else if ( LA52_1==EOL||LA52_1==15||(LA52_1>=24 && LA52_1<=25)||(LA52_1>=43 && LA52_1<=44) ) {
                             alt52=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("729:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 52, 1, input);
+                                new NoViableAltException("725:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 52, 1, input);
 
                             throw nvae;
                         }
@@ -3733,7 +3739,7 @@
                     case BOOL:
                     case STRING:
                     case FLOAT:
-                    case 52:
+                    case 45:
                         alt52=3;
                         break;
                     case 23:
@@ -3741,89 +3747,78 @@
                         break;
                     default:
                         NoViableAltException nvae =
-                            new NoViableAltException("729:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 52, 0, input);
+                            new NoViableAltException("725:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 52, 0, input);
 
                         throw nvae;
                     }
 
                     switch (alt52) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:729:49: bvc= ID
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:725:49: bvc= ID
                             {
                             bvc=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_constraint1899); 
+                            match(input,ID,FOLLOW_ID_in_constraint1816); 
 
-
                             							
-                            							//d = new BoundVariableDescr( f.getText(), op.getText(), bvc.getText() );
-                            							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());														
-                            							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-                            							VariableRestrictionDescr vd = new VariableRestrictionDescr(op.getText(), bvc.getText());
+                            														
+                            							
+                            							VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
                             							fc.addRestriction(vd);
+                            							constraints.add(fc);
                             							
-                            							constraints.add( fc );
                             						
 
                             }
                             break;
                         case 2 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:742:49: lc= enum_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:736:49: lc= enum_constraint
                             {
-                            following.push(FOLLOW_enum_constraint_in_constraint1924);
+                            following.push(FOLLOW_enum_constraint_in_constraint1841);
                             lc=enum_constraint();
                             following.pop();
 
                              
-                            							//d = new LiteralDescr( f.getText(), op.getText(), lc, true ); 
-                            							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());																					
-                            							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-                            							
-                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op.getText(), lc, true);
+
+                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
                             							fc.addRestriction(lrd);
+                            							constraints.add(fc);
                             							
-                            							constraints.add( fc );
                             						
 
                             }
                             break;
                         case 3 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:754:49: lc= literal_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:745:49: lc= literal_constraint
                             {
-                            following.push(FOLLOW_literal_constraint_in_constraint1956);
+                            following.push(FOLLOW_literal_constraint_in_constraint1873);
                             lc=literal_constraint();
                             following.pop();
 
                              
-                            							//d = new LiteralDescr( f.getText(), op.getText(), lc ); 
-                            							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());																					
-                            							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
                             							
-                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op.getText(), lc);
+                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
                             							fc.addRestriction(lrd);
+                            							constraints.add(fc);
                             							
-                            							constraints.add( fc );
                             						
 
                             }
                             break;
                         case 4 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:765:49: rvc= retval_constraint
+                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:753:49: rvc= retval_constraint
                             {
-                            following.push(FOLLOW_retval_constraint_in_constraint1976);
+                            following.push(FOLLOW_retval_constraint_in_constraint1893);
                             rvc=retval_constraint();
                             following.pop();
 
                              
                             							
                             							
-                            							//d = new ReturnValueDescr( f.getText(), op.getText(), rvc ); 
-                            							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());																					
-                            							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
 
-                            							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(f.getText(), op.getText(), rvc);							
+                            							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(f.getText(), op, rvc);							
                             							fc.addRestriction(rvd);
+                            							constraints.add(fc);
                             							
-                            							constraints.add( fc );
                             						
 
                             }
@@ -3831,13 +3826,154 @@
 
                     }
 
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:764:41: (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
+                    loop54:
+                    do {
+                        int alt54=2;
+                        int LA54_0 = input.LA(1);
+                        if ( (LA54_0>=43 && LA54_0<=44) ) {
+                            alt54=1;
+                        }
 
+
+                        switch (alt54) {
+                    	case 1 :
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:765:49: con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    	    {
+                    	    con=(Token)input.LT(1);
+                    	    if ( (input.LA(1)>=43 && input.LA(1)<=44) ) {
+                    	        input.consume();
+                    	        errorRecovery=false;
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint1928);    throw mse;
+                    	    }
+
+
+                    	    							if (con.getText().equals("&") ) {								
+                    	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
+                    	    							} else {
+                    	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
+                    	    							}							
+                    	    						
+                    	    following.push(FOLLOW_operator_in_constraint1950);
+                    	    op=operator();
+                    	    following.pop();
+
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:775:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    	    int alt53=4;
+                    	    switch ( input.LA(1) ) {
+                    	    case ID:
+                    	        int LA53_1 = input.LA(2);
+                    	        if ( LA53_1==18 ) {
+                    	            alt53=2;
+                    	        }
+                    	        else if ( LA53_1==EOL||LA53_1==15||(LA53_1>=24 && LA53_1<=25)||(LA53_1>=43 && LA53_1<=44) ) {
+                    	            alt53=1;
+                    	        }
+                    	        else {
+                    	            NoViableAltException nvae =
+                    	                new NoViableAltException("775:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 1, input);
+
+                    	            throw nvae;
+                    	        }
+                    	        break;
+                    	    case INT:
+                    	    case BOOL:
+                    	    case STRING:
+                    	    case FLOAT:
+                    	    case 45:
+                    	        alt53=3;
+                    	        break;
+                    	    case 23:
+                    	        alt53=4;
+                    	        break;
+                    	    default:
+                    	        NoViableAltException nvae =
+                    	            new NoViableAltException("775:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 53, 0, input);
+
+                    	        throw nvae;
+                    	    }
+
+                    	    switch (alt53) {
+                    	        case 1 :
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:775:57: bvc= ID
+                    	            {
+                    	            bvc=(Token)input.LT(1);
+                    	            match(input,ID,FOLLOW_ID_in_constraint1962); 
+
+                    	            								VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
+                    	            								fc.addRestriction(vd);
+                    	            							
+
+                    	            }
+                    	            break;
+                    	        case 2 :
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:781:57: lc= enum_constraint
+                    	            {
+                    	            following.push(FOLLOW_enum_constraint_in_constraint1990);
+                    	            lc=enum_constraint();
+                    	            following.pop();
+
+                    	             
+                    	            								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
+                    	            								fc.addRestriction(lrd);
+                    	            								
+                    	            							
+
+                    	            }
+                    	            break;
+                    	        case 3 :
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:788:57: lc= literal_constraint
+                    	            {
+                    	            following.push(FOLLOW_literal_constraint_in_constraint2025);
+                    	            lc=literal_constraint();
+                    	            following.pop();
+
+                    	             
+                    	            								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
+                    	            								fc.addRestriction(lrd);
+                    	            								
+                    	            							
+
+                    	            }
+                    	            break;
+                    	        case 4 :
+                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:794:57: rvc= retval_constraint
+                    	            {
+                    	            following.push(FOLLOW_retval_constraint_in_constraint2047);
+                    	            rvc=retval_constraint();
+                    	            following.pop();
+
+                    	             
+                    	            								ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(f.getText(), op, rvc);							
+                    	            								fc.addRestriction(rvd);
+                    	            								
+                    	            							
+
+                    	            }
+                    	            break;
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop54;
+                        }
+                    } while (true);
+
+
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_constraint2009);
+            following.push(FOLLOW_opt_eol_in_constraint2103);
             opt_eol();
             following.pop();
 
@@ -3857,7 +3993,7 @@
 
 
     // $ANTLR start literal_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:783: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:807: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;
@@ -3866,76 +4002,76 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:787: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:787:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:17: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:787:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
-            int alt54=5;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
+            int alt56=5;
             switch ( input.LA(1) ) {
             case STRING:
-                alt54=1;
+                alt56=1;
                 break;
             case INT:
-                alt54=2;
+                alt56=2;
                 break;
             case FLOAT:
-                alt54=3;
+                alt56=3;
                 break;
             case BOOL:
-                alt54=4;
+                alt56=4;
                 break;
-            case 52:
-                alt54=5;
+            case 45:
+                alt56=5;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("787:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 54, 0, input);
+                    new NoViableAltException("811:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 56, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt54) {
+            switch (alt56) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:787:25: t= STRING
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:811:25: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2036); 
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2130); 
                      text = getString( t ); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:788:25: t= INT
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:25: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint2047); 
+                    match(input,INT,FOLLOW_INT_in_literal_constraint2141); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:789:25: t= FLOAT
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:813:25: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2060); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2154); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:790:25: t= BOOL
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:814:25: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2071); 
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2165); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:791:25: t= 'null'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:815:25: t= 'null'
                     {
                     t=(Token)input.LT(1);
-                    match(input,52,FOLLOW_52_in_literal_constraint2083); 
+                    match(input,45,FOLLOW_45_in_literal_constraint2177); 
                      text = null; 
 
                     }
@@ -3959,7 +4095,7 @@
 
 
     // $ANTLR start enum_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:795: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:819:1: enum_constraint returns [String text] : (cls= ID '.' en= ID ) ;
     public String enum_constraint() throws RecognitionException {   
         String text;
         Token cls=null;
@@ -3969,17 +4105,17 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:799:17: ( (cls= ID '.' en= ID ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:799:17: (cls= ID '.' en= ID )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:17: ( (cls= ID '.' en= ID ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:17: (cls= ID '.' en= ID )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:799:17: (cls= ID '.' en= ID )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:799:18: cls= ID '.' en= ID
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:17: (cls= ID '.' en= ID )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:823:18: cls= ID '.' en= ID
             {
             cls=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint2114); 
-            match(input,18,FOLLOW_18_in_enum_constraint2116); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint2208); 
+            match(input,18,FOLLOW_18_in_enum_constraint2210); 
             en=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint2120); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint2214); 
 
             }
 
@@ -4000,7 +4136,7 @@
 
 
     // $ANTLR start retval_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:802:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:826:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
     public String retval_constraint() throws RecognitionException {   
         String text;
         String c = null;
@@ -4010,15 +4146,15 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:807:17: ( '(' c= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:807:17: '(' c= paren_chunk ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:831:17: ( '(' c= paren_chunk ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:831:17: '(' c= paren_chunk ')'
             {
-            match(input,23,FOLLOW_23_in_retval_constraint2149); 
-            following.push(FOLLOW_paren_chunk_in_retval_constraint2154);
+            match(input,23,FOLLOW_23_in_retval_constraint2243); 
+            following.push(FOLLOW_paren_chunk_in_retval_constraint2248);
             c=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_retval_constraint2157); 
+            match(input,25,FOLLOW_25_in_retval_constraint2251); 
              text = c; 
 
             }
@@ -4036,7 +4172,7 @@
 
 
     // $ANTLR start predicate
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:810: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:834:1: predicate[List constraints] : decl= ID ':' field= ID '->' '(' text= paren_chunk ')' ;
     public void predicate(List constraints) throws RecognitionException {   
         Token decl=null;
         Token field=null;
@@ -4044,21 +4180,21 @@
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
             {
             decl=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_predicate2175); 
-            match(input,32,FOLLOW_32_in_predicate2177); 
+            match(input,ID,FOLLOW_ID_in_predicate2269); 
+            match(input,32,FOLLOW_32_in_predicate2271); 
             field=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_predicate2181); 
-            match(input,53,FOLLOW_53_in_predicate2183); 
-            match(input,23,FOLLOW_23_in_predicate2185); 
-            following.push(FOLLOW_paren_chunk_in_predicate2189);
+            match(input,ID,FOLLOW_ID_in_predicate2275); 
+            match(input,46,FOLLOW_46_in_predicate2277); 
+            match(input,23,FOLLOW_23_in_predicate2279); 
+            following.push(FOLLOW_paren_chunk_in_predicate2283);
             text=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_predicate2191); 
+            match(input,25,FOLLOW_25_in_predicate2285); 
 
             			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
             			constraints.add( d );
@@ -4079,7 +4215,7 @@
 
 
     // $ANTLR start paren_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:819: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:843:1: paren_chunk returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* ;
     public String paren_chunk() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4090,22 +4226,22 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:825:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:825:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:825:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
-            loop55:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            loop57:
             do {
-                int alt55=3;
+                int alt57=3;
                 switch ( input.LA(1) ) {
                 case EOL:
-                    alt55=3;
+                    alt57=3;
                     break;
                 case 25:
-                    alt55=3;
+                    alt57=3;
                     break;
                 case 23:
-                    alt55=1;
+                    alt57=1;
                     break;
                 case ID:
                 case INT:
@@ -4162,21 +4298,23 @@
                 case 59:
                 case 60:
                 case 61:
-                    alt55=2;
+                case 62:
+                case 63:
+                    alt57=2;
                     break;
 
                 }
 
-                switch (alt55) {
+                switch (alt57) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:826:25: '(' c= paren_chunk ')'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:850:25: '(' c= paren_chunk ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk2237); 
-            	    following.push(FOLLOW_paren_chunk_in_paren_chunk2241);
+            	    match(input,23,FOLLOW_23_in_paren_chunk2331); 
+            	    following.push(FOLLOW_paren_chunk_in_paren_chunk2335);
             	    c=paren_chunk();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk2243); 
+            	    match(input,25,FOLLOW_25_in_paren_chunk2337); 
 
             	    				if ( c == null ) {
             	    					c = "";
@@ -4191,7 +4329,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:837:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:861:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4207,7 +4345,7 @@
             	    break;
 
             	default :
-            	    break loop55;
+            	    break loop57;
                 }
             } while (true);
 
@@ -4227,7 +4365,7 @@
 
 
     // $ANTLR start paren_chunk2
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:849: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:873:1: paren_chunk2 returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* ;
     public String paren_chunk2() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4238,19 +4376,19 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:855:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:855:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:879:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:879:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:855:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
-            loop56:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:879:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            loop58:
             do {
-                int alt56=3;
+                int alt58=3;
                 switch ( input.LA(1) ) {
                 case 25:
-                    alt56=3;
+                    alt58=3;
                     break;
                 case 23:
-                    alt56=1;
+                    alt58=1;
                     break;
                 case EOL:
                 case ID:
@@ -4308,21 +4446,23 @@
                 case 59:
                 case 60:
                 case 61:
-                    alt56=2;
+                case 62:
+                case 63:
+                    alt58=2;
                     break;
 
                 }
 
-                switch (alt56) {
+                switch (alt58) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:856:25: '(' c= paren_chunk2 ')'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:880:25: '(' c= paren_chunk2 ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk22314); 
-            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk22318);
+            	    match(input,23,FOLLOW_23_in_paren_chunk22408); 
+            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk22412);
             	    c=paren_chunk2();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk22320); 
+            	    match(input,25,FOLLOW_25_in_paren_chunk22414); 
 
             	    				if ( c == null ) {
             	    					c = "";
@@ -4337,7 +4477,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:867:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:891:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4353,7 +4493,7 @@
             	    break;
 
             	default :
-            	    break loop56;
+            	    break loop58;
                 }
             } while (true);
 
@@ -4373,7 +4513,7 @@
 
 
     // $ANTLR start curly_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:878: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:902:1: curly_chunk returns [String text] : ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* ;
     public String curly_chunk() throws RecognitionException {   
         String text;
         Token any=null;
@@ -4384,19 +4524,19 @@
         		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:884:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:884:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:884:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
-            loop57:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            loop59:
             do {
-                int alt57=3;
+                int alt59=3;
                 switch ( input.LA(1) ) {
                 case 27:
-                    alt57=3;
+                    alt59=3;
                     break;
                 case 26:
-                    alt57=1;
+                    alt59=1;
                     break;
                 case EOL:
                 case ID:
@@ -4454,21 +4594,23 @@
                 case 59:
                 case 60:
                 case 61:
-                    alt57=2;
+                case 62:
+                case 63:
+                    alt59=2;
                     break;
 
                 }
 
-                switch (alt57) {
+                switch (alt59) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:885:25: '{' c= curly_chunk '}'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:909:25: '{' c= curly_chunk '}'
             	    {
-            	    match(input,26,FOLLOW_26_in_curly_chunk2389); 
-            	    following.push(FOLLOW_curly_chunk_in_curly_chunk2393);
+            	    match(input,26,FOLLOW_26_in_curly_chunk2483); 
+            	    following.push(FOLLOW_curly_chunk_in_curly_chunk2487);
             	    c=curly_chunk();
             	    following.pop();
 
-            	    match(input,27,FOLLOW_27_in_curly_chunk2395); 
+            	    match(input,27,FOLLOW_27_in_curly_chunk2489); 
 
             	    				//System.err.println( "chunk [" + c + "]" );
             	    				if ( c == null ) {
@@ -4484,7 +4626,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:897:19: any= .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:921:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
@@ -4501,7 +4643,7 @@
             	    break;
 
             	default :
-            	    break loop57;
+            	    break loop59;
                 }
             } while (true);
 
@@ -4521,7 +4663,7 @@
 
 
     // $ANTLR start lhs_or
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:909: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:933: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;
@@ -4533,28 +4675,28 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:914: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:914:17: left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:938:17: (left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:938:17: left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )*
             {
              OrDescr or = null; 
-            following.push(FOLLOW_lhs_and_in_lhs_or2453);
+            following.push(FOLLOW_lhs_and_in_lhs_or2547);
             left=lhs_and();
             following.pop();
 
             d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:916:17: ( ('or'|'||') opt_eol right= lhs_and )*
-            loop58:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:940:17: ( ('or'|'||') opt_eol right= lhs_and )*
+            loop60:
             do {
-                int alt58=2;
-                int LA58_0 = input.LA(1);
-                if ( (LA58_0>=41 && LA58_0<=42) ) {
-                    alt58=1;
+                int alt60=2;
+                int LA60_0 = input.LA(1);
+                if ( (LA60_0>=41 && LA60_0<=42) ) {
+                    alt60=1;
                 }
 
 
-                switch (alt58) {
+                switch (alt60) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:916:19: ('or'|'||') opt_eol right= lhs_and
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:940:19: ('or'|'||') opt_eol right= lhs_and
             	    {
             	    if ( (input.LA(1)>=41 && input.LA(1)<=42) ) {
             	        input.consume();
@@ -4563,14 +4705,14 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or2462);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or2556);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_or2467);
+            	    following.push(FOLLOW_opt_eol_in_lhs_or2561);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_and_in_lhs_or2474);
+            	    following.push(FOLLOW_lhs_and_in_lhs_or2568);
             	    right=lhs_and();
             	    following.pop();
 
@@ -4588,7 +4730,7 @@
             	    break;
 
             	default :
-            	    break loop58;
+            	    break loop60;
                 }
             } while (true);
 
@@ -4608,7 +4750,7 @@
 
 
     // $ANTLR start lhs_and
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:930: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:954: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;
@@ -4620,44 +4762,44 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:935: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:935:17: left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:959:17: (left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:959:17: left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )*
             {
              AndDescr and = null; 
-            following.push(FOLLOW_lhs_unary_in_lhs_and2514);
+            following.push(FOLLOW_lhs_unary_in_lhs_and2608);
             left=lhs_unary();
             following.pop();
 
              d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:937:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
-            loop59:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:961:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
+            loop61:
             do {
-                int alt59=2;
-                int LA59_0 = input.LA(1);
-                if ( (LA59_0>=54 && LA59_0<=55) ) {
-                    alt59=1;
+                int alt61=2;
+                int LA61_0 = input.LA(1);
+                if ( (LA61_0>=47 && LA61_0<=48) ) {
+                    alt61=1;
                 }
 
 
-                switch (alt59) {
+                switch (alt61) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:937:19: ('and'|'&&') opt_eol right= lhs_unary
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:961:19: ('and'|'&&') opt_eol right= lhs_unary
             	    {
-            	    if ( (input.LA(1)>=54 && input.LA(1)<=55) ) {
+            	    if ( (input.LA(1)>=47 && input.LA(1)<=48) ) {
             	        input.consume();
             	        errorRecovery=false;
             	    }
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and2523);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and2617);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_and2528);
+            	    following.push(FOLLOW_opt_eol_in_lhs_and2622);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_unary_in_lhs_and2535);
+            	    following.push(FOLLOW_lhs_unary_in_lhs_and2629);
             	    right=lhs_unary();
             	    following.pop();
 
@@ -4675,7 +4817,7 @@
             	    break;
 
             	default :
-            	    break loop59;
+            	    break loop61;
                 }
             } while (true);
 
@@ -4695,7 +4837,7 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:951: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:975:1: lhs_unary returns [PatternDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' ) ;
     public PatternDescr lhs_unary() throws RecognitionException {   
         PatternDescr d;
         PatternDescr u = null;
@@ -4705,39 +4847,39 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:955: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:955:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:17: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:955:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
-            int alt60=5;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | '(' opt_eol u= lhs opt_eol ')' )
+            int alt62=5;
             switch ( input.LA(1) ) {
-            case 56:
-                alt60=1;
+            case 49:
+                alt62=1;
                 break;
-            case 57:
-                alt60=2;
+            case 50:
+                alt62=2;
                 break;
-            case 58:
-                alt60=3;
+            case 51:
+                alt62=3;
                 break;
             case ID:
-                alt60=4;
+                alt62=4;
                 break;
             case 23:
-                alt60=5;
+                alt62=5;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("955:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | \'(\' opt_eol u= lhs opt_eol \')\' )", 60, 0, input);
+                    new NoViableAltException("979:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column | \'(\' opt_eol u= lhs opt_eol \')\' )", 62, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt60) {
+            switch (alt62) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:955:25: u= lhs_exist
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:979:25: u= lhs_exist
                     {
-                    following.push(FOLLOW_lhs_exist_in_lhs_unary2573);
+                    following.push(FOLLOW_lhs_exist_in_lhs_unary2667);
                     u=lhs_exist();
                     following.pop();
 
@@ -4745,9 +4887,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:956:25: u= lhs_not
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:980:25: u= lhs_not
                     {
-                    following.push(FOLLOW_lhs_not_in_lhs_unary2581);
+                    following.push(FOLLOW_lhs_not_in_lhs_unary2675);
                     u=lhs_not();
                     following.pop();
 
@@ -4755,9 +4897,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:957:25: u= lhs_eval
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:981:25: u= lhs_eval
                     {
-                    following.push(FOLLOW_lhs_eval_in_lhs_unary2589);
+                    following.push(FOLLOW_lhs_eval_in_lhs_unary2683);
                     u=lhs_eval();
                     following.pop();
 
@@ -4765,9 +4907,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:958:25: u= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:982:25: u= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_unary2597);
+                    following.push(FOLLOW_lhs_column_in_lhs_unary2691);
                     u=lhs_column();
                     following.pop();
 
@@ -4775,22 +4917,22 @@
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:959:25: '(' opt_eol u= lhs opt_eol ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:983:25: '(' opt_eol u= lhs opt_eol ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_unary2603); 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary2605);
+                    match(input,23,FOLLOW_23_in_lhs_unary2697); 
+                    following.push(FOLLOW_opt_eol_in_lhs_unary2699);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_lhs_in_lhs_unary2609);
+                    following.push(FOLLOW_lhs_in_lhs_unary2703);
                     u=lhs();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary2611);
+                    following.push(FOLLOW_opt_eol_in_lhs_unary2705);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_unary2613); 
+                    match(input,25,FOLLOW_25_in_lhs_unary2707); 
 
                     }
                     break;
@@ -4814,7 +4956,7 @@
 
 
     // $ANTLR start lhs_exist
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:963: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:987: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;
@@ -4825,43 +4967,43 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:967:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:967:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,56,FOLLOW_56_in_lhs_exist2643); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:967:30: ( '(' column= lhs_column ')' | column= lhs_column )
-            int alt61=2;
-            int LA61_0 = input.LA(1);
-            if ( LA61_0==23 ) {
-                alt61=1;
+            match(input,49,FOLLOW_49_in_lhs_exist2737); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:30: ( '(' column= lhs_column ')' | column= lhs_column )
+            int alt63=2;
+            int LA63_0 = input.LA(1);
+            if ( LA63_0==23 ) {
+                alt63=1;
             }
-            else if ( LA61_0==ID ) {
-                alt61=2;
+            else if ( LA63_0==ID ) {
+                alt63=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("967:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 61, 0, input);
+                    new NoViableAltException("991:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 63, 0, input);
 
                 throw nvae;
             }
-            switch (alt61) {
+            switch (alt63) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:967:31: '(' column= lhs_column ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:31: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_exist2646); 
-                    following.push(FOLLOW_lhs_column_in_lhs_exist2650);
+                    match(input,23,FOLLOW_23_in_lhs_exist2740); 
+                    following.push(FOLLOW_lhs_column_in_lhs_exist2744);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_exist2652); 
+                    match(input,25,FOLLOW_25_in_lhs_exist2746); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:967:59: column= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:991:59: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_exist2658);
+                    following.push(FOLLOW_lhs_column_in_lhs_exist2752);
                     column=lhs_column();
                     following.pop();
 
@@ -4891,7 +5033,7 @@
 
 
     // $ANTLR start lhs_not
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:974: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:998: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;
@@ -4902,43 +5044,43 @@
         		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:978:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:978:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,57,FOLLOW_57_in_lhs_not2688); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:978:27: ( '(' column= lhs_column ')' | column= lhs_column )
-            int alt62=2;
-            int LA62_0 = input.LA(1);
-            if ( LA62_0==23 ) {
-                alt62=1;
+            match(input,50,FOLLOW_50_in_lhs_not2782); 
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:27: ( '(' column= lhs_column ')' | column= lhs_column )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
+            if ( LA64_0==23 ) {
+                alt64=1;
             }
-            else if ( LA62_0==ID ) {
-                alt62=2;
+            else if ( LA64_0==ID ) {
+                alt64=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("978:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 62, 0, input);
+                    new NoViableAltException("1002:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 64, 0, input);
 
                 throw nvae;
             }
-            switch (alt62) {
+            switch (alt64) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:978:28: '(' column= lhs_column ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:28: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_not2691); 
-                    following.push(FOLLOW_lhs_column_in_lhs_not2695);
+                    match(input,23,FOLLOW_23_in_lhs_not2785); 
+                    following.push(FOLLOW_lhs_column_in_lhs_not2789);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_not2698); 
+                    match(input,25,FOLLOW_25_in_lhs_not2792); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:978:57: column= lhs_column
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1002:57: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_not2704);
+                    following.push(FOLLOW_lhs_column_in_lhs_not2798);
                     column=lhs_column();
                     following.pop();
 
@@ -4968,7 +5110,7 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:985: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:1009:1: lhs_eval returns [PatternDescr d] : 'eval' loc= '(' c= paren_chunk2 ')' ;
     public PatternDescr lhs_eval() throws RecognitionException {   
         PatternDescr d;
         Token loc=null;
@@ -4980,17 +5122,17 @@
         		String text = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:990:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:990:17: 'eval' loc= '(' c= paren_chunk2 ')'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1014:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1014:17: 'eval' loc= '(' c= paren_chunk2 ')'
             {
-            match(input,58,FOLLOW_58_in_lhs_eval2730); 
+            match(input,51,FOLLOW_51_in_lhs_eval2824); 
             loc=(Token)input.LT(1);
-            match(input,23,FOLLOW_23_in_lhs_eval2734); 
-            following.push(FOLLOW_paren_chunk2_in_lhs_eval2742);
+            match(input,23,FOLLOW_23_in_lhs_eval2828); 
+            following.push(FOLLOW_paren_chunk2_in_lhs_eval2836);
             c=paren_chunk2();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_lhs_eval2746); 
+            match(input,25,FOLLOW_25_in_lhs_eval2840); 
              
             			checkTrailingSemicolon( c, offset(loc.getLine()) );
             			d = new EvalDescr( c ); 
@@ -5011,7 +5153,7 @@
 
 
     // $ANTLR start dotted_name
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:999: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:1023:1: dotted_name returns [String name] : id= ID ( '.' id= ID )* ( '[' ']' )* ;
     public String dotted_name() throws RecognitionException {   
         String name;
         Token id=null;
@@ -5020,62 +5162,62 @@
         		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1004:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1004:17: id= ID ( '.' id= ID )* ( '[' ']' )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:17: id= ID ( '.' id= ID )* ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dotted_name2778); 
+            match(input,ID,FOLLOW_ID_in_dotted_name2872); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1004:46: ( '.' id= ID )*
-            loop63:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:46: ( '.' id= ID )*
+            loop65:
             do {
-                int alt63=2;
-                int LA63_0 = input.LA(1);
-                if ( LA63_0==18 ) {
-                    alt63=1;
+                int alt65=2;
+                int LA65_0 = input.LA(1);
+                if ( LA65_0==18 ) {
+                    alt65=1;
                 }
 
 
-                switch (alt63) {
+                switch (alt65) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1004:48: '.' id= ID
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:48: '.' id= ID
             	    {
-            	    match(input,18,FOLLOW_18_in_dotted_name2784); 
+            	    match(input,18,FOLLOW_18_in_dotted_name2878); 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_dotted_name2788); 
+            	    match(input,ID,FOLLOW_ID_in_dotted_name2882); 
             	     name = name + "." + id.getText(); 
 
             	    }
             	    break;
 
             	default :
-            	    break loop63;
+            	    break loop65;
                 }
             } while (true);
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1004:99: ( '[' ']' )*
-            loop64:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:99: ( '[' ']' )*
+            loop66:
             do {
-                int alt64=2;
-                int LA64_0 = input.LA(1);
-                if ( LA64_0==59 ) {
-                    alt64=1;
+                int alt66=2;
+                int LA66_0 = input.LA(1);
+                if ( LA66_0==52 ) {
+                    alt66=1;
                 }
 
 
-                switch (alt64) {
+                switch (alt66) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1004:101: '[' ']'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:101: '[' ']'
             	    {
-            	    match(input,59,FOLLOW_59_in_dotted_name2797); 
-            	    match(input,60,FOLLOW_60_in_dotted_name2799); 
+            	    match(input,52,FOLLOW_52_in_dotted_name2891); 
+            	    match(input,53,FOLLOW_53_in_dotted_name2893); 
             	     name = name + "[]";
 
             	    }
             	    break;
 
             	default :
-            	    break loop64;
+            	    break loop66;
                 }
             } while (true);
 
@@ -5095,7 +5237,7 @@
 
 
     // $ANTLR start argument
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1007:1: argument returns [String name] : id= ID ( '[' ']' )* ;
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1031:1: argument returns [String name] : id= ID ( '[' ']' )* ;
     public String argument() throws RecognitionException {   
         String name;
         Token id=null;
@@ -5104,35 +5246,35 @@
         		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1012:17: (id= ID ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1012:17: id= ID ( '[' ']' )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:17: (id= ID ( '[' ']' )* )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:17: id= ID ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument2829); 
+            match(input,ID,FOLLOW_ID_in_argument2923); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1012:46: ( '[' ']' )*
-            loop65:
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:46: ( '[' ']' )*
+            loop67:
             do {
-                int alt65=2;
-                int LA65_0 = input.LA(1);
-                if ( LA65_0==59 ) {
-                    alt65=1;
+                int alt67=2;
+                int LA67_0 = input.LA(1);
+                if ( LA67_0==52 ) {
+                    alt67=1;
                 }
 
 
-                switch (alt65) {
+                switch (alt67) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1012:48: '[' ']'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:48: '[' ']'
             	    {
-            	    match(input,59,FOLLOW_59_in_argument2835); 
-            	    match(input,60,FOLLOW_60_in_argument2837); 
+            	    match(input,52,FOLLOW_52_in_argument2929); 
+            	    match(input,53,FOLLOW_53_in_argument2931); 
             	     name = name + "[]";
 
             	    }
             	    break;
 
             	default :
-            	    break loop65;
+            	    break loop67;
                 }
             } while (true);
 
@@ -5152,7 +5294,7 @@
 
 
     // $ANTLR start word
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1016: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:1040: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;
@@ -5162,136 +5304,136 @@
         		word = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1020:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
-            int alt66=11;
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1044:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
+            int alt68=11;
             switch ( input.LA(1) ) {
             case ID:
-                alt66=1;
+                alt68=1;
                 break;
             case 17:
-                alt66=2;
+                alt68=2;
                 break;
-            case 61:
-                alt66=3;
+            case 54:
+                alt68=3;
                 break;
             case 30:
-                alt66=4;
+                alt68=4;
                 break;
             case 28:
-                alt66=5;
+                alt68=5;
                 break;
             case 35:
-                alt66=6;
+                alt68=6;
                 break;
             case 36:
-                alt66=7;
+                alt68=7;
                 break;
             case 31:
-                alt66=8;
+                alt68=8;
                 break;
             case 33:
-                alt66=9;
+                alt68=9;
                 break;
             case 29:
-                alt66=10;
+                alt68=10;
                 break;
             case STRING:
-                alt66=11;
+                alt68=11;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1016:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 66, 0, input);
+                    new NoViableAltException("1040:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 68, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt66) {
+            switch (alt68) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1020:17: id= ID
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1044:17: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_word2865); 
+                    match(input,ID,FOLLOW_ID_in_word2959); 
                      word=id.getText(); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1021:17: 'import'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1045:17: 'import'
                     {
-                    match(input,17,FOLLOW_17_in_word2877); 
+                    match(input,17,FOLLOW_17_in_word2971); 
                      word="import"; 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1022:17: 'use'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1046:17: 'use'
                     {
-                    match(input,61,FOLLOW_61_in_word2886); 
+                    match(input,54,FOLLOW_54_in_word2980); 
                      word="use"; 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1023:17: 'rule'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1047:17: 'rule'
                     {
-                    match(input,30,FOLLOW_30_in_word2898); 
+                    match(input,30,FOLLOW_30_in_word2992); 
                      word="rule"; 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1024:17: 'query'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1048:17: 'query'
                     {
-                    match(input,28,FOLLOW_28_in_word2909); 
+                    match(input,28,FOLLOW_28_in_word3003); 
                      word="query"; 
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1025:17: 'salience'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1049:17: 'salience'
                     {
-                    match(input,35,FOLLOW_35_in_word2919); 
+                    match(input,35,FOLLOW_35_in_word3013); 
                      word="salience"; 
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1026:17: 'no-loop'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:17: 'no-loop'
                     {
-                    match(input,36,FOLLOW_36_in_word2927); 
+                    match(input,36,FOLLOW_36_in_word3021); 
                      word="no-loop"; 
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1027:17: 'when'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1051:17: 'when'
                     {
-                    match(input,31,FOLLOW_31_in_word2935); 
+                    match(input,31,FOLLOW_31_in_word3029); 
                      word="when"; 
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1028:17: 'then'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1052:17: 'then'
                     {
-                    match(input,33,FOLLOW_33_in_word2946); 
+                    match(input,33,FOLLOW_33_in_word3040); 
                      word="then"; 
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1029:17: 'end'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1053:17: 'end'
                     {
-                    match(input,29,FOLLOW_29_in_word2957); 
+                    match(input,29,FOLLOW_29_in_word3051); 
                      word="end"; 
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1030:17: str= STRING
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1054:17: str= STRING
                     {
                     str=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_word2971); 
+                    match(input,STRING,FOLLOW_STRING_in_word3065); 
                      word=getString(str);
 
                     }
@@ -5310,6 +5452,138 @@
     // $ANTLR end word
 
 
+    // $ANTLR start operator
+    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:1: operator returns [String str] : ( '==' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' );
+    public String operator() throws RecognitionException {   
+        String str;
+
+        		str = null;
+        	
+        try {
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1063:17: ( '==' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' )
+            int alt69=9;
+            switch ( input.LA(1) ) {
+            case 55:
+                alt69=1;
+                break;
+            case 56:
+                alt69=2;
+                break;
+            case 57:
+                alt69=3;
+                break;
+            case 58:
+                alt69=4;
+                break;
+            case 59:
+                alt69=5;
+                break;
+            case 60:
+                alt69=6;
+                break;
+            case 61:
+                alt69=7;
+                break;
+            case 62:
+                alt69=8;
+                break;
+            case 63:
+                alt69=9;
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("1057:1: operator returns [String str] : ( \'==\' | \'>\' | \'>=\' | \'<\' | \'<=\' | \'!=\' | \'contains\' | \'matches\' | \'excludes\' );", 69, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt69) {
+                case 1 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1063:17: '=='
+                    {
+                    match(input,55,FOLLOW_55_in_operator3094); 
+                    str= "==";
+
+                    }
+                    break;
+                case 2 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1064:18: '>'
+                    {
+                    match(input,56,FOLLOW_56_in_operator3101); 
+                    str=">";
+
+                    }
+                    break;
+                case 3 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:18: '>='
+                    {
+                    match(input,57,FOLLOW_57_in_operator3108); 
+                    str=">=";
+
+                    }
+                    break;
+                case 4 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1066:18: '<'
+                    {
+                    match(input,58,FOLLOW_58_in_operator3117); 
+                    str="<";
+
+                    }
+                    break;
+                case 5 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1067:18: '<='
+                    {
+                    match(input,59,FOLLOW_59_in_operator3124); 
+                    str="<=";
+
+                    }
+                    break;
+                case 6 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1068:18: '!='
+                    {
+                    match(input,60,FOLLOW_60_in_operator3131); 
+                    str="!=";
+
+                    }
+                    break;
+                case 7 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1069:18: 'contains'
+                    {
+                    match(input,61,FOLLOW_61_in_operator3138); 
+                    str="contains";
+
+                    }
+                    break;
+                case 8 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1070:18: 'matches'
+                    {
+                    match(input,62,FOLLOW_62_in_operator3145); 
+                    str="matches";
+
+                    }
+                    break;
+                case 9 :
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1071:18: 'excludes'
+                    {
+                    match(input,63,FOLLOW_63_in_operator3152); 
+                    str="excludes";
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return str;
+    }
+    // $ANTLR end operator
+
+
     protected DFA2 dfa2 = new DFA2();protected DFA4 dfa4 = new DFA4();protected DFA12 dfa12 = new DFA12();protected DFA13 dfa13 = new DFA13();protected DFA14 dfa14 = new DFA14();protected DFA44 dfa44 = new DFA44();protected DFA47 dfa47 = new DFA47();protected DFA50 dfa50 = new DFA50();protected DFA51 dfa51 = new DFA51();
     class DFA2 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
@@ -5403,7 +5677,7 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA4_27 = input.LA(1);
                 if ( LA4_27==ID ) {return s18;}
-                if ( LA4_27==59 ) {return s17;}
+                if ( LA4_27==52 ) {return s17;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 4, 27, input);
@@ -5414,7 +5688,7 @@
         DFA.State s17 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA4_17 = input.LA(1);
-                if ( LA4_17==60 ) {return s27;}
+                if ( LA4_17==53 ) {return s27;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 4, 17, input);
@@ -5425,7 +5699,7 @@
         DFA.State s26 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 59:
+                case 52:
                     return s17;
 
                 case ID:
@@ -5458,7 +5732,7 @@
                 case 18:
                     return s16;
 
-                case 59:
+                case 52:
                     return s17;
 
                 case ID:
@@ -5548,6 +5822,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s122;
 
                 default:
@@ -5622,6 +5898,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s122;
 
                 default:
@@ -5696,6 +5974,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s122;
 
                 default:
@@ -5771,6 +6051,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s116;
 
                 default:
@@ -5845,6 +6127,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s116;
 
                 default:
@@ -5920,6 +6204,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s107;
 
                 default:
@@ -5994,6 +6280,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s107;
 
                 default:
@@ -6069,6 +6357,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s89;
 
                 default:
@@ -6143,6 +6433,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s89;
 
                 default:
@@ -6218,6 +6510,8 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s69;
 
                 default:
@@ -6227,7 +6521,7 @@
                     throw nvae;        }
             }
         };
-        DFA.State s53 = new DFA.State() {
+        DFA.State s51 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
@@ -6292,35 +6586,37 @@
                 case 59:
                 case 60:
                 case 61:
+                case 62:
+                case 63:
                     return s69;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 53, input);
+                        new NoViableAltException("", 4, 51, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s52 = new DFA.State() {
+        DFA.State s50 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_52 = input.LA(1);
-                if ( LA4_52==26 ) {return s53;}
-                if ( LA4_52==EOL||LA4_52==15 ) {return s52;}
+                int LA4_50 = input.LA(1);
+                if ( LA4_50==26 ) {return s51;}
+                if ( LA4_50==EOL||LA4_50==15 ) {return s50;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 52, input);
+        	    new NoViableAltException("", 4, 50, input);
 
                 throw nvae;
             }
         };
-        DFA.State s35 = new DFA.State() {
+        DFA.State s33 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_35 = input.LA(1);
-                if ( LA4_35==EOL||LA4_35==15 ) {return s52;}
-                if ( LA4_35==26 ) {return s53;}
+                int LA4_33 = input.LA(1);
+                if ( LA4_33==EOL||LA4_33==15 ) {return s50;}
+                if ( LA4_33==26 ) {return s51;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 35, input);
+        	    new NoViableAltException("", 4, 33, input);
 
                 throw nvae;
             }
@@ -6329,10 +6625,10 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 24:
-                    return s50;
+                    return s48;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 case EOL:
                 case 15:
@@ -6353,12 +6649,12 @@
                     return s60;
 
                 case 24:
-                    return s50;
+                    return s48;
 
                 case 25:
-                    return s35;
+                    return s33;
 
-                case 59:
+                case 52:
                     return s59;
 
                 default:
@@ -6371,7 +6667,7 @@
         DFA.State s59 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA4_59 = input.LA(1);
-                if ( LA4_59==60 ) {return s75;}
+                if ( LA4_59==53 ) {return s75;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 4, 59, input);
@@ -6383,10 +6679,10 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 25:
-                    return s35;
+                    return s33;
 
                 case 24:
-                    return s50;
+                    return s48;
 
                 case EOL:
                 case 15:
@@ -6399,10 +6695,10 @@
                     throw nvae;        }
             }
         };
-        DFA.State s84 = new DFA.State() {
+        DFA.State s86 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 59:
+                case 52:
                     return s59;
 
                 case EOL:
@@ -6410,37 +6706,37 @@
                     return s102;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 case 24:
-                    return s50;
+                    return s48;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 84, input);
+                        new NoViableAltException("", 4, 86, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s83 = new DFA.State() {
+        DFA.State s82 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 25:
-                    return s35;
+                    return s33;
 
                 case 24:
-                    return s50;
+                    return s48;
 
                 case EOL:
                 case 15:
-                    return s83;
+                    return s82;
 
                 case ID:
-                    return s84;
+                    return s86;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 83, input);
+                        new NoViableAltException("", 4, 82, input);
 
                     throw nvae;        }
             }
@@ -6448,25 +6744,25 @@
         DFA.State s64 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 18:
-                    return s16;
+                case 52:
+                    return s45;
 
-                case 59:
-                    return s47;
-
                 case EOL:
                 case 15:
-                    return s83;
+                    return s82;
 
-                case ID:
-                    return s84;
-
                 case 25:
-                    return s35;
+                    return s33;
 
                 case 24:
-                    return s50;
+                    return s48;
 
+                case 18:
+                    return s16;
+
+                case ID:
+                    return s86;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 4, 64, input);
@@ -6486,22 +6782,22 @@
                 throw nvae;
             }
         };
-        DFA.State s50 = new DFA.State() {
+        DFA.State s48 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_50 = input.LA(1);
-                if ( LA4_50==EOL||LA4_50==15 ) {return s63;}
-                if ( LA4_50==ID ) {return s64;}
+                int LA4_48 = input.LA(1);
+                if ( LA4_48==EOL||LA4_48==15 ) {return s63;}
+                if ( LA4_48==ID ) {return s64;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 50, input);
+        	    new NoViableAltException("", 4, 48, input);
 
                 throw nvae;
             }
         };
-        DFA.State s49 = new DFA.State() {
+        DFA.State s47 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 59:
+                case 52:
                     return s59;
 
                 case EOL:
@@ -6509,37 +6805,37 @@
                     return s60;
 
                 case 24:
-                    return s50;
+                    return s48;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 49, input);
+                        new NoViableAltException("", 4, 47, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s48 = new DFA.State() {
+        DFA.State s46 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 24:
-                    return s50;
+                    return s48;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 case EOL:
                 case 15:
-                    return s48;
+                    return s46;
 
                 case ID:
-                    return s49;
+                    return s47;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 48, input);
+                        new NoViableAltException("", 4, 46, input);
 
                     throw nvae;        }
             }
@@ -6549,19 +6845,19 @@
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s48;
+                    return s46;
 
                 case ID:
-                    return s49;
-
-                case 59:
                     return s47;
 
+                case 52:
+                    return s45;
+
                 case 24:
-                    return s50;
+                    return s48;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 default:
                     NoViableAltException nvae =
@@ -6570,126 +6866,126 @@
                     throw nvae;        }
             }
         };
-        DFA.State s47 = new DFA.State() {
+        DFA.State s45 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_47 = input.LA(1);
-                if ( LA4_47==60 ) {return s54;}
+                int LA4_45 = input.LA(1);
+                if ( LA4_45==53 ) {return s54;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 47, input);
+        	    new NoViableAltException("", 4, 45, input);
 
                 throw nvae;
             }
         };
-        DFA.State s34 = new DFA.State() {
+        DFA.State s32 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 18:
                     return s16;
 
-                case 59:
-                    return s47;
+                case 52:
+                    return s45;
 
                 case EOL:
                 case 15:
-                    return s48;
+                    return s46;
 
                 case ID:
-                    return s49;
+                    return s47;
 
                 case 24:
-                    return s50;
+                    return s48;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 34, input);
+                        new NoViableAltException("", 4, 32, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s33 = new DFA.State() {
+        DFA.State s31 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case ID:
-                    return s34;
+                    return s32;
 
                 case EOL:
                 case 15:
-                    return s33;
+                    return s31;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 33, input);
+                        new NoViableAltException("", 4, 31, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s25 = new DFA.State() {
+        DFA.State s22 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s33;
+                    return s31;
 
                 case ID:
-                    return s34;
+                    return s32;
 
                 case 25:
-                    return s35;
+                    return s33;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 25, input);
+                        new NoViableAltException("", 4, 22, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s31 = new DFA.State() {
+        DFA.State s34 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_31 = input.LA(1);
-                if ( LA4_31==23 ) {return s25;}
-                if ( LA4_31==EOL||LA4_31==15 ) {return s31;}
+                int LA4_34 = input.LA(1);
+                if ( LA4_34==23 ) {return s22;}
+                if ( LA4_34==EOL||LA4_34==15 ) {return s34;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 31, input);
+        	    new NoViableAltException("", 4, 34, input);
 
                 throw nvae;
             }
         };
-        DFA.State s24 = new DFA.State() {
+        DFA.State s25 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_24 = input.LA(1);
-                if ( LA4_24==EOL||LA4_24==15 ) {return s31;}
-                if ( LA4_24==23 ) {return s25;}
+                int LA4_25 = input.LA(1);
+                if ( LA4_25==EOL||LA4_25==15 ) {return s34;}
+                if ( LA4_25==23 ) {return s22;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 24, input);
+        	    new NoViableAltException("", 4, 25, input);
 
                 throw nvae;
             }
         };
-        DFA.State s23 = new DFA.State() {
+        DFA.State s21 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 23:
-                    return s25;
+                    return s22;
 
                 case EOL:
                 case 15:
-                    return s23;
+                    return s21;
 
                 case ID:
-                    return s24;
+                    return s25;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 23, input);
+                        new NoViableAltException("", 4, 21, input);
 
                     throw nvae;        }
             }
@@ -6697,20 +6993,20 @@
         DFA.State s13 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case EOL:
+                case 15:
+                    return s21;
+
+                case 23:
+                    return s22;
+
                 case 18:
                     return s16;
 
-                case 59:
+                case 52:
                     return s17;
 
-                case EOL:
-                case 15:
-                    return s23;
-
                 case ID:
-                    return s24;
-
-                case 23:
                     return s25;
 
                 default:
@@ -6779,20 +7075,20 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
+        DFA.State s2 = new DFA.State() {{alt=2;}};
         DFA.State s5 = new DFA.State() {{alt=1;}};
-        DFA.State s2 = new DFA.State() {{alt=2;}};
         DFA.State s3 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                    return s5;
+                case 23:
+                    return s2;
 
                 case EOL:
                 case 15:
                     return s3;
 
-                case 23:
-                    return s2;
+                case ID:
+                    return s5;
 
                 default:
                     NoViableAltException nvae =
@@ -6813,7 +7109,7 @@
 
                 case ID:
                 case 18:
-                case 59:
+                case 52:
                     return s5;
 
                 default:
@@ -6845,16 +7141,16 @@
         DFA.State s5 = 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;
 
-                case 24:
-                case 25:
-                    return s2;
+                case ID:
+                    return s3;
 
                 default:
                     NoViableAltException nvae =
@@ -6873,7 +7169,7 @@
                 case ID:
                     return s3;
 
-                case 59:
+                case 52:
                     return s4;
 
                 case 24:
@@ -6890,7 +7186,7 @@
         DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA13_4 = input.LA(1);
-                if ( LA13_4==60 ) {return s9;}
+                if ( LA13_4==53 ) {return s9;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 13, 4, input);
@@ -6905,7 +7201,7 @@
                 case 18:
                     return s3;
 
-                case 59:
+                case 52:
                     return s4;
 
                 case EOL:
@@ -6940,21 +7236,21 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
+        DFA.State s7 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {{alt=2;}};
-        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 24:
-                case 25:
-                    return s2;
+                case ID:
+                    return s7;
 
                 case EOL:
                 case 15:
                     return s4;
 
-                case ID:
-                    return s7;
+                case 24:
+                case 25:
+                    return s2;
 
                 default:
                     NoViableAltException nvae =
@@ -6974,7 +7270,7 @@
                 case 25:
                     return s2;
 
-                case 59:
+                case 52:
                     return s3;
 
                 case ID:
@@ -6990,7 +7286,7 @@
         DFA.State s3 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA14_3 = input.LA(1);
-                if ( LA14_3==60 ) {return s9;}
+                if ( LA14_3==53 ) {return s9;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 14, 3, input);
@@ -7001,7 +7297,7 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 59:
+                case 52:
                     return s3;
 
                 case EOL:
@@ -7045,15 +7341,15 @@
         DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 32:
-                    return s6;
+                case 23:
+                    return s2;
 
                 case EOL:
                 case 15:
                     return s4;
 
-                case 23:
-                    return s2;
+                case 32:
+                    return s6;
 
                 default:
                     NoViableAltException nvae =
@@ -7067,7 +7363,7 @@
                 switch ( input.LA(1) ) {
                 case 18:
                 case 23:
-                case 59:
+                case 52:
                     return s2;
 
                 case EOL:
@@ -7147,11 +7443,14 @@
         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 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 24:
+                    return s3;
+
                 case EOL:
                 case 15:
                     return s1;
@@ -7159,9 +7458,6 @@
                 case 25:
                     return s2;
 
-                case 24:
-                    return s3;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 50, 1, input);
@@ -7194,30 +7490,30 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
+        DFA.State s3 = new DFA.State() {{alt=1;}};
         DFA.State s4 = new DFA.State() {{alt=2;}};
-        DFA.State s3 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                case 25:
-                case 43:
-                case 44:
-                case 45:
-                case 46:
-                case 47:
-                case 48:
-                case 49:
-                case 50:
-                case 51:
-                    return s4;
+                case 32:
+                    return s3;
 
                 case EOL:
                 case 15:
                     return s2;
 
-                case 32:
-                    return s3;
+                case 24:
+                case 25:
+                case 55:
+                case 56:
+                case 57:
+                case 58:
+                case 59:
+                case 60:
+                case 61:
+                case 62:
+                case 63:
+                    return s4;
 
                 default:
                     NoViableAltException nvae =
@@ -7238,15 +7534,15 @@
 
                 case 24:
                 case 25:
-                case 43:
-                case 44:
-                case 45:
-                case 46:
-                case 47:
-                case 48:
-                case 49:
-                case 50:
-                case 51:
+                case 55:
+                case 56:
+                case 57:
+                case 58:
+                case 59:
+                case 60:
+                case 61:
+                case 62:
+                case 63:
                     return s4;
 
                 default:
@@ -7325,33 +7621,33 @@
     public static final BitSet FOLLOW_opt_eol_in_function441 = new BitSet(new long[]{0x0000000003000000L});
     public static final BitSet FOLLOW_25_in_function466 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_function470 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_function474 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_26_in_function474 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
     public static final BitSet FOLLOW_curly_chunk_in_function481 = new BitSet(new long[]{0x0000000008000000L});
     public static final BitSet FOLLOW_27_in_function490 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_function498 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_opt_eol_in_query522 = new BitSet(new long[]{0x0000000010000000L});
-    public static final BitSet FOLLOW_28_in_query528 = new BitSet(new long[]{0x2000001AF0020120L});
+    public static final BitSet FOLLOW_28_in_query528 = new BitSet(new long[]{0x0040001AF0020120L});
     public static final BitSet FOLLOW_word_in_query532 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_query534 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_opt_eol_in_query534 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
     public static final BitSet FOLLOW_expander_lhs_block_in_query550 = new BitSet(new long[]{0x0000000020000000L});
     public static final BitSet FOLLOW_normal_lhs_block_in_query558 = new BitSet(new long[]{0x0000000020000000L});
     public static final BitSet FOLLOW_29_in_query573 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_query575 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_opt_eol_in_rule598 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_rule604 = new BitSet(new long[]{0x2000001AF0020120L});
+    public static final BitSet FOLLOW_30_in_rule604 = new BitSet(new long[]{0x0040001AF0020120L});
     public static final BitSet FOLLOW_word_in_rule608 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_rule610 = new BitSet(new long[]{0x0000000500008012L});
     public static final BitSet FOLLOW_rule_attributes_in_rule621 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_rule631 = new BitSet(new long[]{0x00000000A0008012L});
     public static final BitSet FOLLOW_31_in_rule640 = new BitSet(new long[]{0x0000000100008012L});
     public static final BitSet FOLLOW_32_in_rule642 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule645 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_opt_eol_in_rule645 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
     public static final BitSet FOLLOW_expander_lhs_block_in_rule663 = new BitSet(new long[]{0x0000000020008012L});
     public static final BitSet FOLLOW_normal_lhs_block_in_rule672 = new BitSet(new long[]{0x0000000020008012L});
     public static final BitSet FOLLOW_opt_eol_in_rule695 = new BitSet(new long[]{0x0000000200000000L});
     public static final BitSet FOLLOW_33_in_rule699 = new BitSet(new long[]{0x0000000100008012L});
     public static final BitSet FOLLOW_32_in_rule701 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule705 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF0L});
+    public static final BitSet FOLLOW_opt_eol_in_rule705 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L});
     public static final BitSet FOLLOW_29_in_rule751 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_rule753 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_import_statement_in_extra_statement773 = new BitSet(new long[]{0x0000000000000002L});
@@ -7408,10 +7704,10 @@
     public static final BitSet FOLLOW_15_in_duration1264 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_duration1267 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_lhs_in_normal_lhs_block1293 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1295 = new BitSet(new long[]{0x0700000000808032L});
+    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1295 = new BitSet(new long[]{0x000E000000808032L});
     public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1307 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_paren_chunk_in_expander_lhs_block1348 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1352 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1352 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
     public static final BitSet FOLLOW_lhs_or_in_lhs1404 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_fact_binding_in_lhs_column1432 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_fact_in_lhs_column1441 = new BitSet(new long[]{0x0000000000000002L});
@@ -7453,90 +7749,105 @@
     public static final BitSet FOLLOW_32_in_constraint1764 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_constraint1766 = new BitSet(new long[]{0x0000000000000020L});
     public static final BitSet FOLLOW_ID_in_constraint1776 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint1786 = new BitSet(new long[]{0x000FF80000008012L});
-    public static final BitSet FOLLOW_set_in_constraint1794 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint1881 = new BitSet(new long[]{0x00100000008003E0L});
-    public static final BitSet FOLLOW_ID_in_constraint1899 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_enum_constraint_in_constraint1924 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_literal_constraint_in_constraint1956 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_retval_constraint_in_constraint1976 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2009 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint2036 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint2047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint2060 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint2071 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_52_in_literal_constraint2083 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint2114 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_18_in_enum_constraint2116 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint2120 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_retval_constraint2149 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint2154 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_retval_constraint2157 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_predicate2175 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_32_in_predicate2177 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_predicate2181 = new BitSet(new long[]{0x0020000000000000L});
-    public static final BitSet FOLLOW_53_in_predicate2183 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_predicate2185 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate2189 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_predicate2191 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_paren_chunk2237 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk2241 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_paren_chunk2243 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_23_in_paren_chunk22314 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_paren_chunk2_in_paren_chunk22318 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_paren_chunk22320 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_26_in_curly_chunk2389 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk2393 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_curly_chunk2395 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2453 = new BitSet(new long[]{0x0000060000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_or2462 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_or2467 = new BitSet(new long[]{0x0700000000800020L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or2474 = new BitSet(new long[]{0x0000060000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2514 = new BitSet(new long[]{0x00C0000000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_and2523 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_and2528 = new BitSet(new long[]{0x0700000000800020L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2535 = new BitSet(new long[]{0x00C0000000000002L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2573 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2581 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2589 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_unary2597 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_lhs_unary2603 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2605 = new BitSet(new long[]{0x0700000000800020L});
-    public static final BitSet FOLLOW_lhs_in_lhs_unary2609 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2611 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_unary2613 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_56_in_lhs_exist2643 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_23_in_lhs_exist2646 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2650 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_exist2652 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2658 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_57_in_lhs_not2688 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_23_in_lhs_not2691 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_not2695 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_not2698 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_not2704 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_58_in_lhs_eval2730 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_lhs_eval2734 = new BitSet(new long[]{0x3FFFFFFFFFFFFFF2L});
-    public static final BitSet FOLLOW_paren_chunk2_in_lhs_eval2742 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_eval2746 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dotted_name2778 = new BitSet(new long[]{0x0800000000040002L});
-    public static final BitSet FOLLOW_18_in_dotted_name2784 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_dotted_name2788 = new BitSet(new long[]{0x0800000000040002L});
-    public static final BitSet FOLLOW_59_in_dotted_name2797 = new BitSet(new long[]{0x1000000000000000L});
-    public static final BitSet FOLLOW_60_in_dotted_name2799 = new BitSet(new long[]{0x0800000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument2829 = new BitSet(new long[]{0x0800000000000002L});
-    public static final BitSet FOLLOW_59_in_argument2835 = new BitSet(new long[]{0x1000000000000000L});
-    public static final BitSet FOLLOW_60_in_argument2837 = new BitSet(new long[]{0x0800000000000002L});
-    public static final BitSet FOLLOW_ID_in_word2865 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_word2877 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_61_in_word2886 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_30_in_word2898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_word2909 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_word2919 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_word2927 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_word2935 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_word2946 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_29_in_word2957 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_word2971 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint1790 = new BitSet(new long[]{0xFF80000000008012L});
+    public static final BitSet FOLLOW_operator_in_constraint1796 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint1798 = new BitSet(new long[]{0x00002000008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint1816 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint1841 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint1873 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint1893 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_set_in_constraint1928 = new BitSet(new long[]{0xFF80000000000000L});
+    public static final BitSet FOLLOW_operator_in_constraint1950 = new BitSet(new long[]{0x00002000008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint1962 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint1990 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint2025 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint2047 = new BitSet(new long[]{0x0000180000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint2130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint2141 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint2154 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint2165 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_45_in_literal_constraint2177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint2208 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_18_in_enum_constraint2210 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint2214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_retval_constraint2243 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint2248 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_retval_constraint2251 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_predicate2269 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_32_in_predicate2271 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_predicate2275 = new BitSet(new long[]{0x0000400000000000L});
+    public static final BitSet FOLLOW_46_in_predicate2277 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_predicate2279 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_paren_chunk_in_predicate2283 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_predicate2285 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_paren_chunk2331 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk2335 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk2337 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_23_in_paren_chunk22408 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_paren_chunk2_in_paren_chunk22412 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk22414 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_26_in_curly_chunk2483 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk2487 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_curly_chunk2489 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or2547 = new BitSet(new long[]{0x0000060000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_or2556 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_or2561 = new BitSet(new long[]{0x000E000000800020L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or2568 = new BitSet(new long[]{0x0000060000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2608 = new BitSet(new long[]{0x0001800000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_and2617 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_and2622 = new BitSet(new long[]{0x000E000000800020L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2629 = new BitSet(new long[]{0x0001800000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2667 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2675 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2683 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_unary2691 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_lhs_unary2697 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2699 = new BitSet(new long[]{0x000E000000800020L});
+    public static final BitSet FOLLOW_lhs_in_lhs_unary2703 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary2705 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_unary2707 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_49_in_lhs_exist2737 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_exist2740 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2744 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_exist2746 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist2752 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_50_in_lhs_not2782 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_not2785 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not2789 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_not2792 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not2798 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_51_in_lhs_eval2824 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_lhs_eval2828 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L});
+    public static final BitSet FOLLOW_paren_chunk2_in_lhs_eval2836 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_eval2840 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dotted_name2872 = new BitSet(new long[]{0x0010000000040002L});
+    public static final BitSet FOLLOW_18_in_dotted_name2878 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_dotted_name2882 = new BitSet(new long[]{0x0010000000040002L});
+    public static final BitSet FOLLOW_52_in_dotted_name2891 = new BitSet(new long[]{0x0020000000000000L});
+    public static final BitSet FOLLOW_53_in_dotted_name2893 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument2923 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_52_in_argument2929 = new BitSet(new long[]{0x0020000000000000L});
+    public static final BitSet FOLLOW_53_in_argument2931 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_ID_in_word2959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_word2971 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_54_in_word2980 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_word2992 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_word3003 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_word3013 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_word3021 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_word3029 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_word3040 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_word3051 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_word3065 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_55_in_operator3094 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_56_in_operator3101 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_57_in_operator3108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_58_in_operator3117 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_59_in_operator3124 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_60_in_operator3131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_61_in_operator3138 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_62_in_operator3145 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_63_in_operator3152 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ 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-07-21 10:57:49 UTC (rev 5211)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java	2006-07-21 11:41:53 UTC (rev 5212)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-07-20 16:49:10
+// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-07-21 12:29:35
 
 	package org.drools.lang;
 
@@ -38,7 +38,8 @@
     public static final int T39=39;
     public static final int ID=5;
     public static final int T21=21;
-    public static final int Synpred1_fragment=63;
+    public static final int Synpred1_fragment=65;
+    public static final int T62=62;
     public static final int T44=44;
     public static final int T55=55;
     public static final int BOOL=7;
@@ -52,6 +53,7 @@
     public static final int T28=28;
     public static final int T42=42;
     public static final int T40=40;
+    public static final int T63=63;
     public static final int T57=57;
     public static final int T56=56;
     public static final int T59=59;
@@ -61,7 +63,7 @@
     public static final int EOF=-1;
     public static final int T47=47;
     public static final int EOL=4;
-    public static final int Tokens=62;
+    public static final int Tokens=64;
     public static final int T53=53;
     public static final int T60=60;
     public static final int T31=31;
@@ -74,7 +76,7 @@
     public RuleParserLexer() {;} 
     public RuleParserLexer(CharStream input) {
         super(input);
-        ruleMemo = new Map[60+1];
+        ruleMemo = new Map[62+1];
      }
 
 
@@ -836,12 +838,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 29) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: ( '==' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: '=='
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: ( '&' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: '&'
             {
-            match("=="); if (failed) return ;
+            match('&'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -863,10 +864,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 30) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: ( '>' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: '>'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: ( '|' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:35:7: '|'
             {
-            match('>'); if (failed) return ;
+            match('|'); if (failed) return ;
 
             }
 
@@ -889,10 +890,10 @@
             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: ( 'null' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: 'null'
             {
-            match(">="); if (failed) return ;
+            match("null"); if (failed) return ;
 
 
             }
@@ -916,11 +917,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 32) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: ( '<' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: '<'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: ( '->' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:37:7: '->'
             {
-            match('<'); if (failed) return ;
+            match("->"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -942,10 +944,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 33) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: ( '<=' )
-            // /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: ( 'and' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: 'and'
             {
-            match("<="); if (failed) return ;
+            match("and"); if (failed) return ;
 
 
             }
@@ -969,10 +971,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 34) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: ( '!=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: '!='
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: ( '&&' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:39:7: '&&'
             {
-            match("!="); if (failed) return ;
+            match("&&"); if (failed) return ;
 
 
             }
@@ -996,10 +998,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: ( 'contains' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: 'contains'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: ( 'exists' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: 'exists'
             {
-            match("contains"); if (failed) return ;
+            match("exists"); if (failed) return ;
 
 
             }
@@ -1023,10 +1025,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: ( 'matches' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: 'matches'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: ( 'not' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: 'not'
             {
-            match("matches"); if (failed) return ;
+            match("not"); if (failed) return ;
 
 
             }
@@ -1050,10 +1052,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: ( 'excludes' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: 'excludes'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: ( 'eval' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: 'eval'
             {
-            match("excludes"); if (failed) return ;
+            match("eval"); if (failed) return ;
 
 
             }
@@ -1077,12 +1079,11 @@
             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: ( 'null' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: 'null'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: ( '[' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: '['
             {
-            match("null"); if (failed) return ;
+            match('['); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1104,12 +1105,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 39) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: ( '->' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: '->'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: ( ']' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:44:7: ']'
             {
-            match("->"); if (failed) return ;
+            match(']'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1131,10 +1131,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: ( 'and' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: 'and'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: ( 'use' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: 'use'
             {
-            match("and"); if (failed) return ;
+            match("use"); if (failed) return ;
 
 
             }
@@ -1158,10 +1158,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 41) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: ( '&&' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: '&&'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: ( '==' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: '=='
             {
-            match("&&"); if (failed) return ;
+            match("=="); if (failed) return ;
 
 
             }
@@ -1185,12 +1185,11 @@
             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: ( 'exists' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: 'exists'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: ( '>' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: '>'
             {
-            match("exists"); if (failed) return ;
+            match('>'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1212,10 +1211,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 43) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:48:7: ( 'not' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:48:7: 'not'
+            // /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("not"); if (failed) return ;
+            match(">="); if (failed) return ;
 
 
             }
@@ -1239,12 +1238,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 44) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: ( 'eval' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: 'eval'
+            // /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("eval"); if (failed) return ;
+            match('<'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1266,11 +1264,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 45) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: ( '[' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: '['
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: ( '<=' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:50:7: '<='
             {
-            match('['); if (failed) return ;
+            match("<="); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1292,11 +1291,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);}
@@ -1318,10 +1318,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 47) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: ( 'use' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: 'use'
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: ( 'contains' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: 'contains'
             {
-            match("use"); if (failed) return ;
+            match("contains"); if (failed) return ;
 
 
             }
@@ -1335,6 +1335,60 @@
     // $ANTLR end T61
 
 
+    // $ANTLR start T62
+    public void mT62() throws RecognitionException {
+        int T62_StartIndex = input.index();
+        try {
+            int type = T62;
+            int start = getCharIndex();
+            int line = getLine();
+            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: ( 'matches' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: 'matches'
+            {
+            match("matches"); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 48, T62_StartIndex); }
+        }
+    }
+    // $ANTLR end T62
+
+
+    // $ANTLR start T63
+    public void mT63() throws RecognitionException {
+        int T63_StartIndex = input.index();
+        try {
+            int type = T63;
+            int start = getCharIndex();
+            int line = getLine();
+            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: ( 'excludes' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:54:7: 'excludes'
+            {
+            match("excludes"); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 49, T63_StartIndex); }
+        }
+    }
+    // $ANTLR end T63
+
+
     // $ANTLR start MISC
     public void mMISC() throws RecognitionException {
         int MISC_StartIndex = input.index();
@@ -1344,8 +1398,8 @@
             int line = getLine();
             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:1035:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
+            if ( backtracking>0 && alreadyParsedRule(input, 50) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
             int alt1=39;
             switch ( input.LA(1) ) {
             case '!':
@@ -1434,14 +1488,11 @@
                 break;
             case '=':
                 switch ( input.LA(2) ) {
-                case '*':
-                    alt1=36;
-                    break;
                 case '/':
                     alt1=38;
                     break;
-                case '-':
-                    alt1=34;
+                case '*':
+                    alt1=36;
                     break;
                 case '+':
                     alt1=32;
@@ -1449,6 +1500,9 @@
                 case '=':
                     alt1=30;
                     break;
+                case '-':
+                    alt1=34;
+                    break;
                 default:
                     alt1=18;}
 
@@ -1480,16 +1534,16 @@
                 int LA1_25 = input.LA(2);
                 if ( LA1_25=='>' ) {
                     int LA1_46 = input.LA(3);
-                    if ( LA1_46=='>' ) {
+                    if ( LA1_46=='=' ) {
+                        alt1=39;
+                    }
+                    else if ( LA1_46=='>' ) {
                         alt1=29;
                     }
-                    else if ( LA1_46=='=' ) {
-                        alt1=39;
-                    }
                     else {
                         if (backtracking>0) {failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1034:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
+                            new NoViableAltException("1078:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
 
                         throw nvae;
                     }
@@ -1497,7 +1551,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1034:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
+                        new NoViableAltException("1078:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
 
                     throw nvae;
                 }
@@ -1505,175 +1559,175 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1034:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 0, input);
+                    new NoViableAltException("1078: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:1035:17: '!'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:17: '!'
                     {
                     match('!'); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:23: '@'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:23: '@'
                     {
                     match('@'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:29: '$'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:29: '$'
                     {
                     match('$'); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:35: '%'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:35: '%'
                     {
                     match('%'); if (failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:41: '^'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:41: '^'
                     {
                     match('^'); if (failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:47: '&'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:47: '&'
                     {
                     match('&'); if (failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:53: '*'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:53: '*'
                     {
                     match('*'); if (failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:59: '_'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:59: '_'
                     {
                     match('_'); if (failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:65: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:65: '-'
                     {
                     match('-'); if (failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:71: '+'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:71: '+'
                     {
                     match('+'); if (failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1035:78: '?'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1079:78: '?'
                     {
                     match('?'); if (failed) return ;
 
                     }
                     break;
                 case 12 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:19: '|'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:19: '|'
                     {
                     match('|'); if (failed) return ;
 
                     }
                     break;
                 case 13 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:25: ','
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:25: ','
                     {
                     match(','); if (failed) return ;
 
                     }
                     break;
                 case 14 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:31: '{'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:31: '{'
                     {
                     match('{'); if (failed) return ;
 
                     }
                     break;
                 case 15 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:37: '}'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:37: '}'
                     {
                     match('}'); if (failed) return ;
 
                     }
                     break;
                 case 16 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:43: '['
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:43: '['
                     {
                     match('['); if (failed) return ;
 
                     }
                     break;
                 case 17 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:49: ']'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:49: ']'
                     {
                     match(']'); if (failed) return ;
 
                     }
                     break;
                 case 18 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:55: '='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:55: '='
                     {
                     match('='); if (failed) return ;
 
                     }
                     break;
                 case 19 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:61: '/'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:61: '/'
                     {
                     match('/'); if (failed) return ;
 
                     }
                     break;
                 case 20 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:67: '('
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:67: '('
                     {
                     match('('); if (failed) return ;
 
                     }
                     break;
                 case 21 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:73: ')'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:73: ')'
                     {
                     match(')'); if (failed) return ;
 
                     }
                     break;
                 case 22 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:79: '\''
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:79: '\''
                     {
                     match('\''); if (failed) return ;
 
                     }
                     break;
                 case 23 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1036:86: '\\'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1080:86: '\\'
                     {
                     match('\\'); if (failed) return ;
 
                     }
                     break;
                 case 24 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:19: '||'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:19: '||'
                     {
                     match("||"); if (failed) return ;
 
@@ -1681,7 +1735,7 @@
                     }
                     break;
                 case 25 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:26: '&&'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:26: '&&'
                     {
                     match("&&"); if (failed) return ;
 
@@ -1689,7 +1743,7 @@
                     }
                     break;
                 case 26 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:33: '<<<'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:33: '<<<'
                     {
                     match("<<<"); if (failed) return ;
 
@@ -1697,7 +1751,7 @@
                     }
                     break;
                 case 27 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:41: '++'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:41: '++'
                     {
                     match("++"); if (failed) return ;
 
@@ -1705,7 +1759,7 @@
                     }
                     break;
                 case 28 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:48: '--'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:48: '--'
                     {
                     match("--"); if (failed) return ;
 
@@ -1713,7 +1767,7 @@
                     }
                     break;
                 case 29 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:55: '>>>'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:55: '>>>'
                     {
                     match(">>>"); if (failed) return ;
 
@@ -1721,7 +1775,7 @@
                     }
                     break;
                 case 30 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:63: '=='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:63: '=='
                     {
                     match("=="); if (failed) return ;
 
@@ -1729,7 +1783,7 @@
                     }
                     break;
                 case 31 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:70: '+='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:70: '+='
                     {
                     match("+="); if (failed) return ;
 
@@ -1737,7 +1791,7 @@
                     }
                     break;
                 case 32 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:77: '=+'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:77: '=+'
                     {
                     match("=+"); if (failed) return ;
 
@@ -1745,7 +1799,7 @@
                     }
                     break;
                 case 33 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:84: '-='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:84: '-='
                     {
                     match("-="); if (failed) return ;
 
@@ -1753,7 +1807,7 @@
                     }
                     break;
                 case 34 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:91: '=-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:91: '=-'
                     {
                     match("=-"); if (failed) return ;
 
@@ -1761,7 +1815,7 @@
                     }
                     break;
                 case 35 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:97: '*='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:97: '*='
                     {
                     match("*="); if (failed) return ;
 
@@ -1769,7 +1823,7 @@
                     }
                     break;
                 case 36 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1037:104: '=*'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:104: '=*'
                     {
                     match("=*"); if (failed) return ;
 
@@ -1777,7 +1831,7 @@
                     }
                     break;
                 case 37 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:19: '/='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:19: '/='
                     {
                     match("/="); if (failed) return ;
 
@@ -1785,7 +1839,7 @@
                     }
                     break;
                 case 38 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:26: '=/'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:26: '=/'
                     {
                     match("=/"); if (failed) return ;
 
@@ -1793,7 +1847,7 @@
                     }
                     break;
                 case 39 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1038:33: '>>='
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:33: '>>='
                     {
                     match(">>="); if (failed) return ;
 
@@ -1805,7 +1859,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 48, MISC_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 50, MISC_StartIndex); }
         }
     }
     // $ANTLR end MISC
@@ -1820,9 +1874,9 @@
             int line = getLine();
             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:1042:17: ( (' '|'\t'|'\f'))
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1042:17: (' '|'\t'|'\f')
+            if ( backtracking>0 && alreadyParsedRule(input, 51) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1086:17: ( (' '|'\t'|'\f'))
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1086:17: (' '|'\t'|'\f')
             {
             if ( input.LA(1)=='\t'||input.LA(1)=='\f'||input.LA(1)==' ' ) {
                 input.consume();
@@ -1844,7 +1898,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 49, WS_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 51, WS_StartIndex); }
         }
     }
     // $ANTLR end WS
@@ -1859,11 +1913,11 @@
             int line = getLine();
             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:1050:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            if ( backtracking>0 && alreadyParsedRule(input, 52) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1094:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1094:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1094:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
             if ( LA2_0=='\r' ) {
@@ -1880,13 +1934,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1050:17: ( ( \'\\r\\n\' )=> \'\\r\\n\' | \'\\r\' | \'\\n\' )", 2, 0, input);
+                    new NoViableAltException("1094: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:1050:25: ( '\r\n' )=> '\r\n'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1094:25: ( '\r\n' )=> '\r\n'
                     {
 
                     match("\r\n"); if (failed) return ;
@@ -1895,14 +1949,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1051:25: '\r'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1095: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:1052:25: '\n'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1096:25: '\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -1917,7 +1971,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 50, EOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 52, EOL_StartIndex); }
         }
     }
     // $ANTLR end EOL
@@ -1932,11 +1986,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 51) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:17: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:17: ( '-' )? ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 53) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1101:17: ( ( '-' )? ( '0' .. '9' )+ )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1101:17: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:17: ( '-' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1101:17: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
             if ( LA3_0=='-' ) {
@@ -1948,13 +2002,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1057:17: ( \'-\' )?", 3, 0, input);
+                    new NoViableAltException("1101: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:1057:18: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1101:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -1963,7 +2017,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:23: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1101:23: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -1976,7 +2030,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1057:24: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1101:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -1999,7 +2053,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 51, INT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 53, INT_StartIndex); }
         }
     }
     // $ANTLR end INT
@@ -2014,11 +2068,11 @@
             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:1061:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1061:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 54) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1061:17: ( '-' )?
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:17: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
             if ( LA5_0=='-' ) {
@@ -2030,13 +2084,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1061:17: ( \'-\' )?", 5, 0, input);
+                    new NoViableAltException("1105: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:1061:18: '-'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -2045,7 +2099,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1061:23: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:23: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -2058,7 +2112,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1061:24: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2076,7 +2130,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1061:39: ( '0' .. '9' )+
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:39: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -2089,7 +2143,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1061:40: '0' .. '9'
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:40: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2112,7 +2166,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 52, FLOAT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 54, FLOAT_StartIndex); }
         }
     }
     // $ANTLR end FLOAT
@@ -2127,8 +2181,8 @@
             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:1065:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
+            if ( backtracking>0 && alreadyParsedRule(input, 55) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
             if ( LA10_0=='"' ) {
@@ -2140,19 +2194,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1064:1: STRING : ( ( \'\"\' ( options {greedy=false; } : . )* \'\"\' ) | ( \'\\\'\' ( options {greedy=false; } : . )* \'\\\'\' ) );", 10, 0, input);
+                    new NoViableAltException("1108: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:1065:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:17: ( '"' ( options {greedy=false; } : . )* '"' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:17: ( '"' ( options {greedy=false; } : . )* '"' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:18: '"' ( options {greedy=false; } : . )* '"'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:18: '"' ( options {greedy=false; } : . )* '"'
                     {
                     match('"'); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:22: ( options {greedy=false; } : . )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:22: ( options {greedy=false; } : . )*
                     loop8:
                     do {
                         int alt8=2;
@@ -2167,7 +2221,7 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:49: .
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:49: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2187,13 +2241,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:62: '\'' ( options {greedy=false; } : . )* '\''
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:62: '\'' ( options {greedy=false; } : . )* '\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:67: ( options {greedy=false; } : . )*
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:67: ( options {greedy=false; } : . )*
                     loop9:
                     do {
                         int alt9=2;
@@ -2208,7 +2262,7 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1065:94: .
+                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1109:94: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2232,7 +2286,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 53, STRING_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 55, STRING_StartIndex); }
         }
     }
     // $ANTLR end STRING
@@ -2247,11 +2301,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:1069:17: ( ( 'true' | 'false' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1069:17: ( 'true' | 'false' )
+            if ( backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1113:17: ( ( 'true' | 'false' ) )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1113:17: ( 'true' | 'false' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1069:17: ( 'true' | 'false' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1113:17: ( 'true' | 'false' )
             int alt11=2;
             int LA11_0 = input.LA(1);
             if ( LA11_0=='t' ) {
@@ -2263,13 +2317,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1069:17: ( \'true\' | \'false\' )", 11, 0, input);
+                    new NoViableAltException("1113: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:1069:18: 'true'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1113:18: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -2277,7 +2331,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1069:25: 'false'
+                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1113:25: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -2293,7 +2347,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 54, BOOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 56, BOOL_StartIndex); }
         }
     }
     // $ANTLR end BOOL
@@ -2308,9 +2362,9 @@
             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:1073: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:1073:17: ('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff') ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            if ( backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117: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:1117: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();
@@ -2323,7 +2377,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1073:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
             loop12:
             do {
                 int alt12=2;
@@ -2335,7 +2389,7 @@
 
                 switch (alt12) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1073:66: ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1117: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();
@@ -2363,7 +2417,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 55, ID_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 57, ID_StartIndex); }
         }
     }
     // $ANTLR end ID
@@ -2378,12 +2432,12 @@
             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:1078:17: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1078:17: '#' ( options {greedy=false; } : . )* EOL
+            if ( backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1122:17: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1122:17: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1078:21: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1122:21: ( options {greedy=false; } : . )*
             loop13:
             do {
                 int alt13=2;
@@ -2401,7 +2455,7 @@
 
                 switch (alt13) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1078:48: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1122:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2423,7 +2477,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 56, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 58, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end SH_STYLE_SINGLE_LINE_COMMENT
@@ -2438,13 +2492,13 @@
             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:1084:17: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1084:17: '//' ( options {greedy=false; } : . )* EOL
+            if ( backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1128:17: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1128:17: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1084:22: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1128:22: ( options {greedy=false; } : . )*
             loop14:
             do {
                 int alt14=2;
@@ -2462,7 +2516,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1084:49: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1128:49: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2484,7 +2538,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 57, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 59, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
@@ -2499,13 +2553,13 @@
             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:1089:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1089:17: '/*' ( options {greedy=false; } : . )* '*/'
+            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1133:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1133:17: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1089:22: ( options {greedy=false; } : . )*
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1133:22: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2528,7 +2582,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1089:48: .
+            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1133:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2551,14 +2605,14 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 58, MULTI_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 60, 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 | MISC | WS | EOL | INT | FLOAT | STRING | BOOL | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT )
-        int alt16=58;
+        // /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 | MISC | WS | EOL | INT | FLOAT | STRING | BOOL | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT )
+        int alt16=60;
         alt16 = dfa16.predict(input); if (failed) return ;
         switch (alt16) {
             case 1 :
@@ -2891,78 +2945,92 @@
                 }
                 break;
             case 48 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:198: MISC
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:198: T62
                 {
-                mMISC(); if (failed) return ;
+                mT62(); if (failed) return ;
 
                 }
                 break;
             case 49 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:203: WS
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:202: T63
                 {
-                mWS(); if (failed) return ;
+                mT63(); if (failed) return ;
 
                 }
                 break;
             case 50 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:206: EOL
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:206: MISC
                 {
-                mEOL(); if (failed) return ;
+                mMISC(); if (failed) return ;
 
                 }
                 break;
             case 51 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:210: INT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:211: WS
                 {
-                mINT(); if (failed) return ;
+                mWS(); if (failed) return ;
 
                 }
                 break;
             case 52 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:214: FLOAT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:214: EOL
                 {
-                mFLOAT(); if (failed) return ;
+                mEOL(); if (failed) return ;
 
                 }
                 break;
             case 53 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:220: STRING
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:218: INT
                 {
-                mSTRING(); if (failed) return ;
+                mINT(); if (failed) return ;
 
                 }
                 break;
             case 54 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:227: BOOL
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:222: FLOAT
                 {
-                mBOOL(); if (failed) return ;
+                mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 55 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:232: ID
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:228: STRING
                 {
-                mID(); if (failed) return ;
+                mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 56 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:235: SH_STYLE_SINGLE_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:235: BOOL
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mBOOL(); if (failed) return ;
 
                 }
                 break;
             case 57 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:264: C_STYLE_SINGLE_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:240: ID
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mID(); if (failed) return ;
 
                 }
                 break;
             case 58 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:292: MULTI_LINE_COMMENT
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:243: SH_STYLE_SINGLE_LINE_COMMENT
                 {
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 59 :
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:272: C_STYLE_SINGLE_LINE_COMMENT
+                {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 60 :
+                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:300: MULTI_LINE_COMMENT
+                {
                 mMULTI_LINE_COMMENT(); if (failed) return ;
 
                 }
@@ -2977,9 +3045,9 @@
     public void mSynpred1_fragment() throws RecognitionException {
         int Synpred1_fragment_StartIndex = input.index();
         try {
-            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:25: ( '\r\n' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1050:27: '\r\n'
+            if ( backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1094:25: ( '\r\n' )
+            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1094:27: '\r\n'
             {
             match("\r\n"); if (failed) return ;
 
@@ -2988,7 +3056,7 @@
 
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 60, Synpred1_fragment_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 62, Synpred1_fragment_StartIndex); }
         }
     }
     // $ANTLR end Synpred1_fragment
@@ -3006,7 +3074,7 @@
         }
         DFA.State s1 = new DFA.State() {{alt=1;}};
         DFA.State s467 = new DFA.State() {{alt=2;}};
-        DFA.State s51 = new DFA.State() {{alt=55;}};
+        DFA.State s51 = new DFA.State() {{alt=57;}};
         DFA.State s428 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_428 = input.LA(1);
@@ -3122,23 +3190,6 @@
 
             }
         };
-        DFA.State s248 = new DFA.State() {{alt=15;}};
-        DFA.State s165 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_165 = input.LA(1);
-                if ( (LA16_165>='0' && LA16_165<='9')||(LA16_165>='A' && LA16_165<='Z')||LA16_165=='_'||(LA16_165>='a' && LA16_165<='z')||(LA16_165>='\u00C0' && LA16_165<='\u00FF') ) {return s51;}
-                return s248;
-
-            }
-        };
-        DFA.State s61 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_61 = input.LA(1);
-                if ( LA16_61=='d' ) {return s165;}
-                return s51;
-
-            }
-        };
         DFA.State s495 = new DFA.State() {{alt=6;}};
         DFA.State s469 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
@@ -3172,23 +3223,23 @@
 
             }
         };
-        DFA.State s250 = new DFA.State() {
+        DFA.State s248 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_250 = input.LA(1);
-                if ( LA16_250=='n' ) {return s325;}
+                int LA16_248 = input.LA(1);
+                if ( LA16_248=='n' ) {return s325;}
                 return s51;
 
             }
         };
-        DFA.State s168 = new DFA.State() {
+        DFA.State s165 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_168 = input.LA(1);
-                if ( LA16_168=='a' ) {return s250;}
+                int LA16_165 = input.LA(1);
+                if ( LA16_165=='a' ) {return s248;}
                 return s51;
 
             }
         };
-        DFA.State s436 = new DFA.State() {{alt=42;}};
+        DFA.State s436 = new DFA.State() {{alt=35;}};
         DFA.State s391 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_391 = input.LA(1);
@@ -3205,23 +3256,23 @@
 
             }
         };
-        DFA.State s253 = new DFA.State() {
+        DFA.State s251 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_253 = input.LA(1);
-                if ( LA16_253=='t' ) {return s328;}
+                int LA16_251 = input.LA(1);
+                if ( LA16_251=='t' ) {return s328;}
                 return s51;
 
             }
         };
-        DFA.State s169 = new DFA.State() {
+        DFA.State s166 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_169 = input.LA(1);
-                if ( LA16_169=='s' ) {return s253;}
+                int LA16_166 = input.LA(1);
+                if ( LA16_166=='s' ) {return s251;}
                 return s51;
 
             }
         };
-        DFA.State s497 = new DFA.State() {{alt=37;}};
+        DFA.State s497 = new DFA.State() {{alt=49;}};
         DFA.State s472 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_472 = input.LA(1);
@@ -3254,60 +3305,77 @@
 
             }
         };
-        DFA.State s256 = new DFA.State() {
+        DFA.State s254 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_256 = input.LA(1);
-                if ( LA16_256=='u' ) {return s331;}
+                int LA16_254 = input.LA(1);
+                if ( LA16_254=='u' ) {return s331;}
                 return s51;
 
             }
         };
-        DFA.State s170 = new DFA.State() {
+        DFA.State s167 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_170 = input.LA(1);
-                if ( LA16_170=='l' ) {return s256;}
+                int LA16_167 = input.LA(1);
+                if ( LA16_167=='l' ) {return s254;}
                 return s51;
 
             }
         };
-        DFA.State s62 = new DFA.State() {
+        DFA.State s61 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 'p':
-                    return s168;
+                    return s165;
 
                 case 'i':
-                    return s169;
+                    return s166;
 
                 case 'c':
-                    return s170;
+                    return s167;
 
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s334 = new DFA.State() {{alt=44;}};
-        DFA.State s259 = new DFA.State() {
+        DFA.State s334 = new DFA.State() {{alt=37;}};
+        DFA.State s257 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_259 = input.LA(1);
-                if ( (LA16_259>='0' && LA16_259<='9')||(LA16_259>='A' && LA16_259<='Z')||LA16_259=='_'||(LA16_259>='a' && LA16_259<='z')||(LA16_259>='\u00C0' && LA16_259<='\u00FF') ) {return s51;}
+                int LA16_257 = input.LA(1);
+                if ( (LA16_257>='0' && LA16_257<='9')||(LA16_257>='A' && LA16_257<='Z')||LA16_257=='_'||(LA16_257>='a' && LA16_257<='z')||(LA16_257>='\u00C0' && LA16_257<='\u00FF') ) {return s51;}
                 return s334;
 
             }
         };
+        DFA.State s170 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_170 = input.LA(1);
+                if ( LA16_170=='l' ) {return s257;}
+                return s51;
+
+            }
+        };
+        DFA.State s62 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_62 = input.LA(1);
+                if ( LA16_62=='a' ) {return s170;}
+                return s51;
+
+            }
+        };
+        DFA.State s260 = new DFA.State() {{alt=15;}};
         DFA.State s173 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_173 = input.LA(1);
-                if ( LA16_173=='l' ) {return s259;}
-                return s51;
+                if ( (LA16_173>='0' && LA16_173<='9')||(LA16_173>='A' && LA16_173<='Z')||LA16_173=='_'||(LA16_173>='a' && LA16_173<='z')||(LA16_173>='\u00C0' && LA16_173<='\u00FF') ) {return s51;}
+                return s260;
 
             }
         };
         DFA.State s63 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_63 = input.LA(1);
-                if ( LA16_63=='a' ) {return s173;}
+                if ( LA16_63=='d' ) {return s173;}
                 return s51;
 
             }
@@ -3315,13 +3383,13 @@
         DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'n':
+                case 'x':
                     return s61;
 
-                case 'x':
+                case 'v':
                     return s62;
 
-                case 'v':
+                case 'n':
                     return s63;
 
                 default:
@@ -3435,12 +3503,12 @@
 
             }
         };
-        DFA.State s352 = new DFA.State() {{alt=54;}};
+        DFA.State s354 = new DFA.State() {{alt=56;}};
         DFA.State s342 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_342 = input.LA(1);
                 if ( (LA16_342>='0' && LA16_342<='9')||(LA16_342>='A' && LA16_342<='Z')||LA16_342=='_'||(LA16_342>='a' && LA16_342<='z')||(LA16_342>='\u00C0' && LA16_342<='\u00FF') ) {return s51;}
-                return s352;
+                return s354;
 
             }
         };
@@ -3630,6 +3698,7 @@
             }
         };
         DFA.State s16 = new DFA.State() {{alt=18;}};
+        DFA.State s352 = new DFA.State() {{alt=19;}};
         DFA.State s280 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_280 = input.LA(1);
@@ -3641,7 +3710,7 @@
         DFA.State s194 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_194 = input.LA(1);
-                if ( LA16_194=='e' ) {return s280;}
+                if ( LA16_194=='n' ) {return s280;}
                 return s51;
 
             }
@@ -3649,12 +3718,11 @@
         DFA.State s87 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_87 = input.LA(1);
-                if ( LA16_87=='u' ) {return s194;}
+                if ( LA16_87=='e' ) {return s194;}
                 return s51;
 
             }
         };
-        DFA.State s354 = new DFA.State() {{alt=19;}};
         DFA.State s283 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_283 = input.LA(1);
@@ -3666,7 +3734,7 @@
         DFA.State s197 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_197 = input.LA(1);
-                if ( LA16_197=='n' ) {return s283;}
+                if ( LA16_197=='e' ) {return s283;}
                 return s51;
 
             }
@@ -3674,7 +3742,7 @@
         DFA.State s88 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_88 = input.LA(1);
-                if ( LA16_88=='e' ) {return s197;}
+                if ( LA16_88=='u' ) {return s197;}
                 return s51;
 
             }
@@ -3682,10 +3750,10 @@
         DFA.State s17 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'r':
+                case 'h':
                     return s87;
 
-                case 'h':
+                case 'r':
                     return s88;
 
                 default:
@@ -3693,117 +3761,110 @@
         	        }
             }
         };
-        DFA.State s519 = new DFA.State() {{alt=20;}};
-        DFA.State s513 = new DFA.State() {
+        DFA.State s446 = new DFA.State() {{alt=25;}};
+        DFA.State s407 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_513 = input.LA(1);
-                if ( (LA16_513>='0' && LA16_513<='9')||(LA16_513>='A' && LA16_513<='Z')||LA16_513=='_'||(LA16_513>='a' && LA16_513<='z')||(LA16_513>='\u00C0' && LA16_513<='\u00FF') ) {return s51;}
-                return s519;
-
-            }
-        };
-        DFA.State s501 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_501 = input.LA(1);
-                if ( LA16_501=='s' ) {return s513;}
+                int LA16_407 = input.LA(1);
+                if ( LA16_407=='-' ) {return s446;}
                 return s51;
 
             }
         };
-        DFA.State s478 = new DFA.State() {
+        DFA.State s356 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_478 = input.LA(1);
-                if ( LA16_478=='e' ) {return s501;}
+                int LA16_356 = input.LA(1);
+                if ( LA16_356=='a' ) {return s407;}
                 return s51;
 
             }
         };
-        DFA.State s446 = new DFA.State() {
+        DFA.State s286 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_446 = input.LA(1);
-                if ( LA16_446=='t' ) {return s478;}
+                int LA16_286 = input.LA(1);
+                if ( LA16_286=='d' ) {return s356;}
                 return s51;
 
             }
         };
-        DFA.State s407 = new DFA.State() {
+        DFA.State s200 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_407 = input.LA(1);
-                if ( LA16_407=='u' ) {return s446;}
+                int LA16_200 = input.LA(1);
+                if ( LA16_200=='n' ) {return s286;}
                 return s51;
 
             }
         };
-        DFA.State s356 = new DFA.State() {
+        DFA.State s91 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_356 = input.LA(1);
-                if ( LA16_356=='b' ) {return s407;}
+                int LA16_91 = input.LA(1);
+                if ( LA16_91=='e' ) {return s200;}
                 return s51;
 
             }
         };
-        DFA.State s286 = new DFA.State() {
+        DFA.State s359 = new DFA.State() {{alt=23;}};
+        DFA.State s289 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_286 = input.LA(1);
-                if ( LA16_286=='i' ) {return s356;}
+                int LA16_289 = input.LA(1);
+                if ( LA16_289=='-' ) {return s359;}
                 return s51;
 
             }
         };
-        DFA.State s200 = new DFA.State() {
+        DFA.State s203 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_200 = input.LA(1);
-                if ( LA16_200=='r' ) {return s286;}
+                int LA16_203 = input.LA(1);
+                if ( LA16_203=='o' ) {return s289;}
                 return s51;
 
             }
         };
-        DFA.State s91 = new DFA.State() {
+        DFA.State s92 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_91 = input.LA(1);
-                if ( LA16_91=='t' ) {return s200;}
+                int LA16_92 = input.LA(1);
+                if ( LA16_92=='t' ) {return s203;}
                 return s51;
 
             }
         };
-        DFA.State s289 = new DFA.State() {{alt=40;}};
-        DFA.State s203 = new DFA.State() {
+        DFA.State s292 = new DFA.State() {{alt=33;}};
+        DFA.State s206 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_203 = input.LA(1);
-                if ( (LA16_203>='0' && LA16_203<='9')||(LA16_203>='A' && LA16_203<='Z')||LA16_203=='_'||(LA16_203>='a' && LA16_203<='z')||(LA16_203>='\u00C0' && LA16_203<='\u00FF') ) {return s51;}
-                return s289;
+                int LA16_206 = input.LA(1);
+                if ( (LA16_206>='0' && LA16_206<='9')||(LA16_206>='A' && LA16_206<='Z')||LA16_206=='_'||(LA16_206>='a' && LA16_206<='z')||(LA16_206>='\u00C0' && LA16_206<='\u00FF') ) {return s51;}
+                return s292;
 
             }
         };
-        DFA.State s92 = new DFA.State() {
+        DFA.State s93 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_92 = input.LA(1);
-                if ( LA16_92=='d' ) {return s203;}
+                int LA16_93 = input.LA(1);
+                if ( LA16_93=='d' ) {return s206;}
                 return s51;
 
             }
         };
-        DFA.State s521 = new DFA.State() {{alt=24;}};
-        DFA.State s516 = new DFA.State() {
+        DFA.State s519 = new DFA.State() {{alt=24;}};
+        DFA.State s513 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_516 = input.LA(1);
-                if ( LA16_516=='-' ) {return s521;}
+                int LA16_513 = input.LA(1);
+                if ( LA16_513=='-' ) {return s519;}
                 return s51;
 
             }
         };
-        DFA.State s504 = new DFA.State() {
+        DFA.State s501 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_504 = input.LA(1);
-                if ( LA16_504=='n' ) {return s516;}
+                int LA16_501 = input.LA(1);
+                if ( LA16_501=='n' ) {return s513;}
                 return s51;
 
             }
         };
-        DFA.State s481 = new DFA.State() {
+        DFA.State s478 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_481 = input.LA(1);
-                if ( LA16_481=='o' ) {return s504;}
+                int LA16_478 = input.LA(1);
+                if ( LA16_478=='o' ) {return s501;}
                 return s51;
 
             }
@@ -3811,7 +3872,7 @@
         DFA.State s449 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_449 = input.LA(1);
-                if ( LA16_449=='i' ) {return s481;}
+                if ( LA16_449=='i' ) {return s478;}
                 return s51;
 
             }
@@ -3824,84 +3885,91 @@
 
             }
         };
-        DFA.State s359 = new DFA.State() {
+        DFA.State s362 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_359 = input.LA(1);
-                if ( LA16_359=='a' ) {return s410;}
+                int LA16_362 = input.LA(1);
+                if ( LA16_362=='a' ) {return s410;}
                 return s51;
 
             }
         };
-        DFA.State s291 = new DFA.State() {
+        DFA.State s294 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_291 = input.LA(1);
-                if ( LA16_291=='v' ) {return s359;}
+                int LA16_294 = input.LA(1);
+                if ( LA16_294=='v' ) {return s362;}
                 return s51;
 
             }
         };
-        DFA.State s206 = new DFA.State() {
+        DFA.State s209 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_206 = input.LA(1);
-                if ( LA16_206=='i' ) {return s291;}
+                int LA16_209 = input.LA(1);
+                if ( LA16_209=='i' ) {return s294;}
                 return s51;
 
             }
         };
-        DFA.State s93 = new DFA.State() {
+        DFA.State s94 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_93 = input.LA(1);
-                if ( LA16_93=='t' ) {return s206;}
+                int LA16_94 = input.LA(1);
+                if ( LA16_94=='t' ) {return s209;}
                 return s51;
 
             }
         };
-        DFA.State s452 = new DFA.State() {{alt=25;}};
-        DFA.State s413 = new DFA.State() {
+        DFA.State s522 = new DFA.State() {{alt=20;}};
+        DFA.State s516 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_413 = input.LA(1);
-                if ( LA16_413=='-' ) {return s452;}
+                int LA16_516 = input.LA(1);
+                if ( (LA16_516>='0' && LA16_516<='9')||(LA16_516>='A' && LA16_516<='Z')||LA16_516=='_'||(LA16_516>='a' && LA16_516<='z')||(LA16_516>='\u00C0' && LA16_516<='\u00FF') ) {return s51;}
+                return s522;
+
+            }
+        };
+        DFA.State s504 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_504 = input.LA(1);
+                if ( LA16_504=='s' ) {return s516;}
                 return s51;
 
             }
         };
-        DFA.State s362 = new DFA.State() {
+        DFA.State s481 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_362 = input.LA(1);
-                if ( LA16_362=='a' ) {return s413;}
+                int LA16_481 = input.LA(1);
+                if ( LA16_481=='e' ) {return s504;}
                 return s51;
 
             }
         };
-        DFA.State s294 = new DFA.State() {
+        DFA.State s452 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_294 = input.LA(1);
-                if ( LA16_294=='d' ) {return s362;}
+                int LA16_452 = input.LA(1);
+                if ( LA16_452=='t' ) {return s481;}
                 return s51;
 
             }
         };
-        DFA.State s209 = new DFA.State() {
+        DFA.State s413 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_209 = input.LA(1);
-                if ( LA16_209=='n' ) {return s294;}
+                int LA16_413 = input.LA(1);
+                if ( LA16_413=='u' ) {return s452;}
                 return s51;
 
             }
         };
-        DFA.State s94 = new DFA.State() {
+        DFA.State s365 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_94 = input.LA(1);
-                if ( LA16_94=='e' ) {return s209;}
+                int LA16_365 = input.LA(1);
+                if ( LA16_365=='b' ) {return s413;}
                 return s51;
 
             }
         };
-        DFA.State s365 = new DFA.State() {{alt=23;}};
         DFA.State s297 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_297 = input.LA(1);
-                if ( LA16_297=='-' ) {return s365;}
+                if ( LA16_297=='i' ) {return s365;}
                 return s51;
 
             }
@@ -3909,7 +3977,7 @@
         DFA.State s212 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_212 = input.LA(1);
-                if ( LA16_212=='o' ) {return s297;}
+                if ( LA16_212=='r' ) {return s297;}
                 return s51;
 
             }
@@ -3925,19 +3993,19 @@
         DFA.State s18 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 't':
+                case 'g':
                     return s91;
 
-                case 'n':
+                case 'u':
                     return s92;
 
-                case 'c':
+                case 'n':
                     return s93;
 
-                case 'g':
+                case 'c':
                     return s94;
 
-                case 'u':
+                case 't':
                     return s95;
 
                 default:
@@ -4010,23 +4078,23 @@
 
             }
         };
-        DFA.State s303 = new DFA.State() {{alt=43;}};
-        DFA.State s218 = new DFA.State() {
+        DFA.State s218 = new DFA.State() {{alt=22;}};
+        DFA.State s303 = new DFA.State() {{alt=36;}};
+        DFA.State s219 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_218 = input.LA(1);
-                if ( (LA16_218>='0' && LA16_218<='9')||(LA16_218>='A' && LA16_218<='Z')||LA16_218=='_'||(LA16_218>='a' && LA16_218<='z')||(LA16_218>='\u00C0' && LA16_218<='\u00FF') ) {return s51;}
+                int LA16_219 = input.LA(1);
+                if ( (LA16_219>='0' && LA16_219<='9')||(LA16_219>='A' && LA16_219<='Z')||LA16_219=='_'||(LA16_219>='a' && LA16_219<='z')||(LA16_219>='\u00C0' && LA16_219<='\u00FF') ) {return s51;}
                 return s303;
 
             }
         };
-        DFA.State s219 = new DFA.State() {{alt=22;}};
         DFA.State s101 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 't':
+                case '-':
                     return s218;
 
-                case '-':
+                case 't':
                     return s219;
 
                 default:
@@ -4034,7 +4102,7 @@
         	        }
             }
         };
-        DFA.State s371 = new DFA.State() {{alt=38;}};
+        DFA.State s371 = new DFA.State() {{alt=31;}};
         DFA.State s305 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_305 = input.LA(1);
@@ -4163,288 +4231,290 @@
 
             }
         };
-        DFA.State s35 = new DFA.State() {{alt=48;}};
+        DFA.State s112 = new DFA.State() {{alt=30;}};
         DFA.State s23 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_23 = input.LA(1);
                 if ( LA16_23=='|' ) {return s111;}
-                return s35;
+                return s112;
 
             }
         };
-        DFA.State s231 = new DFA.State() {{alt=29;}};
-        DFA.State s114 = new DFA.State() {
+        DFA.State s231 = new DFA.State() {{alt=34;}};
+        DFA.State s113 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_114 = input.LA(1);
+                int LA16_113 = input.LA(1);
                 return s231;
 
             }
         };
+        DFA.State s114 = new DFA.State() {{alt=29;}};
         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 s35;
+                if ( LA16_24=='&' ) {return s113;}
+                return s114;
 
             }
         };
-        DFA.State s120 = new DFA.State() {{alt=31;}};
-        DFA.State s121 = new DFA.State() {{alt=30;}};
-        DFA.State s25 = new DFA.State() {
+        DFA.State s115 = new DFA.State() {{alt=32;}};
+        DFA.State s35 = new DFA.State() {{alt=50;}};
+        DFA.State s156 = new DFA.State() {{alt=53;}};
+        DFA.State s158 = new DFA.State() {{alt=54;}};
+        DFA.State s49 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case '>':
-                    return s35;
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                case '8':
+                case '9':
+                    return s49;
 
-                case '=':
-                    return s120;
+                case '.':
+                    return s158;
 
                 default:
-                    return s121;
+                    return s156;
         	        }
             }
         };
-        DFA.State s123 = new DFA.State() {{alt=33;}};
-        DFA.State s124 = new DFA.State() {{alt=32;}};
-        DFA.State s26 = new DFA.State() {
+        DFA.State s25 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case '<':
-                    return s35;
+                case '>':
+                    return s115;
 
-                case '=':
-                    return s123;
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                case '8':
+                case '9':
+                    return s49;
 
                 default:
-                    return s124;
+                    return s35;
         	        }
             }
         };
-        DFA.State s125 = new DFA.State() {{alt=34;}};
-        DFA.State s27 = new DFA.State() {
+        DFA.State s120 = new DFA.State() {{alt=38;}};
+        DFA.State s26 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_27 = input.LA(1);
-                if ( LA16_27=='=' ) {return s125;}
-                return s35;
+                int LA16_26 = input.LA(1);
+                return s120;
 
             }
         };
-        DFA.State s511 = new DFA.State() {{alt=35;}};
-        DFA.State s490 = new DFA.State() {
+        DFA.State s121 = new DFA.State() {{alt=39;}};
+        DFA.State s27 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_490 = input.LA(1);
-                if ( (LA16_490>='0' && LA16_490<='9')||(LA16_490>='A' && LA16_490<='Z')||LA16_490=='_'||(LA16_490>='a' && LA16_490<='z')||(LA16_490>='\u00C0' && LA16_490<='\u00FF') ) {return s51;}
-                return s511;
+                int LA16_27 = input.LA(1);
+                return s121;
 
             }
         };
-        DFA.State s461 = new DFA.State() {
+        DFA.State s311 = new DFA.State() {{alt=40;}};
+        DFA.State s232 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_461 = input.LA(1);
-                if ( LA16_461=='s' ) {return s490;}
-                return s51;
+                int LA16_232 = input.LA(1);
+                if ( (LA16_232>='0' && LA16_232<='9')||(LA16_232>='A' && LA16_232<='Z')||LA16_232=='_'||(LA16_232>='a' && LA16_232<='z')||(LA16_232>='\u00C0' && LA16_232<='\u00FF') ) {return s51;}
+                return s311;
 
             }
         };
-        DFA.State s422 = new DFA.State() {
+        DFA.State s122 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_422 = input.LA(1);
-                if ( LA16_422=='n' ) {return s461;}
+                int LA16_122 = input.LA(1);
+                if ( LA16_122=='e' ) {return s232;}
                 return s51;
 
             }
         };
-        DFA.State s376 = new DFA.State() {
+        DFA.State s28 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_376 = input.LA(1);
-                if ( LA16_376=='i' ) {return s422;}
+                int LA16_28 = input.LA(1);
+                if ( LA16_28=='s' ) {return s122;}
                 return s51;
 
             }
         };
-        DFA.State s311 = new DFA.State() {
+        DFA.State s235 = new DFA.State() {{alt=41;}};
+        DFA.State s125 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_311 = input.LA(1);
-                if ( LA16_311=='a' ) {return s376;}
-                return s51;
+                int LA16_125 = input.LA(1);
+                return s235;
 
             }
         };
-        DFA.State s232 = new DFA.State() {
+        DFA.State s29 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_232 = input.LA(1);
-                if ( LA16_232=='t' ) {return s311;}
-                return s51;
+                int LA16_29 = input.LA(1);
+                if ( LA16_29=='=' ) {return s125;}
+                return s35;
 
             }
         };
-        DFA.State s127 = new DFA.State() {
+        DFA.State s132 = new DFA.State() {{alt=43;}};
+        DFA.State s133 = new DFA.State() {{alt=42;}};
+        DFA.State s30 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_127 = input.LA(1);
-                if ( LA16_127=='n' ) {return s232;}
-                return s51;
+                switch ( input.LA(1) ) {
+                case '>':
+                    return s35;
 
+                case '=':
+                    return s132;
+
+                default:
+                    return s133;
+        	        }
             }
         };
-        DFA.State s28 = new DFA.State() {
+        DFA.State s134 = new DFA.State() {{alt=45;}};
+        DFA.State s136 = new DFA.State() {{alt=44;}};
+        DFA.State s31 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_28 = input.LA(1);
-                if ( LA16_28=='o' ) {return s127;}
-                return s51;
+                switch ( input.LA(1) ) {
+                case '=':
+                    return s134;
 
+                case '<':
+                    return s35;
+
+                default:
+                    return s136;
+        	        }
             }
         };
-        DFA.State s493 = new DFA.State() {{alt=36;}};
-        DFA.State s464 = new DFA.State() {
+        DFA.State s137 = new DFA.State() {{alt=46;}};
+        DFA.State s32 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_464 = input.LA(1);
-                if ( (LA16_464>='0' && LA16_464<='9')||(LA16_464>='A' && LA16_464<='Z')||LA16_464=='_'||(LA16_464>='a' && LA16_464<='z')||(LA16_464>='\u00C0' && LA16_464<='\u00FF') ) {return s51;}
-                return s493;
+                int LA16_32 = input.LA(1);
+                if ( LA16_32=='=' ) {return s137;}
+                return s35;
 
             }
         };
-        DFA.State s425 = new DFA.State() {
+        DFA.State s511 = new DFA.State() {{alt=47;}};
+        DFA.State s490 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_425 = input.LA(1);
-                if ( LA16_425=='s' ) {return s464;}
-                return s51;
+                int LA16_490 = input.LA(1);
+                if ( (LA16_490>='0' && LA16_490<='9')||(LA16_490>='A' && LA16_490<='Z')||LA16_490=='_'||(LA16_490>='a' && LA16_490<='z')||(LA16_490>='\u00C0' && LA16_490<='\u00FF') ) {return s51;}
+                return s511;
 
             }
         };
-        DFA.State s379 = new DFA.State() {
+        DFA.State s461 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_379 = input.LA(1);
-                if ( LA16_379=='e' ) {return s425;}
+                int LA16_461 = input.LA(1);
+                if ( LA16_461=='s' ) {return s490;}
                 return s51;
 
             }
         };
-        DFA.State s314 = new DFA.State() {
+        DFA.State s422 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_314 = input.LA(1);
-                if ( LA16_314=='h' ) {return s379;}
+                int LA16_422 = input.LA(1);
+                if ( LA16_422=='n' ) {return s461;}
                 return s51;
 
             }
         };
-        DFA.State s235 = new DFA.State() {
+        DFA.State s376 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_235 = input.LA(1);
-                if ( LA16_235=='c' ) {return s314;}
+                int LA16_376 = input.LA(1);
+                if ( LA16_376=='i' ) {return s422;}
                 return s51;
 
             }
         };
-        DFA.State s130 = new DFA.State() {
+        DFA.State s313 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_130 = input.LA(1);
-                if ( LA16_130=='t' ) {return s235;}
+                int LA16_313 = input.LA(1);
+                if ( LA16_313=='a' ) {return s376;}
                 return s51;
 
             }
         };
-        DFA.State s29 = new DFA.State() {
+        DFA.State s236 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_29 = input.LA(1);
-                if ( LA16_29=='a' ) {return s130;}
+                int LA16_236 = input.LA(1);
+                if ( LA16_236=='t' ) {return s313;}
                 return s51;
 
             }
         };
-        DFA.State s133 = new DFA.State() {{alt=39;}};
-        DFA.State s156 = new DFA.State() {{alt=52;}};
-        DFA.State s158 = new DFA.State() {{alt=51;}};
-        DFA.State s49 = new DFA.State() {
+        DFA.State s139 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                switch ( input.LA(1) ) {
-                case '.':
-                    return s156;
+                int LA16_139 = input.LA(1);
+                if ( LA16_139=='n' ) {return s236;}
+                return s51;
 
-                case '0':
-                case '1':
-                case '2':
-                case '3':
-                case '4':
-                case '5':
-                case '6':
-                case '7':
-                case '8':
-                case '9':
-                    return s49;
-
-                default:
-                    return s158;
-        	        }
             }
         };
-        DFA.State s30 = new DFA.State() {
+        DFA.State s33 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                switch ( input.LA(1) ) {
-                case '>':
-                    return s133;
+                int LA16_33 = input.LA(1);
+                if ( LA16_33=='o' ) {return s139;}
+                return s51;
 
-                case '0':
-                case '1':
-                case '2':
-                case '3':
-                case '4':
-                case '5':
-                case '6':
-                case '7':
-                case '8':
-                case '9':
-                    return s49;
-
-                default:
-                    return s35;
-        	        }
             }
         };
-        DFA.State s238 = new DFA.State() {{alt=41;}};
-        DFA.State s138 = new DFA.State() {
+        DFA.State s493 = new DFA.State() {{alt=48;}};
+        DFA.State s464 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_138 = input.LA(1);
-                return s238;
+                int LA16_464 = input.LA(1);
+                if ( (LA16_464>='0' && LA16_464<='9')||(LA16_464>='A' && LA16_464<='Z')||LA16_464=='_'||(LA16_464>='a' && LA16_464<='z')||(LA16_464>='\u00C0' && LA16_464<='\u00FF') ) {return s51;}
+                return s493;
 
             }
         };
-        DFA.State s31 = new DFA.State() {
+        DFA.State s425 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_31 = input.LA(1);
-                if ( LA16_31=='&' ) {return s138;}
-                return s35;
+                int LA16_425 = input.LA(1);
+                if ( LA16_425=='s' ) {return s464;}
+                return s51;
 
             }
         };
-        DFA.State s140 = new DFA.State() {{alt=45;}};
-        DFA.State s32 = new DFA.State() {
+        DFA.State s379 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_32 = input.LA(1);
-                return s140;
+                int LA16_379 = input.LA(1);
+                if ( LA16_379=='e' ) {return s425;}
+                return s51;
 
             }
         };
-        DFA.State s141 = new DFA.State() {{alt=46;}};
-        DFA.State s33 = new DFA.State() {
+        DFA.State s316 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_33 = input.LA(1);
-                return s141;
+                int LA16_316 = input.LA(1);
+                if ( LA16_316=='h' ) {return s379;}
+                return s51;
 
             }
         };
-        DFA.State s317 = new DFA.State() {{alt=47;}};
         DFA.State s239 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_239 = input.LA(1);
-                if ( (LA16_239>='0' && LA16_239<='9')||(LA16_239>='A' && LA16_239<='Z')||LA16_239=='_'||(LA16_239>='a' && LA16_239<='z')||(LA16_239>='\u00C0' && LA16_239<='\u00FF') ) {return s51;}
-                return s317;
+                if ( LA16_239=='c' ) {return s316;}
+                return s51;
 
             }
         };
         DFA.State s142 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_142 = input.LA(1);
-                if ( LA16_142=='e' ) {return s239;}
+                if ( LA16_142=='t' ) {return s239;}
                 return s51;
 
             }
@@ -4452,17 +4522,17 @@
         DFA.State s34 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_34 = input.LA(1);
-                if ( LA16_34=='s' ) {return s142;}
+                if ( LA16_34=='a' ) {return s142;}
                 return s51;
 
             }
         };
-        DFA.State s145 = new DFA.State() {{alt=48;}};
+        DFA.State s146 = new DFA.State() {{alt=50;}};
         DFA.State s36 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_36 = input.LA(1);
                 if ( (LA16_36>='0' && LA16_36<='9')||(LA16_36>='A' && LA16_36<='Z')||LA16_36=='_'||(LA16_36>='a' && LA16_36<='z')||(LA16_36>='\u00C0' && LA16_36<='\u00FF') ) {return s51;}
-                return s145;
+                return s146;
 
             }
         };
@@ -4470,38 +4540,38 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_40 = input.LA(1);
                 if ( (LA16_40>='0' && LA16_40<='9')||(LA16_40>='A' && LA16_40<='Z')||LA16_40=='_'||(LA16_40>='a' && LA16_40<='z')||(LA16_40>='\u00C0' && LA16_40<='\u00FF') ) {return s51;}
-                return s145;
+                return s146;
 
             }
         };
-        DFA.State s149 = new DFA.State() {{alt=58;}};
-        DFA.State s150 = new DFA.State() {{alt=57;}};
+        DFA.State s150 = new DFA.State() {{alt=60;}};
+        DFA.State s151 = new DFA.State() {{alt=59;}};
         DFA.State s43 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case '*':
-                    return s149;
+                    return s150;
 
                 case '/':
-                    return s150;
+                    return s151;
 
                 default:
-                    return s145;
+                    return s146;
         	        }
             }
         };
-        DFA.State s50 = new DFA.State() {{alt=53;}};
+        DFA.State s50 = new DFA.State() {{alt=55;}};
         DFA.State s44 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_44 = input.LA(1);
                 if ( (LA16_44>='\u0000' && LA16_44<='\uFFFE') ) {return s50;}
-                return s145;
+                return s146;
 
             }
         };
-        DFA.State s46 = new DFA.State() {{alt=49;}};
-        DFA.State s47 = new DFA.State() {{alt=50;}};
-        DFA.State s52 = new DFA.State() {{alt=56;}};
+        DFA.State s46 = new DFA.State() {{alt=51;}};
+        DFA.State s47 = new DFA.State() {{alt=52;}};
+        DFA.State s52 = new DFA.State() {{alt=58;}};
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -4574,37 +4644,37 @@
                 case '|':
                     return s23;
 
-                case '=':
+                case '&':
                     return s24;
 
-                case '>':
+                case '-':
                     return s25;
 
-                case '<':
+                case '[':
                     return s26;
 
-                case '!':
+                case ']':
                     return s27;
 
-                case 'c':
+                case 'u':
                     return s28;
 
-                case 'm':
+                case '=':
                     return s29;
 
-                case '-':
+                case '>':
                     return s30;
 
-                case '&':
+                case '<':
                     return s31;
 
-                case '[':
+                case '!':
                     return s32;
 
-                case ']':
+                case 'c':
                     return s33;
 
-                case 'u':
+                case 'm':
                     return s34;
 
                 case '%':

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java	2006-07-21 10:57:49 UTC (rev 5211)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java	2006-07-21 11:41:53 UTC (rev 5212)
@@ -1,12 +1,16 @@
 package org.drools.lang.descr;
 
+/**
+ * This is used to connect restrictions together for a single field
+ * eg:
+ * 	age < 40 & > 30 
+ *
+ */
 public class RestrictionConnectiveDescr extends RestrictionDescr {    
-    /**
-     * 
-     */
+
     private static final long serialVersionUID = 320;
-    private final static int AND = 0;
-    private final static int OR = 1;
+    public final static int AND = 0;
+    public final static int OR = 1;
     
     private int connective;
 

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-07-21 10:57:49 UTC (rev 5211)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g	2006-07-21 11:41:53 UTC (rev 5212)
@@ -705,6 +705,7 @@
 		( fb=ID opt_eol ':' opt_eol )? 
 		f=ID	
 		{
+
 			if ( fb != null ) {
 				//System.err.println( "fb: " + fb.getText() );
 				//System.err.println( " f: " + f.getText() );
@@ -714,68 +715,91 @@
 				d.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
 				constraints.add( d );
 			} 
-		}
-			opt_eol (	op=(	'=='
-					|	'>'
-					|	'>='
-					|	'<'
-					|	'<='
-					|	'!='
-					|	'contains'
-					|	'matches'
-					|       'excludes'
-					) opt_eol	
+			FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());
+			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
+									
+			
+		}				
+			opt_eol (	op=operator opt_eol	
 					
 					(	bvc=ID
 						{
-
 							
-							//d = new BoundVariableDescr( f.getText(), op.getText(), bvc.getText() );
-							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());														
-							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-							VariableRestrictionDescr vd = new VariableRestrictionDescr(op.getText(), bvc.getText());
+														
+							
+							VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
 							fc.addRestriction(vd);
+							constraints.add(fc);
 							
-							constraints.add( fc );
 						}
 					|
 						lc=enum_constraint 
 						{ 
-							//d = new LiteralDescr( f.getText(), op.getText(), lc, true ); 
-							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());																					
-							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-							
-							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op.getText(), lc, true);
+
+							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
 							fc.addRestriction(lrd);
+							constraints.add(fc);
 							
-							constraints.add( fc );
 						}						
 					|
 						lc=literal_constraint 
 						{ 
-							//d = new LiteralDescr( f.getText(), op.getText(), lc ); 
-							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());																					
-							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
 							
-							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op.getText(), lc);
+							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
 							fc.addRestriction(lrd);
+							constraints.add(fc);
 							
-							constraints.add( fc );
 						}
 					|	rvc=retval_constraint 
 						{ 
 							
 							
-							//d = new ReturnValueDescr( f.getText(), op.getText(), rvc ); 
-							FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());																					
-							fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
 
-							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(f.getText(), op.getText(), rvc);							
+							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(f.getText(), op, rvc);							
 							fc.addRestriction(rvd);
+							constraints.add(fc);
 							
-							constraints.add( fc );
 						} 
 					)
+					(
+						con=('&'|'|')
+						{
+							if (con.getText().equals("&") ) {								
+								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
+							} else {
+								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
+							}							
+						}
+
+						op=operator
+						(	bvc=ID
+							{
+								VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
+								fc.addRestriction(vd);
+							}
+						|
+							lc=enum_constraint 
+							{ 
+								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
+								fc.addRestriction(lrd);
+								
+							}						
+						|
+							lc=literal_constraint 
+							{ 
+								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
+								fc.addRestriction(lrd);
+								
+							}
+						|	rvc=retval_constraint 
+							{ 
+								ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(f.getText(), op, rvc);							
+								fc.addRestriction(rvd);
+								
+							} 
+						)						
+						
+					)*
 				)?					
 		opt_eol
 	;
@@ -1030,7 +1054,27 @@
 	|	str=STRING { word=getString(str);} //str.getText(); word=word.substring( 1, word.length()-1 ); }
 	;
 
+operator returns [String str] 	
+	@init {
+		str = null;
+	}
+	:
 
+		'==' {str= "==";}
+		|'>' {str=">";}
+		|'>=' {str=">=";}		
+		|'<' {str="<";}
+		|'<=' {str="<=";}
+		|'!=' {str="!=";}
+		|'contains' {str="contains";}
+		|'matches' {str="matches";}
+		|'excludes' {str="excludes";}
+					
+						
+	;
+
+
+
 MISC 	:
 		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?'
 		| '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\'
@@ -1038,7 +1082,7 @@
 		| '/=' | '=/' | '>>=' 
 		
 	;
-
+	
 WS      :       (	' '
                 |	'\t'
                 |	'\f'

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-07-21 10:57:49 UTC (rev 5211)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2006-07-21 11:41:53 UTC (rev 5212)
@@ -19,6 +19,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.util.Iterator;
 import java.util.List;
 
 import junit.framework.TestCase;
@@ -40,6 +41,7 @@
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
 
@@ -389,6 +391,7 @@
 
     }
 
+            
     public void testSimpleRule() throws Exception {
         final RuleDescr rule = parseResource( "simple_rule.drl" ).rule();
 
@@ -480,7 +483,71 @@
 
         assertFalse( this.parser.hasErrors() );
     }
+    
+    
+    public void testRestrictionsMultiple() throws Exception {
+        final RuleDescr rule = parseResource( "restrictions_test.drl" ).rule();
 
+        
+        
+        
+        assertFalse(this.parser.hasErrors());
+        
+        assertNotNull( rule );
+
+        assertEquals( "simple_rule",
+                      rule.getName() );
+        assertEquals(2, rule.getLhs().getDescrs().size());
+        
+        
+        //The first column, with 2 restrictions on a single field
+        ColumnDescr col = (ColumnDescr) rule.getLhs().getDescrs().get(0);
+        assertEquals("Person", col.getObjectType());
+        assertEquals(1, col.getDescrs().size());
+        
+        FieldConstraintDescr fld = (FieldConstraintDescr) col.getDescrs().get(0);
+        assertEquals(3, fld.getRestrictions().size());
+        assertEquals("age", fld.getFieldName());
+        
+        LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+        assertEquals(">", lit.getEvaluator());
+        assertEquals("30", lit.getText());
+        
+        RestrictionConnectiveDescr con = (RestrictionConnectiveDescr) fld.getRestrictions().get(1);
+        assertEquals(RestrictionConnectiveDescr.AND, con.getConnective());
+        
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get(2);
+        assertEquals("<", lit.getEvaluator());
+        assertEquals("40", lit.getText());
+        
+        //the second col, with 2 fields, the first with 2 restrictions, the second field with one
+        col = (ColumnDescr) rule.getLhs().getDescrs().get(1);
+        assertEquals("Vehicle", col.getObjectType());
+        assertEquals(2, col.getDescrs().size());
+        
+        fld = (FieldConstraintDescr) col.getDescrs().get(0);
+        assertEquals(3, fld.getRestrictions().size());
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+        assertEquals("type", fld.getFieldName());
+        assertEquals("==", lit.getEvaluator());
+        assertEquals("sedan", lit.getText());
+        con = (RestrictionConnectiveDescr) fld.getRestrictions().get(1);
+        assertEquals(RestrictionConnectiveDescr.OR, con.getConnective());
+        
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get(2);
+        assertEquals("==", lit.getEvaluator());
+        assertEquals("wagon", lit.getText());
+        
+        
+        	//now the second field
+        fld = (FieldConstraintDescr) col.getDescrs().get(1);
+        assertEquals(1, fld.getRestrictions().size());
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+        assertEquals("<", lit.getEvaluator());
+        assertEquals("3", lit.getText());
+
+    }
+
     public void testLineNumberInAST() throws Exception {
         //also see testSimpleExpander to see how this works with an expander (should be the same). 
 
@@ -1945,5 +2012,14 @@
         assertEquals( cleanExpected,
                       cleanActual );
     }
+    
+    private void prettyPrintErrors() {
+    	List msgs = this.parser.getErrorMessages();
+    	for (Iterator iter = msgs.iterator(); iter.hasNext();) {
+			String err = (String) iter.next();
+			System.out.println(err);
+			
+		}
+    }
 
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl	2006-07-21 10:57:49 UTC (rev 5211)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl	2006-07-21 11:41:53 UTC (rev 5212)
@@ -0,0 +1,12 @@
+#this is for showing off all the new multi restriction stuff
+
+
+
+
+rule simple_rule 
+  when
+  	Person(age > 30 & < 40)
+  	Vehicle(type == "sedan" | == "wagon", age < 3)
+  then
+	consequence();
+end
\ No newline at end of file




More information about the jboss-svn-commits mailing list