[jboss-svn-commits] JBL Code SVN: r6107 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/lang drools-compiler/src/main/java/org/drools/lang/descr drools-compiler/src/main/java/org/drools/semantics/java drools-compiler/src/main/resources/org/drools/lang drools-compiler/src/main/resources/org/drools/semantics/java drools-compiler/src/test/java/org/drools/integrationtests drools-compiler/src/test/java/org/drools/lang drools-compiler/src/test/java/org/drools/semantics/java drools-compiler/src/test/resources/org/drools/integrationtests drools-compiler/src/test/resources/org/drools/lang drools-compiler/src/test/resources/org/drools/reteoo drools-core/src/main/java/org/drools/base/dataproviders drools-core/src/main/java/org/drools/reteoo drools-core/src/main/java/org/drools/rule drools-core/src/main/java/org/drools/spi drools-core/src/test/java/org/drools/reteoo

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Sep 7 09:45:07 EDT 2006


Author: tirelli
Date: 2006-09-07 09:44:19 -0400 (Thu, 07 Sep 2006)
New Revision: 6107

Added:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Accumulate.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_bindings.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Accumulator.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Accumulator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CalculatedObjectHandle.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
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/ColumnDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaRule.stg
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
Log:
* JBRULES-217: Adding Accumulate Conditional Element

  * JBRULES-336: Adding core support for Accumulate
    - Implemented AccumulateNode, Accumulate CE, Accumulator interface
    - Added support into ReteooBuilder
    - Added wiring support for generated code

  * JBRULES-337: Adding language support for Accumulate
    - Added grammar rules 
    - Added parser support
    - Added AST classes
    - Added rule builder support
    - Added string templates for code generation

  * Added test cases for all classes




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-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParser.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -1,15 +1,15 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-09-01 12:37:56
+// $ANTLR 3.0ea8 D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g 2006-09-06 10:48:01
+
+	package org.drools.lang;
+	import java.util.List;
+	import java.util.ArrayList;
+	import java.util.Iterator;
+	import java.util.Map;	
+	import java.util.HashMap;	
+	import java.util.StringTokenizer;
+	import org.drools.lang.descr.*;
 
-	package org.drools.lang;
-	import java.util.List;
-	import java.util.ArrayList;
-	import java.util.Iterator;
-	import java.util.Map;	
-	import java.util.HashMap;	
-	import java.util.StringTokenizer;
-	import org.drools.lang.descr.*;
 
-
 import org.antlr.runtime.*;
 import java.util.Stack;
 import java.util.List;
@@ -17,7 +17,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\'", "\'function\'", "\'.\'", "\'.*\'", "\'expander\'", "\'global\'", "\'(\'", "\',\'", "\')\'", "\'{\'", "\'}\'", "\'query\'", "\'end\'", "\'template\'", "\'rule\'", "\'when\'", "\':\'", "\'then\'", "\'attributes\'", "\'salience\'", "\'no-loop\'", "\'auto-focus\'", "\'activation-group\'", "\'agenda-group\'", "\'duration\'", "\'from\'", "\'null\'", "\'=>\'", "\'[\'", "\']\'", "\'or\'", "\'||\'", "\'&\'", "\'|\'", "\'->\'", "\'and\'", "\'&&\'", "\'exists\'", "\'not\'", "\'eval\'", "\'use\'", "\'==\'", "\'=\'", "\'>\'", "\'>=\'", "\'<\'", "\'<=\'", "\'!=\'", "\'contains\'", "\'matches\'", "\'excludes\'"
+        "<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\'", "\'function\'", "\'.\'", "\'.*\'", "\'expander\'", "\'global\'", "\'(\'", "\',\'", "\')\'", "\'{\'", "\'}\'", "\'query\'", "\'end\'", "\'template\'", "\'rule\'", "\'when\'", "\':\'", "\'then\'", "\'attributes\'", "\'salience\'", "\'no-loop\'", "\'auto-focus\'", "\'activation-group\'", "\'agenda-group\'", "\'duration\'", "\'from\'", "\'accumulate\'", "\'init\'", "\'action\'", "\'result\'", "\'null\'", "\'=>\'", "\'[\'", "\']\'", "\'or\'", "\'||\'", "\'&\'", "\'|\'", "\'->\'", "\'and\'", "\'&&\'", "\'exists\'", "\'not\'", "\'eval\'", "\'use\'", "\'==\'", "\'=\'", "\'>\'", "\'>=\'", "\'<\'", "\'<=\'", "\'!=\'", "\'contains\'", "\'matches\'", "\'excludes\'"
     };
     public static final int BOOL=7;
     public static final int INT=6;
@@ -38,286 +38,286 @@
 
     public String[] getTokenNames() { return tokenNames; }
 
+    
+    	private ExpanderResolver expanderResolver;
+    	private Expander expander;
+    	private boolean expanderDebug = false;
+    	private PackageDescr packageDescr;
+    	private List errors = new ArrayList();
+    	private String source = "unknown";
+    	private int lineOffset = 0;
+    	private DescrFactory factory = new DescrFactory();
+    	
+    	
+    	private boolean parserDebug = false;
+    	
+    	public void setParserDebug(boolean parserDebug) {
+    		this.parserDebug = parserDebug;
+    	}
+    	
+    	public void debug(String message) {
+    		if ( parserDebug ) 
+    			System.err.println( "drl parser: " + message );
+    	}
+    	
+    	public void setSource(String source) {
+    		this.source = source;
+    	}
+    	
+    	public DescrFactory getFactory() {
+    		return factory;
+    	}	
+    
+    	/**
+    	 * This may be set to enable debuggin of DSLs/expanders.
+    	 * If set to true, expander stuff will be sent to the Std out.
+    	 */	
+    	public void setExpanderDebug(boolean status) {
+    		expanderDebug = status;
+    	}
+    	public String getSource() {
+    		return this.source;
+    	}
+    	
+    	public PackageDescr getPackageDescr() {
+    		return packageDescr;
+    	}
+    	
+    	private int offset(int line) {
+    		return line + lineOffset;
+    	}
+    	
+    	/**
+    	 * This will set the offset to record when reparsing. Normally is zero of course 
+    	 */
+    	public void setLineOffset(int i) {
+    	 	this.lineOffset = i;
+    	}
+    	
+    	public void setExpanderResolver(ExpanderResolver expanderResolver) {
+    		this.expanderResolver = expanderResolver;
+    	}
+    	
+    	public ExpanderResolver getExpanderResolver() {
+    		return expanderResolver;
+    	}
+    	
+    	/** Expand the LHS */
+    	private String runWhenExpander(String text, int line) throws RecognitionException {
+    		String expanded = text.trim();
+    		if (expanded.startsWith(">")) {
+    			expanded = expanded.substring(1);  //escape !!
+    		} else {
+    			try {
+    				expanded = expander.expand( "when", text );			
+    			} catch (Exception e) {
+    				this.errors.add(new ExpanderException("Unable to expand: " + text + ". Due to " + e.getMessage(), line));
+    				return "";
+    			}
+    		}
+    		if (expanderDebug) {
+    			System.out.println("Expanding LHS: " + text + " ----> " + expanded + " --> from line: " + line);
+    		}
+    		return expanded;			
+    	}
+    	
+        	/** This will apply a list of constraints to an LHS block */
+        	private String applyConstraints(List constraints, String block) {
+        		//apply the constraints as a comma seperated list inside the previous block
+        		//the block will end in something like "foo()" and the constraint patterns will be put in the ()
+        		if (constraints == null) {
+        			return block;
+        		}
+        		StringBuffer list = new StringBuffer();    		
+        		for (Iterator iter = constraints.iterator(); iter.hasNext();) {
+    				String con = (String) iter.next();
+    				list.append("\n\t\t");
+    				list.append(con);
+    				if (iter.hasNext()) {
+    					list.append(",");					
+    				}			
+    			}
+        		if (block.endsWith("()")) {
+        			return block.substring(0, block.length() - 2) + "(" + list.toString() + ")";
+        		} else {
+        			return block + "(" + list.toString() + ")";
+        		}
+        	}  
+        	
+            	/** Reparse the results of the expansion */
+        	private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
+        		CharStream charStream = new ANTLRStringStream( text  + " \n  then"); //need to then so it knows when to end... werd...
+        		RuleParserLexer lexer = new RuleParserLexer( charStream );
+        		TokenStream tokenStream = new CommonTokenStream( lexer );
+        		RuleParser parser = new RuleParser( tokenStream );
+        		parser.setLineOffset( descrs.getLine() );
+        		parser.normal_lhs_block(descrs);
+                
+                    if (parser.hasErrors()) {
+        			this.errors.addAll(parser.getErrors());
+        		}
+    		if (expanderDebug) {
+    			System.out.println("Reparsing LHS: " + text + " --> successful:" + !parser.hasErrors());
+    		}    		
+        		
+        	}
+    	
+    	/** Expand a line on the RHS */
+    	private String runThenExpander(String text, int startLine) {
+    		//System.err.println( "expand THEN [" + text + "]" );
+    		StringTokenizer lines = new StringTokenizer( text, "\n\r" );
+    
+    		StringBuffer expanded = new StringBuffer();
+    		
+    		String eol = System.getProperty( "line.separator" );
+    				
+    		while ( lines.hasMoreTokens() ) {
+    			startLine++;
+    			String line = lines.nextToken();
+    			line = line.trim();
+    			if ( line.length() > 0 ) {
+    				if ( line.startsWith( ">" ) ) {
+    					expanded.append( line.substring( 1 ) );
+    					expanded.append( eol );
+    				} else {
+    					try {
+    						expanded.append( expander.expand( "then", line ) );
+    						expanded.append( eol );
+    					} catch (Exception e) {
+    						this.errors.add(new ExpanderException("Unable to expand: " + line + ". Due to " + e.getMessage(), startLine));			
+    					}
+    				}
+    			}
+    		}
+    		
+    		if (expanderDebug) {
+    			System.out.println("Expanding RHS: " + text + " ----> " + expanded.toString() + " --> from line starting: " + startLine);
+    		}		
+    		
+    		return expanded.toString();
+    	}
+    	
+    
+    	
+    	private String getString(Token token) {
+    		String orig = token.getText();
+    		return orig.substring( 1, orig.length() -1 );
+    	}
+    	
+    	public void reportError(RecognitionException ex) {
+    	        // if we've already reported an error and have not matched a token
+                    // yet successfully, don't report any errors.
+                    if ( errorRecovery ) {
+                            return;
+                    }
+                    errorRecovery = true;
+    
+    		ex.line = offset(ex.line); //add the offset if there is one
+    		errors.add( ex ); 
+    	}
+         	
+         	/** return the raw RecognitionException errors */
+         	public List getErrors() {
+         		return errors;
+         	}
+         	
+         	/** Return a list of pretty strings summarising the errors */
+         	public List getErrorMessages() {
+         		List messages = new ArrayList();
+     		for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
+         	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
+         	     	}
+         	     	return messages;
+         	}
+         	
+         	/** return true if any parser errors were accumulated */
+         	public boolean hasErrors() {
+      		return ! errors.isEmpty();
+         	}
+         	
+         	/** This will take a RecognitionException, and create a sensible error message out of it */
+         	public String createErrorMessage(RecognitionException e)
+            {
+    		StringBuffer message = new StringBuffer();		
+                    message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
+                    if ( e instanceof MismatchedTokenException ) {
+                            MismatchedTokenException mte = (MismatchedTokenException)e;
+                            message.append("mismatched token: "+
+                                                               e.token+
+                                                               "; expecting type "+
+                                                               tokenNames[mte.expecting]);
+                    }
+                    else if ( e instanceof MismatchedTreeNodeException ) {
+                            MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
+                            message.append("mismatched tree node: "+
+                                                               mtne.foundNode+
+                                                               "; expecting type "+
+                                                               tokenNames[mtne.expecting]);
+                    }
+                    else if ( e instanceof NoViableAltException ) {
+                            NoViableAltException nvae = (NoViableAltException)e;
+    			message.append( "Unexpected token '" + e.token.getText() + "'" );
+                            /*
+                            message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
+                                                               " state "+nvae.stateNumber+
+                                                               " (decision="+nvae.decisionNumber+
+                                                               ") no viable alt; token="+
+                                                               e.token);
+                                                               */
+                    }
+                    else if ( e instanceof EarlyExitException ) {
+                            EarlyExitException eee = (EarlyExitException)e;
+                            message.append("required (...)+ loop (decision="+
+                                                               eee.decisionNumber+
+                                                               ") did not match anything; token="+
+                                                               e.token);
+                    }
+                    else if ( e instanceof MismatchedSetException ) {
+                            MismatchedSetException mse = (MismatchedSetException)e;
+                            message.append("mismatched token '"+
+                                                               e.token+
+                                                               "' expecting set "+mse.expecting);
+                    }
+                    else if ( e instanceof MismatchedNotSetException ) {
+                            MismatchedNotSetException mse = (MismatchedNotSetException)e;
+                            message.append("mismatched token '"+
+                                                               e.token+
+                                                               "' expecting set "+mse.expecting);
+                    }
+                    else if ( e instanceof FailedPredicateException ) {
+                            FailedPredicateException fpe = (FailedPredicateException)e;
+                            message.append("rule "+fpe.ruleName+" failed predicate: {"+
+                                                               fpe.predicateText+"}?");
+                    } else if (e instanceof GeneralParseException) {
+    			message.append(" " + e.getMessage());
+    		}
+                   	return message.toString();
+            }   
+            
+            void checkTrailingSemicolon(String text, int line) {
+            	if (text.trim().endsWith( ";" ) ) {
+            		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
+            	}
+            }
+            
+            private String padConsequenceLine(int diff, String cons) {
+            	for(int i = 0; i < diff; i++) {
+            		cons = cons + '\n';
+            	}
+            	return cons;
+            }
+          
 
-    	private ExpanderResolver expanderResolver;
-    	private Expander expander;
-    	private boolean expanderDebug = false;
-    	private PackageDescr packageDescr;
-    	private List errors = new ArrayList();
-    	private String source = "unknown";
-    	private int lineOffset = 0;
-    	private DescrFactory factory = new DescrFactory();
-    	
-    	
-    	private boolean parserDebug = false;
-    	
-    	public void setParserDebug(boolean parserDebug) {
-    		this.parserDebug = parserDebug;
-    	}
-    	
-    	public void debug(String message) {
-    		if ( parserDebug ) 
-    			System.err.println( "drl parser: " + message );
-    	}
-    	
-    	public void setSource(String source) {
-    		this.source = source;
-    	}
-    	
-    	public DescrFactory getFactory() {
-    		return factory;
-    	}	
 
-    	/**
-    	 * This may be set to enable debuggin of DSLs/expanders.
-    	 * If set to true, expander stuff will be sent to the Std out.
-    	 */	
-    	public void setExpanderDebug(boolean status) {
-    		expanderDebug = status;
-    	}
-    	public String getSource() {
-    		return this.source;
-    	}
-    	
-    	public PackageDescr getPackageDescr() {
-    		return packageDescr;
-    	}
-    	
-    	private int offset(int line) {
-    		return line + lineOffset;
-    	}
-    	
-    	/**
-    	 * This will set the offset to record when reparsing. Normally is zero of course 
-    	 */
-    	public void setLineOffset(int i) {
-    	 	this.lineOffset = i;
-    	}
-    	
-    	public void setExpanderResolver(ExpanderResolver expanderResolver) {
-    		this.expanderResolver = expanderResolver;
-    	}
-    	
-    	public ExpanderResolver getExpanderResolver() {
-    		return expanderResolver;
-    	}
-    	
-    	/** Expand the LHS */
-    	private String runWhenExpander(String text, int line) throws RecognitionException {
-    		String expanded = text.trim();
-    		if (expanded.startsWith(">")) {
-    			expanded = expanded.substring(1);  //escape !!
-    		} else {
-    			try {
-    				expanded = expander.expand( "when", text );			
-    			} catch (Exception e) {
-    				this.errors.add(new ExpanderException("Unable to expand: " + text + ". Due to " + e.getMessage(), line));
-    				return "";
-    			}
-    		}
-    		if (expanderDebug) {
-    			System.out.println("Expanding LHS: " + text + " ----> " + expanded + " --> from line: " + line);
-    		}
-    		return expanded;			
-    	}
-    	
-        	/** This will apply a list of constraints to an LHS block */
-        	private String applyConstraints(List constraints, String block) {
-        		//apply the constraints as a comma seperated list inside the previous block
-        		//the block will end in something like "foo()" and the constraint patterns will be put in the ()
-        		if (constraints == null) {
-        			return block;
-        		}
-        		StringBuffer list = new StringBuffer();    		
-        		for (Iterator iter = constraints.iterator(); iter.hasNext();) {
-    				String con = (String) iter.next();
-    				list.append("\n\t\t");
-    				list.append(con);
-    				if (iter.hasNext()) {
-    					list.append(",");					
-    				}			
-    			}
-        		if (block.endsWith("()")) {
-        			return block.substring(0, block.length() - 2) + "(" + list.toString() + ")";
-        		} else {
-        			return block + "(" + list.toString() + ")";
-        		}
-        	}  
-        	
-            	/** Reparse the results of the expansion */
-        	private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
-        		CharStream charStream = new ANTLRStringStream( text  + " \n  then"); //need to then so it knows when to end... werd...
-        		RuleParserLexer lexer = new RuleParserLexer( charStream );
-        		TokenStream tokenStream = new CommonTokenStream( lexer );
-        		RuleParser parser = new RuleParser( tokenStream );
-        		parser.setLineOffset( descrs.getLine() );
-        		parser.normal_lhs_block(descrs);
-                
-                    if (parser.hasErrors()) {
-        			this.errors.addAll(parser.getErrors());
-        		}
-    		if (expanderDebug) {
-    			System.out.println("Reparsing LHS: " + text + " --> successful:" + !parser.hasErrors());
-    		}    		
-        		
-        	}
-    	
-    	/** Expand a line on the RHS */
-    	private String runThenExpander(String text, int startLine) {
-    		//System.err.println( "expand THEN [" + text + "]" );
-    		StringTokenizer lines = new StringTokenizer( text, "\n\r" );
 
-    		StringBuffer expanded = new StringBuffer();
-    		
-    		String eol = System.getProperty( "line.separator" );
-    				
-    		while ( lines.hasMoreTokens() ) {
-    			startLine++;
-    			String line = lines.nextToken();
-    			line = line.trim();
-    			if ( line.length() > 0 ) {
-    				if ( line.startsWith( ">" ) ) {
-    					expanded.append( line.substring( 1 ) );
-    					expanded.append( eol );
-    				} else {
-    					try {
-    						expanded.append( expander.expand( "then", line ) );
-    						expanded.append( eol );
-    					} catch (Exception e) {
-    						this.errors.add(new ExpanderException("Unable to expand: " + line + ". Due to " + e.getMessage(), startLine));			
-    					}
-    				}
-    			}
-    		}
-    		
-    		if (expanderDebug) {
-    			System.out.println("Expanding RHS: " + text + " ----> " + expanded.toString() + " --> from line starting: " + startLine);
-    		}		
-    		
-    		return expanded.toString();
-    	}
-    	
-
-    	
-    	private String getString(Token token) {
-    		String orig = token.getText();
-    		return orig.substring( 1, orig.length() -1 );
-    	}
-    	
-    	public void reportError(RecognitionException ex) {
-    	        // if we've already reported an error and have not matched a token
-                    // yet successfully, don't report any errors.
-                    if ( errorRecovery ) {
-                            return;
-                    }
-                    errorRecovery = true;
-
-    		ex.line = offset(ex.line); //add the offset if there is one
-    		errors.add( ex ); 
-    	}
-         	
-         	/** return the raw RecognitionException errors */
-         	public List getErrors() {
-         		return errors;
-         	}
-         	
-         	/** Return a list of pretty strings summarising the errors */
-         	public List getErrorMessages() {
-         		List messages = new ArrayList();
-     		for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
-         	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
-         	     	}
-         	     	return messages;
-         	}
-         	
-         	/** return true if any parser errors were accumulated */
-         	public boolean hasErrors() {
-      		return ! errors.isEmpty();
-         	}
-         	
-         	/** This will take a RecognitionException, and create a sensible error message out of it */
-         	public String createErrorMessage(RecognitionException e)
-            {
-    		StringBuffer message = new StringBuffer();		
-                    message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
-                    if ( e instanceof MismatchedTokenException ) {
-                            MismatchedTokenException mte = (MismatchedTokenException)e;
-                            message.append("mismatched token: "+
-                                                               e.token+
-                                                               "; expecting type "+
-                                                               tokenNames[mte.expecting]);
-                    }
-                    else if ( e instanceof MismatchedTreeNodeException ) {
-                            MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
-                            message.append("mismatched tree node: "+
-                                                               mtne.foundNode+
-                                                               "; expecting type "+
-                                                               tokenNames[mtne.expecting]);
-                    }
-                    else if ( e instanceof NoViableAltException ) {
-                            NoViableAltException nvae = (NoViableAltException)e;
-    			message.append( "Unexpected token '" + e.token.getText() + "'" );
-                            /*
-                            message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
-                                                               " state "+nvae.stateNumber+
-                                                               " (decision="+nvae.decisionNumber+
-                                                               ") no viable alt; token="+
-                                                               e.token);
-                                                               */
-                    }
-                    else if ( e instanceof EarlyExitException ) {
-                            EarlyExitException eee = (EarlyExitException)e;
-                            message.append("required (...)+ loop (decision="+
-                                                               eee.decisionNumber+
-                                                               ") did not match anything; token="+
-                                                               e.token);
-                    }
-                    else if ( e instanceof MismatchedSetException ) {
-                            MismatchedSetException mse = (MismatchedSetException)e;
-                            message.append("mismatched token '"+
-                                                               e.token+
-                                                               "' expecting set "+mse.expecting);
-                    }
-                    else if ( e instanceof MismatchedNotSetException ) {
-                            MismatchedNotSetException mse = (MismatchedNotSetException)e;
-                            message.append("mismatched token '"+
-                                                               e.token+
-                                                               "' expecting set "+mse.expecting);
-                    }
-                    else if ( e instanceof FailedPredicateException ) {
-                            FailedPredicateException fpe = (FailedPredicateException)e;
-                            message.append("rule "+fpe.ruleName+" failed predicate: {"+
-                                                               fpe.predicateText+"}?");
-                    } else if (e instanceof GeneralParseException) {
-    			message.append(" " + e.getMessage());
-    		}
-                   	return message.toString();
-            }   
-            
-            void checkTrailingSemicolon(String text, int line) {
-            	if (text.trim().endsWith( ";" ) ) {
-            		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
-            	}
-            }
-            
-            private String padConsequenceLine(int diff, String cons) {
-            	for(int i = 0; i < diff; i++) {
-            		cons = cons + '\n';
-            	}
-            	return cons;
-            }
-          
-
-
-
     // $ANTLR start opt_eol
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:289:1: opt_eol : ( (';'|EOL))* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:289:1: opt_eol : ( (';'|EOL))* ;
     public void opt_eol() throws RecognitionException {   
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:290:17: ( ( (';'|EOL))* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:290:17: ( (';'|EOL))*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:290:17: ( ( (';'|EOL))* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:290:17: ( (';'|EOL))*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:290:17: ( (';'|EOL))*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:290:17: ( (';'|EOL))*
             loop1:
             do {
                 int alt1=2;
@@ -332,7 +332,7 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:290:18: (';'|EOL)
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:290:18: (';'|EOL)
             	    {
             	    if ( input.LA(1)==EOL||input.LA(1)==15 ) {
             	        input.consume();
@@ -369,7 +369,7 @@
 
 
     // $ANTLR start compilation_unit
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:293:1: compilation_unit : opt_eol prolog (r= rule | q= query | t= template | extra_statement )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:293:1: compilation_unit : opt_eol prolog (r= rule | q= query | t= template | extra_statement )* ;
     public void compilation_unit() throws RecognitionException {   
         RuleDescr r = null;
 
@@ -379,8 +379,8 @@
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:294:17: ( opt_eol prolog (r= rule | q= query | t= template | extra_statement )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:294:17: opt_eol prolog (r= rule | q= query | t= template | extra_statement )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:294:17: ( opt_eol prolog (r= rule | q= query | t= template | extra_statement )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:294:17: opt_eol prolog (r= rule | q= query | t= template | extra_statement )*
             {
             following.push(FOLLOW_opt_eol_in_compilation_unit57);
             opt_eol();
@@ -390,14 +390,14 @@
             prolog();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:296:17: (r= rule | q= query | t= template | extra_statement )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:296:17: (r= rule | q= query | t= template | extra_statement )*
             loop2:
             do {
                 int alt2=5;
                 alt2 = dfa2.predict(input); 
                 switch (alt2) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:296:25: r= rule
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:296:25: r= rule
             	    {
             	    following.push(FOLLOW_rule_in_compilation_unit70);
             	    r=rule();
@@ -408,7 +408,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:297:25: q= query
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:297:25: q= query
             	    {
             	    following.push(FOLLOW_query_in_compilation_unit83);
             	    q=query();
@@ -419,7 +419,7 @@
             	    }
             	    break;
             	case 3 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:298:25: t= template
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:298:25: t= template
             	    {
             	    following.push(FOLLOW_template_in_compilation_unit93);
             	    t=template();
@@ -430,7 +430,7 @@
             	    }
             	    break;
             	case 4 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:299:25: extra_statement
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:299:25: extra_statement
             	    {
             	    following.push(FOLLOW_extra_statement_in_compilation_unit101);
             	    extra_statement();
@@ -461,23 +461,23 @@
 
 
     // $ANTLR start prolog
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:303:1: prolog : opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:303:1: prolog : opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol ;
     public void prolog() throws RecognitionException {   
         String name = null;
 
 
-
-        		String packageName = "";
+        
+        		String packageName = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:307:17: ( opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:307:17: opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:307:17: ( opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:307:17: opt_eol (name= package_statement )? ( extra_statement | expander )* opt_eol
             {
             following.push(FOLLOW_opt_eol_in_prolog125);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:308:17: (name= package_statement )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:308:17: (name= package_statement )?
             int alt3=2;
             int LA3_0 = input.LA(1);
             if ( LA3_0==16 ) {
@@ -494,7 +494,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:308:19: name= package_statement
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:308:19: name= package_statement
                     {
                     following.push(FOLLOW_package_statement_in_prolog133);
                     name=package_statement();
@@ -507,17 +507,17 @@
 
             }
 
-             
-            			this.packageDescr = new PackageDescr( name ); 
+             
+            			this.packageDescr = new PackageDescr( name ); 
             		
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:17: ( extra_statement | expander )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:312:17: ( extra_statement | expander )*
             loop4:
             do {
                 int alt4=3;
                 alt4 = dfa4.predict(input); 
                 switch (alt4) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:312:25: extra_statement
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:312:25: extra_statement
             	    {
             	    following.push(FOLLOW_extra_statement_in_prolog148);
             	    extra_statement();
@@ -527,7 +527,7 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:313:25: expander
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:313:25: expander
             	    {
             	    following.push(FOLLOW_expander_in_prolog154);
             	    expander();
@@ -562,18 +562,18 @@
 
 
     // $ANTLR start package_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:319:1: package_statement returns [String packageName] : 'package' opt_eol name= dotted_name ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:319:1: package_statement returns [String packageName] : 'package' opt_eol name= dotted_name ( ';' )? opt_eol ;
     public String package_statement() throws RecognitionException {   
         String packageName;
         String name = null;
 
 
-
-        		packageName = null;
+        
+        		packageName = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:324:17: ( 'package' opt_eol name= dotted_name ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:324:17: 'package' opt_eol name= dotted_name ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:324:17: ( 'package' opt_eol name= dotted_name ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:324:17: 'package' opt_eol name= dotted_name ( ';' )? opt_eol
             {
             match(input,16,FOLLOW_16_in_package_statement190); 
             following.push(FOLLOW_opt_eol_in_package_statement192);
@@ -584,7 +584,7 @@
             name=dotted_name();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:324:52: ( ';' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:324:52: ( ';' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
             if ( LA5_0==15 ) {
@@ -601,7 +601,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:324:52: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:324:52: ';'
                     {
                     match(input,15,FOLLOW_15_in_package_statement198); 
 
@@ -614,8 +614,8 @@
             opt_eol();
             following.pop();
 
-
-            			packageName = name;
+            
+            			packageName = name;
             		
 
             }
@@ -633,14 +633,14 @@
 
 
     // $ANTLR start import_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:330:1: import_statement : 'import' opt_eol name= import_name ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:330:1: import_statement : 'import' opt_eol name= import_name ( ';' )? opt_eol ;
     public void import_statement() throws RecognitionException {   
         String name = null;
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:331:17: ( 'import' opt_eol name= import_name ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:331:17: 'import' opt_eol name= import_name ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:331:17: ( 'import' opt_eol name= import_name ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:331:17: 'import' opt_eol name= import_name ( ';' )? opt_eol
             {
             match(input,17,FOLLOW_17_in_import_statement217); 
             following.push(FOLLOW_opt_eol_in_import_statement219);
@@ -651,7 +651,7 @@
             name=import_name();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:331:51: ( ';' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:331:51: ( ';' )?
             int alt6=2;
             int LA6_0 = input.LA(1);
             if ( LA6_0==15 ) {
@@ -668,7 +668,7 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:331:51: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:331:51: ';'
                     {
                     match(input,15,FOLLOW_15_in_import_statement225); 
 
@@ -681,9 +681,9 @@
             opt_eol();
             following.pop();
 
-
-            			if (packageDescr != null) 
-            				packageDescr.addImport( name );
+            
+            			if (packageDescr != null) 
+            				packageDescr.addImport( name );
             		
 
             }
@@ -701,14 +701,14 @@
 
 
     // $ANTLR start function_import_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:338:1: function_import_statement : 'import' 'function' opt_eol name= import_name ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:338:1: function_import_statement : 'import' 'function' opt_eol name= import_name ( ';' )? opt_eol ;
     public void function_import_statement() throws RecognitionException {   
         String name = null;
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:339:17: ( 'import' 'function' opt_eol name= import_name ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:339:17: 'import' 'function' opt_eol name= import_name ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:339:17: ( 'import' 'function' opt_eol name= import_name ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:339:17: 'import' 'function' opt_eol name= import_name ( ';' )? opt_eol
             {
             match(input,17,FOLLOW_17_in_function_import_statement244); 
             match(input,18,FOLLOW_18_in_function_import_statement246); 
@@ -720,7 +720,7 @@
             name=import_name();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:339:62: ( ';' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:339:62: ( ';' )?
             int alt7=2;
             int LA7_0 = input.LA(1);
             if ( LA7_0==15 ) {
@@ -737,7 +737,7 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:339:62: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:339:62: ';'
                     {
                     match(input,15,FOLLOW_15_in_function_import_statement254); 
 
@@ -750,9 +750,9 @@
             opt_eol();
             following.pop();
 
-
-            			if (packageDescr != null) 
-            				packageDescr.addFunctionImport( name );
+            
+            			if (packageDescr != null) 
+            				packageDescr.addFunctionImport( name );
             		
 
             }
@@ -770,23 +770,23 @@
 
 
     // $ANTLR start import_name
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:347:1: import_name returns [String name] : id= ID ( '.' id= ID )* (star= '.*' )? ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:347:1: import_name returns [String name] : id= ID ( '.' id= ID )* (star= '.*' )? ;
     public String import_name() throws RecognitionException {   
         String name;
         Token id=null;
         Token star=null;
 
-
-        		name = null;
+        
+        		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:352:17: (id= ID ( '.' id= ID )* (star= '.*' )? )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:352:17: id= ID ( '.' id= ID )* (star= '.*' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:352:17: (id= ID ( '.' id= ID )* (star= '.*' )? )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:352:17: id= ID ( '.' id= ID )* (star= '.*' )?
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_import_name289); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:352:46: ( '.' id= ID )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:352:46: ( '.' id= ID )*
             loop8:
             do {
                 int alt8=2;
@@ -798,7 +798,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:352:48: '.' id= ID
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:352:48: '.' id= ID
             	    {
             	    match(input,19,FOLLOW_19_in_import_name295); 
             	    id=(Token)input.LT(1);
@@ -813,7 +813,7 @@
                 }
             } while (true);
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:352:99: (star= '.*' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:352:99: (star= '.*' )?
             int alt9=2;
             int LA9_0 = input.LA(1);
             if ( LA9_0==20 ) {
@@ -830,7 +830,7 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:352:100: star= '.*'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:352:100: star= '.*'
                     {
                     star=(Token)input.LT(1);
                     match(input,20,FOLLOW_20_in_import_name309); 
@@ -857,20 +857,20 @@
 
 
     // $ANTLR start expander
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:354:1: expander : 'expander' (name= dotted_name )? ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:354:1: expander : 'expander' (name= dotted_name )? ( ';' )? opt_eol ;
     public void expander() throws RecognitionException {   
         String name = null;
 
 
-
-        		String config=null;
+        
+        		String config=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:358:17: ( 'expander' (name= dotted_name )? ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:358:17: 'expander' (name= dotted_name )? ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:358:17: ( 'expander' (name= dotted_name )? ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:358:17: 'expander' (name= dotted_name )? ( ';' )? opt_eol
             {
             match(input,21,FOLLOW_21_in_expander329); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:358:28: (name= dotted_name )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:358:28: (name= dotted_name )?
             int alt10=2;
             int LA10_0 = input.LA(1);
             if ( LA10_0==ID ) {
@@ -887,7 +887,7 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:358:29: name= dotted_name
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:358:29: name= dotted_name
                     {
                     following.push(FOLLOW_dotted_name_in_expander334);
                     name=dotted_name();
@@ -899,7 +899,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:358:48: ( ';' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:358:48: ( ';' )?
             int alt11=2;
             int LA11_0 = input.LA(1);
             if ( LA11_0==15 ) {
@@ -916,7 +916,7 @@
             }
             switch (alt11) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:358:48: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:358:48: ';'
                     {
                     match(input,15,FOLLOW_15_in_expander338); 
 
@@ -929,12 +929,12 @@
             opt_eol();
             following.pop();
 
-
-            			if (expanderResolver == null) 
-            				throw new IllegalArgumentException("Unable to use expander. Make sure a expander or dsl config is being passed to the parser. [ExpanderResolver was not set].");
-            			if ( expander != null )
-            				throw new IllegalArgumentException( "Only one 'expander' statement per file is allowed" );
-            			expander = expanderResolver.get( name, config );
+            
+            			if (expanderResolver == null) 
+            				throw new IllegalArgumentException("Unable to use expander. Make sure a expander or dsl config is being passed to the parser. [ExpanderResolver was not set].");
+            			if ( expander != null )
+            				throw new IllegalArgumentException( "Only one 'expander' statement per file is allowed" );
+            			expander = expanderResolver.get( name, config );
             		
 
             }
@@ -952,17 +952,17 @@
 
 
     // $ANTLR start global
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:368:1: global : 'global' type= dotted_name id= ID ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:368:1: global : 'global' type= dotted_name id= ID ( ';' )? opt_eol ;
     public void global() throws RecognitionException {   
         Token id=null;
         String type = null;
 
 
-
+        
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:372:17: ( 'global' type= dotted_name id= ID ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:372:17: 'global' type= dotted_name id= ID ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:372:17: ( 'global' type= dotted_name id= ID ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:372:17: 'global' type= dotted_name id= ID ( ';' )? opt_eol
             {
             match(input,22,FOLLOW_22_in_global365); 
             following.push(FOLLOW_dotted_name_in_global369);
@@ -971,7 +971,7 @@
 
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_global373); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:372:49: ( ';' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:372:49: ( ';' )?
             int alt12=2;
             int LA12_0 = input.LA(1);
             if ( LA12_0==15 ) {
@@ -988,7 +988,7 @@
             }
             switch (alt12) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:372:49: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:372:49: ';'
                     {
                     match(input,15,FOLLOW_15_in_global375); 
 
@@ -1001,8 +1001,8 @@
             opt_eol();
             following.pop();
 
-
-            			packageDescr.addGlobal( id.getText(), type );
+            
+            			packageDescr.addGlobal( id.getText(), type );
             		
 
             }
@@ -1020,8 +1020,9 @@
 
 
     // $ANTLR start function
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:378:1: function : 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:378:1: function : loc= 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol ;
     public void function() throws RecognitionException {   
+        Token loc=null;
         Token name=null;
         String retType = null;
 
@@ -1032,26 +1033,27 @@
         String body = null;
 
 
-
-        		FunctionDescr f = null;
+        
+        		FunctionDescr f = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:383:17: ( 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:383:17: 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:383:17: (loc= 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:383:17: loc= 'function' opt_eol (retType= dotted_name )? opt_eol name= ID opt_eol '(' opt_eol ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )? ')' opt_eol '{' body= curly_chunk '}' opt_eol
             {
-            match(input,18,FOLLOW_18_in_function402); 
-            following.push(FOLLOW_opt_eol_in_function404);
+            loc=(Token)input.LT(1);
+            match(input,18,FOLLOW_18_in_function404); 
+            following.push(FOLLOW_opt_eol_in_function406);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:383:36: (retType= dotted_name )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:383:40: (retType= dotted_name )?
             int alt13=2;
             alt13 = dfa13.predict(input); 
             switch (alt13) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:383:37: retType= dotted_name
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:383:41: retType= dotted_name
                     {
-                    following.push(FOLLOW_dotted_name_in_function409);
+                    following.push(FOLLOW_dotted_name_in_function411);
                     retType=dotted_name();
                     following.pop();
 
@@ -1061,26 +1063,27 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_function413);
+            following.push(FOLLOW_opt_eol_in_function415);
             opt_eol();
             following.pop();
 
             name=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function417); 
-            following.push(FOLLOW_opt_eol_in_function419);
+            match(input,ID,FOLLOW_ID_in_function419); 
+            following.push(FOLLOW_opt_eol_in_function421);
             opt_eol();
             following.pop();
 
-
-            			//System.err.println( "function :: " + name.getText() );
-            			f = new FunctionDescr( name.getText(), retType );
+            
+            			//System.err.println( "function :: " + name.getText() );
+            			f = new FunctionDescr( name.getText(), retType );
+            			f.setLocation(offset(loc.getLine()), loc.getCharPositionInLine());
             		
-            match(input,23,FOLLOW_23_in_function428); 
-            following.push(FOLLOW_opt_eol_in_function430);
+            match(input,23,FOLLOW_23_in_function430); 
+            following.push(FOLLOW_opt_eol_in_function432);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:389:25: ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:390:25: ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )?
             int alt17=2;
             int LA17_0 = input.LA(1);
             if ( (LA17_0>=EOL && LA17_0<=ID)||LA17_0==15 ) {
@@ -1091,22 +1094,22 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("389:25: ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( \',\' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )?", 17, 0, input);
+                    new NoViableAltException("390:25: ( (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( \',\' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )* )?", 17, 0, input);
 
                 throw nvae;
             }
             switch (alt17) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:389:33: (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:390:33: (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )*
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:389:33: (paramType= dotted_name )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:390:33: (paramType= dotted_name )?
                     int alt14=2;
                     alt14 = dfa14.predict(input); 
                     switch (alt14) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:389:34: paramType= dotted_name
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:390:34: paramType= dotted_name
                             {
-                            following.push(FOLLOW_dotted_name_in_function440);
+                            following.push(FOLLOW_dotted_name_in_function442);
                             paramType=dotted_name();
                             following.pop();
 
@@ -1116,22 +1119,22 @@
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_function444);
+                    following.push(FOLLOW_opt_eol_in_function446);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_argument_name_in_function448);
+                    following.push(FOLLOW_argument_name_in_function450);
                     paramName=argument_name();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_function450);
+                    following.push(FOLLOW_opt_eol_in_function452);
                     opt_eol();
                     following.pop();
 
-
-                    					f.addParameter( paramType, paramName );
+                    
+                    					f.addParameter( paramType, paramName );
                     				
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:393:33: ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:394:33: ( ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol )*
                     loop16:
                     do {
                         int alt16=2;
@@ -1143,21 +1146,21 @@
 
                         switch (alt16) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:393:41: ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:394:41: ',' opt_eol (paramType= dotted_name )? opt_eol paramName= argument_name opt_eol
                     	    {
-                    	    match(input,24,FOLLOW_24_in_function464); 
-                    	    following.push(FOLLOW_opt_eol_in_function466);
+                    	    match(input,24,FOLLOW_24_in_function466); 
+                    	    following.push(FOLLOW_opt_eol_in_function468);
                     	    opt_eol();
                     	    following.pop();
 
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:393:53: (paramType= dotted_name )?
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:394:53: (paramType= dotted_name )?
                     	    int alt15=2;
                     	    alt15 = dfa15.predict(input); 
                     	    switch (alt15) {
                     	        case 1 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:393:54: paramType= dotted_name
+                    	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:394:54: paramType= dotted_name
                     	            {
-                    	            following.push(FOLLOW_dotted_name_in_function471);
+                    	            following.push(FOLLOW_dotted_name_in_function473);
                     	            paramType=dotted_name();
                     	            following.pop();
 
@@ -1167,20 +1170,20 @@
 
                     	    }
 
-                    	    following.push(FOLLOW_opt_eol_in_function475);
+                    	    following.push(FOLLOW_opt_eol_in_function477);
                     	    opt_eol();
                     	    following.pop();
 
-                    	    following.push(FOLLOW_argument_name_in_function479);
+                    	    following.push(FOLLOW_argument_name_in_function481);
                     	    paramName=argument_name();
                     	    following.pop();
 
-                    	    following.push(FOLLOW_opt_eol_in_function481);
+                    	    following.push(FOLLOW_opt_eol_in_function483);
                     	    opt_eol();
                     	    following.pop();
 
-
-                    	    						f.addParameter( paramType, paramName );
+                    	    
+                    	    						f.addParameter( paramType, paramName );
                     	    					
 
                     	    }
@@ -1197,24 +1200,24 @@
 
             }
 
-            match(input,25,FOLLOW_25_in_function506); 
-            following.push(FOLLOW_opt_eol_in_function510);
+            match(input,25,FOLLOW_25_in_function508); 
+            following.push(FOLLOW_opt_eol_in_function512);
             opt_eol();
             following.pop();
 
-            match(input,26,FOLLOW_26_in_function514); 
-            following.push(FOLLOW_curly_chunk_in_function521);
+            match(input,26,FOLLOW_26_in_function516); 
+            following.push(FOLLOW_curly_chunk_in_function523);
             body=curly_chunk();
             following.pop();
 
-
-            				f.setText( body );
+            
+            				f.setText( body );
             			
-            match(input,27,FOLLOW_27_in_function530); 
-
-            			packageDescr.addFunction( f );
+            match(input,27,FOLLOW_27_in_function532); 
+            
+            			packageDescr.addFunction( f );
             		
-            following.push(FOLLOW_opt_eol_in_function538);
+            following.push(FOLLOW_opt_eol_in_function540);
             opt_eol();
             following.pop();
 
@@ -1234,41 +1237,41 @@
 
 
     // $ANTLR start query
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:414:1: query returns [QueryDescr query] : opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:415:1: query returns [QueryDescr query] : opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol ;
     public QueryDescr query() throws RecognitionException {   
         QueryDescr query;
         Token loc=null;
         String queryName = null;
 
 
-
-        		query = null;
+        
+        		query = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:419:17: ( opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:419:17: opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:420:17: ( opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:420:17: opt_eol loc= 'query' queryName= word opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) 'end' opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_query562);
+            following.push(FOLLOW_opt_eol_in_query564);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,28,FOLLOW_28_in_query568); 
-            following.push(FOLLOW_word_in_query572);
+            match(input,28,FOLLOW_28_in_query570); 
+            following.push(FOLLOW_word_in_query574);
             queryName=word();
             following.pop();
 
-            following.push(FOLLOW_opt_eol_in_query574);
+            following.push(FOLLOW_opt_eol_in_query576);
             opt_eol();
             following.pop();
 
-             
-            			query = new QueryDescr( queryName, null ); 
-            			query.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-            			AndDescr lhs = new AndDescr(); query.setLhs( lhs ); 
-            			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+             
+            			query = new QueryDescr( queryName, null ); 
+            			query.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            			AndDescr lhs = new AndDescr(); query.setLhs( lhs ); 
+            			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
             int alt18=2;
             switch ( input.LA(1) ) {
             case 23:
@@ -1281,7 +1284,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 1, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 1, input);
 
                     throw nvae;
                 }
@@ -1296,7 +1299,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 2, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 2, input);
 
                     throw nvae;
                 }
@@ -1311,12 +1314,12 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 3, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 3, input);
 
                     throw nvae;
                 }
                 break;
-            case 54:
+            case 58:
                 int LA18_4 = input.LA(2);
                 if (  expander != null  ) {
                     alt18=1;
@@ -1326,12 +1329,12 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 4, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 4, input);
 
                     throw nvae;
                 }
                 break;
-            case 55:
+            case 59:
                 int LA18_5 = input.LA(2);
                 if (  expander != null  ) {
                     alt18=1;
@@ -1341,12 +1344,12 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 5, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 5, input);
 
                     throw nvae;
                 }
                 break;
-            case 56:
+            case 60:
                 int LA18_6 = input.LA(2);
                 if (  expander != null  ) {
                     alt18=1;
@@ -1356,7 +1359,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 6, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 6, input);
 
                     throw nvae;
                 }
@@ -1371,7 +1374,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 7, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 7, input);
 
                     throw nvae;
                 }
@@ -1386,7 +1389,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 8, input);
+                        new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 8, input);
 
                     throw nvae;
                 }
@@ -1436,10 +1439,10 @@
             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:
@@ -1447,23 +1450,27 @@
             case 65:
             case 66:
             case 67:
+            case 68:
+            case 69:
+            case 70:
+            case 71:
                 alt18=1;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("427:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 0, input);
+                    new NoViableAltException("428:17: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 18, 0, input);
 
                 throw nvae;
             }
 
             switch (alt18) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:428:25: {...}? expander_lhs_block[lhs]
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:429:25: {...}? expander_lhs_block[lhs]
                     {
                     if ( !( expander != null ) ) {
                         throw new FailedPredicateException(input, "query", " expander != null ");
                     }
-                    following.push(FOLLOW_expander_lhs_block_in_query590);
+                    following.push(FOLLOW_expander_lhs_block_in_query592);
                     expander_lhs_block(lhs);
                     following.pop();
 
@@ -1471,9 +1478,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:429:27: normal_lhs_block[lhs]
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:430:27: normal_lhs_block[lhs]
                     {
-                    following.push(FOLLOW_normal_lhs_block_in_query598);
+                    following.push(FOLLOW_normal_lhs_block_in_query600);
                     normal_lhs_block(lhs);
                     following.pop();
 
@@ -1483,8 +1490,8 @@
 
             }
 
-            match(input,29,FOLLOW_29_in_query613); 
-            following.push(FOLLOW_opt_eol_in_query615);
+            match(input,29,FOLLOW_29_in_query615); 
+            following.push(FOLLOW_opt_eol_in_query617);
             opt_eol();
             following.pop();
 
@@ -1504,7 +1511,7 @@
 
 
     // $ANTLR start template
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:435:1: template returns [FactTemplateDescr template] : opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:436:1: template returns [FactTemplateDescr template] : opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL ;
     public FactTemplateDescr template() throws RecognitionException {   
         FactTemplateDescr template;
         Token loc=null;
@@ -1512,27 +1519,27 @@
         FieldTemplateDescr slot = null;
 
 
-
-        		template = null;		
+        
+        		template = null;		
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:17: ( opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:440:17: opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:441:17: ( opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:441:17: opt_eol loc= 'template' templateName= ID EOL (slot= template_slot )+ 'end' EOL
             {
-            following.push(FOLLOW_opt_eol_in_template639);
+            following.push(FOLLOW_opt_eol_in_template641);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,30,FOLLOW_30_in_template645); 
+            match(input,30,FOLLOW_30_in_template647); 
             templateName=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_template649); 
-            match(input,EOL,FOLLOW_EOL_in_template651); 
-
-            			template = new FactTemplateDescr(templateName.getText());
-            			template.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );			
+            match(input,ID,FOLLOW_ID_in_template651); 
+            match(input,EOL,FOLLOW_EOL_in_template653); 
+            
+            			template = new FactTemplateDescr(templateName.getText());
+            			template.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );			
             		
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:446:17: (slot= template_slot )+
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:447:17: (slot= template_slot )+
             int cnt19=0;
             loop19:
             do {
@@ -1545,14 +1552,14 @@
 
                 switch (alt19) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:447:25: slot= template_slot
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:448:25: slot= template_slot
             	    {
-            	    following.push(FOLLOW_template_slot_in_template666);
+            	    following.push(FOLLOW_template_slot_in_template668);
             	    slot=template_slot();
             	    following.pop();
 
-
-            	    				template.addFieldTemplate(slot);
+            	    
+            	    				template.addFieldTemplate(slot);
             	    			
 
             	    }
@@ -1567,8 +1574,8 @@
                 cnt19++;
             } while (true);
 
-            match(input,29,FOLLOW_29_in_template681); 
-            match(input,EOL,FOLLOW_EOL_in_template683); 
+            match(input,29,FOLLOW_29_in_template683); 
+            match(input,EOL,FOLLOW_EOL_in_template685); 
 
             }
 
@@ -1585,26 +1592,26 @@
 
 
     // $ANTLR start template_slot
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:455:1: template_slot returns [FieldTemplateDescr field] : fieldType= dotted_name name= ID (EOL|';');
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:456:1: template_slot returns [FieldTemplateDescr field] : fieldType= dotted_name name= ID (EOL|';');
     public FieldTemplateDescr template_slot() throws RecognitionException {   
         FieldTemplateDescr field;
         Token name=null;
         String fieldType = null;
 
 
-
-        		field = null;
+        
+        		field = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:461:18: (fieldType= dotted_name name= ID (EOL|';'))
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:461:18: fieldType= dotted_name name= ID (EOL|';')
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:462:18: (fieldType= dotted_name name= ID (EOL|';'))
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:462:18: fieldType= dotted_name name= ID (EOL|';')
             {
-            following.push(FOLLOW_dotted_name_in_template_slot715);
+            following.push(FOLLOW_dotted_name_in_template_slot717);
             fieldType=dotted_name();
             following.pop();
 
             name=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_template_slot719); 
+            match(input,ID,FOLLOW_ID_in_template_slot721); 
             if ( input.LA(1)==EOL||input.LA(1)==15 ) {
                 input.consume();
                 errorRecovery=false;
@@ -1612,14 +1619,14 @@
             else {
                 MismatchedSetException mse =
                     new MismatchedSetException(null,input);
-                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_template_slot723);    throw mse;
+                recoverFromMismatchedSet(input,mse,FOLLOW_set_in_template_slot725);    throw mse;
             }
 
-
-            			
-            			
-            			field = new FieldTemplateDescr(name.getText(), fieldType);
-            			field.setLocation( offset(name.getLine()), name.getCharPositionInLine() );
+            
+            			
+            			
+            			field = new FieldTemplateDescr(name.getText(), fieldType);
+            			field.setLocation( offset(name.getLine()), name.getCharPositionInLine() );
             		
 
             }
@@ -1637,7 +1644,7 @@
 
 
     // $ANTLR start rule
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:470:1: rule returns [RuleDescr rule] : opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )? 'end' opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:471:1: rule returns [RuleDescr rule] : opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )? 'end' opt_eol ;
     public RuleDescr rule() throws RecognitionException {   
         RuleDescr rule;
         Token loc=null;
@@ -1645,34 +1652,34 @@
         String ruleName = null;
 
 
-
-        		rule = null;
-        		String consequence = "";
+        
+        		rule = null;
+        		String consequence = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:476:17: ( opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )? 'end' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:476:17: opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )? 'end' opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:477:17: ( opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )? 'end' opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:477:17: opt_eol loc= 'rule' ruleName= word opt_eol ( rule_attributes[rule] )? opt_eol ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )? 'end' opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_rule758);
+            following.push(FOLLOW_opt_eol_in_rule760);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,31,FOLLOW_31_in_rule764); 
-            following.push(FOLLOW_word_in_rule768);
+            match(input,31,FOLLOW_31_in_rule766); 
+            following.push(FOLLOW_word_in_rule770);
             ruleName=word();
             following.pop();
 
-            following.push(FOLLOW_opt_eol_in_rule770);
+            following.push(FOLLOW_opt_eol_in_rule772);
             opt_eol();
             following.pop();
 
-             
-            			debug( "start rule: " + ruleName );
-            			rule = new RuleDescr( ruleName, null ); 
-            			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+             
+            			debug( "start rule: " + ruleName );
+            			rule = new RuleDescr( ruleName, null ); 
+            			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:17: ( rule_attributes[rule] )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:484:17: ( rule_attributes[rule] )?
             int alt20=2;
             switch ( input.LA(1) ) {
             case 33:
@@ -1701,16 +1708,16 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("483:17: ( rule_attributes[rule] )?", 20, 0, input);
+                    new NoViableAltException("484:17: ( rule_attributes[rule] )?", 20, 0, input);
 
                 throw nvae;
             }
 
             switch (alt20) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:483:25: rule_attributes[rule]
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:484:25: rule_attributes[rule]
                     {
-                    following.push(FOLLOW_rule_attributes_in_rule781);
+                    following.push(FOLLOW_rule_attributes_in_rule783);
                     rule_attributes(rule);
                     following.pop();
 
@@ -1720,11 +1727,11 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_rule791);
+            following.push(FOLLOW_opt_eol_in_rule793);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:17: ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:487:17: ( (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )?
             int alt28=2;
             int LA28_0 = input.LA(1);
             if ( LA28_0==EOL||LA28_0==15||LA28_0==32||LA28_0==34 ) {
@@ -1735,15 +1742,15 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("486:17: ( (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )?", 28, 0, input);
+                    new NoViableAltException("487:17: ( (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )? )?", 28, 0, input);
 
                 throw nvae;
             }
             switch (alt28) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:487:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )? ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )?
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:487:18: (loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?
                     int alt23=2;
                     int LA23_0 = input.LA(1);
                     if ( LA23_0==32 ) {
@@ -1754,17 +1761,17 @@
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("486:18: (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?", 23, 0, input);
+                            new NoViableAltException("487:18: (loc= \'when\' ( \':\' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] ) )?", 23, 0, input);
 
                         throw nvae;
                     }
                     switch (alt23) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:25: loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:487:25: loc= 'when' ( ':' )? opt_eol ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
                             {
                             loc=(Token)input.LT(1);
-                            match(input,32,FOLLOW_32_in_rule800); 
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:36: ( ':' )?
+                            match(input,32,FOLLOW_32_in_rule802); 
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:487:36: ( ':' )?
                             int alt21=2;
                             int LA21_0 = input.LA(1);
                             if ( LA21_0==33 ) {
@@ -1777,40 +1784,40 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("486:36: ( \':\' )?", 21, 1, input);
+                                        new NoViableAltException("487:36: ( \':\' )?", 21, 1, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( (LA21_0>=EOL && LA21_0<=32)||(LA21_0>=34 && LA21_0<=67) ) {
+                            else if ( (LA21_0>=EOL && LA21_0<=32)||(LA21_0>=34 && LA21_0<=71) ) {
                                 alt21=2;
                             }
                             else {
                                 NoViableAltException nvae =
-                                    new NoViableAltException("486:36: ( \':\' )?", 21, 0, input);
+                                    new NoViableAltException("487:36: ( \':\' )?", 21, 0, input);
 
                                 throw nvae;
                             }
                             switch (alt21) {
                                 case 1 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:486:36: ':'
+                                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:487:36: ':'
                                     {
-                                    match(input,33,FOLLOW_33_in_rule802); 
+                                    match(input,33,FOLLOW_33_in_rule804); 
 
                                     }
                                     break;
 
                             }
 
-                            following.push(FOLLOW_opt_eol_in_rule805);
+                            following.push(FOLLOW_opt_eol_in_rule807);
                             opt_eol();
                             following.pop();
 
-                             
-                            				AndDescr lhs = new AndDescr(); rule.setLhs( lhs ); 
-                            				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+                             
+                            				AndDescr lhs = new AndDescr(); rule.setLhs( lhs ); 
+                            				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                             			
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )
                             int alt22=2;
                             switch ( input.LA(1) ) {
                             case 23:
@@ -1823,7 +1830,7 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 1, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 1, input);
 
                                     throw nvae;
                                 }
@@ -1838,7 +1845,7 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 2, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 2, input);
 
                                     throw nvae;
                                 }
@@ -1853,7 +1860,7 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 3, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 3, input);
 
                                     throw nvae;
                                 }
@@ -1868,7 +1875,7 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 4, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 4, input);
 
                                     throw nvae;
                                 }
@@ -1883,12 +1890,12 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 5, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 5, input);
 
                                     throw nvae;
                                 }
                                 break;
-                            case 54:
+                            case 58:
                                 int LA22_6 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt22=1;
@@ -1898,12 +1905,12 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 6, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 6, input);
 
                                     throw nvae;
                                 }
                                 break;
-                            case 55:
+                            case 59:
                                 int LA22_7 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt22=1;
@@ -1913,12 +1920,12 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 7, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 7, input);
 
                                     throw nvae;
                                 }
                                 break;
-                            case 56:
+                            case 60:
                                 int LA22_8 = input.LA(2);
                                 if (  expander != null  ) {
                                     alt22=1;
@@ -1928,7 +1935,7 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 8, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 8, input);
 
                                     throw nvae;
                                 }
@@ -1943,7 +1950,7 @@
                                 }
                                 else {
                                     NoViableAltException nvae =
-                                        new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 9, input);
+                                        new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 9, input);
 
                                     throw nvae;
                                 }
@@ -1992,10 +1999,10 @@
                             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:
@@ -2003,23 +2010,27 @@
                             case 65:
                             case 66:
                             case 67:
+                            case 68:
+                            case 69:
+                            case 70:
+                            case 71:
                                 alt22=1;
                                 break;
                             default:
                                 NoViableAltException nvae =
-                                    new NoViableAltException("491:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 0, input);
+                                    new NoViableAltException("492:25: ({...}? expander_lhs_block[lhs] | normal_lhs_block[lhs] )", 22, 0, input);
 
                                 throw nvae;
                             }
 
                             switch (alt22) {
                                 case 1 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:492:33: {...}? expander_lhs_block[lhs]
+                                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:493:33: {...}? expander_lhs_block[lhs]
                                     {
                                     if ( !( expander != null ) ) {
                                         throw new FailedPredicateException(input, "rule", " expander != null ");
                                     }
-                                    following.push(FOLLOW_expander_lhs_block_in_rule823);
+                                    following.push(FOLLOW_expander_lhs_block_in_rule825);
                                     expander_lhs_block(lhs);
                                     following.pop();
 
@@ -2027,9 +2038,9 @@
                                     }
                                     break;
                                 case 2 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:493:35: normal_lhs_block[lhs]
+                                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:494:35: normal_lhs_block[lhs]
                                     {
-                                    following.push(FOLLOW_normal_lhs_block_in_rule832);
+                                    following.push(FOLLOW_normal_lhs_block_in_rule834);
                                     normal_lhs_block(lhs);
                                     following.pop();
 
@@ -2045,7 +2056,7 @@
 
                     }
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:497:17: ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:498:17: ( opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )?
                     int alt27=2;
                     int LA27_0 = input.LA(1);
                     if ( LA27_0==EOL||LA27_0==15||LA27_0==34 ) {
@@ -2056,52 +2067,52 @@
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("497:17: ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )?", 27, 0, input);
+                            new NoViableAltException("498:17: ( opt_eol loc= \'then\' ( \':\' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )* )?", 27, 0, input);
 
                         throw nvae;
                     }
                     switch (alt27) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:497:19: opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )*
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:498:19: opt_eol loc= 'then' ( ':' )? opt_eol ( options {greedy=false; } : any= . ( EOL )* )*
                             {
-                            following.push(FOLLOW_opt_eol_in_rule855);
+                            following.push(FOLLOW_opt_eol_in_rule857);
                             opt_eol();
                             following.pop();
 
                             loc=(Token)input.LT(1);
-                            match(input,34,FOLLOW_34_in_rule859); 
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:497:38: ( ':' )?
+                            match(input,34,FOLLOW_34_in_rule861); 
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:498:38: ( ':' )?
                             int alt24=2;
                             int LA24_0 = input.LA(1);
                             if ( LA24_0==33 ) {
                                 alt24=1;
                             }
-                            else if ( (LA24_0>=EOL && LA24_0<=32)||(LA24_0>=34 && LA24_0<=67) ) {
+                            else if ( (LA24_0>=EOL && LA24_0<=32)||(LA24_0>=34 && LA24_0<=71) ) {
                                 alt24=2;
                             }
                             else {
                                 NoViableAltException nvae =
-                                    new NoViableAltException("497:38: ( \':\' )?", 24, 0, input);
+                                    new NoViableAltException("498:38: ( \':\' )?", 24, 0, input);
 
                                 throw nvae;
                             }
                             switch (alt24) {
                                 case 1 :
-                                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:497:38: ':'
+                                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:498:38: ':'
                                     {
-                                    match(input,33,FOLLOW_33_in_rule861); 
+                                    match(input,33,FOLLOW_33_in_rule863); 
 
                                     }
                                     break;
 
                             }
 
-                            following.push(FOLLOW_opt_eol_in_rule865);
+                            following.push(FOLLOW_opt_eol_in_rule867);
                             opt_eol();
                             following.pop();
 
                             int prevLine = loc.getLine()+1; 
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:499:25: ( options {greedy=false; } : any= . ( EOL )* )*
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:500:25: ( options {greedy=false; } : any= . ( EOL )* )*
                             loop26:
                             do {
                                 int alt26=2;
@@ -2109,18 +2120,18 @@
                                 if ( LA26_0==29 ) {
                                     alt26=2;
                                 }
-                                else if ( (LA26_0>=EOL && LA26_0<=28)||(LA26_0>=30 && LA26_0<=67) ) {
+                                else if ( (LA26_0>=EOL && LA26_0<=28)||(LA26_0>=30 && LA26_0<=71) ) {
                                     alt26=1;
                                 }
 
 
                                 switch (alt26) {
                             	case 1 :
-                            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:499:52: any= . ( EOL )*
+                            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:500:52: any= . ( EOL )*
                             	    {
                             	    any=(Token)input.LT(1);
                             	    matchAny(input); 
-                            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:499:58: ( EOL )*
+                            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:500:58: ( EOL )*
                             	    loop25:
                             	    do {
                             	        int alt25=2;
@@ -2132,9 +2143,9 @@
 
                             	        switch (alt25) {
                             	    	case 1 :
-                            	    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:499:59: EOL
+                            	    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:500:59: EOL
                             	    	    {
-                            	    	    match(input,EOL,FOLLOW_EOL_in_rule892); 
+                            	    	    match(input,EOL,FOLLOW_EOL_in_rule894); 
 
                             	    	    }
                             	    	    break;
@@ -2144,17 +2155,17 @@
                             	        }
                             	    } while (true);
 
-
-                            	    					/*
-                            	    					if (prevLine = 0) { prevLine = any.getLine() ;}
-                            	    					
-                            	    					int lineDif = any.getLine() - prevLine - 1;
-                            	    					consequence = padConsequenceLines(lineDif, consequence);
-                            	    					*/
-                            	    					int diff = any.getLine() - prevLine;
-                            	    					consequence = padConsequenceLine(diff, consequence);
-                            	    					consequence = consequence + " " + any.getText();
-                            	    					prevLine = any.getLine();
+                            	    
+                            	    					/*
+                            	    					if (prevLine = 0) { prevLine = any.getLine() ;}
+                            	    					
+                            	    					int lineDif = any.getLine() - prevLine - 1;
+                            	    					consequence = padConsequenceLines(lineDif, consequence);
+                            	    					*/
+                            	    					int diff = any.getLine() - prevLine;
+                            	    					consequence = padConsequenceLine(diff, consequence);
+                            	    					consequence = consequence + " " + any.getText();
+                            	    					prevLine = any.getLine();
                             	    				
 
                             	    }
@@ -2165,14 +2176,14 @@
                                 }
                             } while (true);
 
-
-                            				if ( expander != null ) {
-                            					String expanded = runThenExpander( consequence, offset(loc.getLine()) );
-                            					rule.setConsequence( expanded );
-                            				} else { 
-                            					rule.setConsequence( consequence ); 
-                            				}
-                            				rule.setConsequenceLocation(offset(loc.getLine()), loc.getCharPositionInLine());
+                            
+                            				if ( expander != null ) {
+                            					String expanded = runThenExpander( consequence, offset(loc.getLine()) );
+                            					rule.setConsequence( expanded );
+                            				} else { 
+                            					rule.setConsequence( consequence ); 
+                            				}
+                            				rule.setConsequenceLocation(offset(loc.getLine()), loc.getCharPositionInLine());
                             			
 
                             }
@@ -2186,13 +2197,13 @@
 
             }
 
-            match(input,29,FOLLOW_29_in_rule922); 
-            following.push(FOLLOW_opt_eol_in_rule924);
+            match(input,29,FOLLOW_29_in_rule924); 
+            following.push(FOLLOW_opt_eol_in_rule926);
             opt_eol();
             following.pop();
 
-
-            			debug( "end rule: " + ruleName );
+            
+            			debug( "end rule: " + ruleName );
             		
 
             }
@@ -2210,13 +2221,13 @@
 
 
     // $ANTLR start extra_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:529:1: extra_statement : ( import_statement | function_import_statement | global | function ) ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:530:1: extra_statement : ( import_statement | function_import_statement | global | function ) ;
     public void extra_statement() throws RecognitionException {   
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:531:9: ( ( import_statement | function_import_statement | global | function ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:531:9: ( import_statement | function_import_statement | global | function )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:532:9: ( ( import_statement | function_import_statement | global | function ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:532:9: ( import_statement | function_import_statement | global | function )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:531:9: ( import_statement | function_import_statement | global | function )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:532:9: ( import_statement | function_import_statement | global | function )
             int alt29=4;
             switch ( input.LA(1) ) {
             case 17:
@@ -2229,7 +2240,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("531:9: ( import_statement | function_import_statement | global | function )", 29, 1, input);
+                        new NoViableAltException("532:9: ( import_statement | function_import_statement | global | function )", 29, 1, input);
 
                     throw nvae;
                 }
@@ -2242,16 +2253,16 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("531:9: ( import_statement | function_import_statement | global | function )", 29, 0, input);
+                    new NoViableAltException("532:9: ( import_statement | function_import_statement | global | function )", 29, 0, input);
 
                 throw nvae;
             }
 
             switch (alt29) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:531:17: import_statement
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:532:17: import_statement
                     {
-                    following.push(FOLLOW_import_statement_in_extra_statement944);
+                    following.push(FOLLOW_import_statement_in_extra_statement946);
                     import_statement();
                     following.pop();
 
@@ -2259,9 +2270,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:532:17: function_import_statement
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:533:17: function_import_statement
                     {
-                    following.push(FOLLOW_function_import_statement_in_extra_statement949);
+                    following.push(FOLLOW_function_import_statement_in_extra_statement951);
                     function_import_statement();
                     following.pop();
 
@@ -2269,9 +2280,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:533:17: global
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:534:17: global
                     {
-                    following.push(FOLLOW_global_in_extra_statement954);
+                    following.push(FOLLOW_global_in_extra_statement956);
                     global();
                     following.pop();
 
@@ -2279,9 +2290,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:534:17: function
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:535:17: function
                     {
-                    following.push(FOLLOW_function_in_extra_statement959);
+                    following.push(FOLLOW_function_in_extra_statement961);
                     function();
                     following.pop();
 
@@ -2307,16 +2318,16 @@
 
 
     // $ANTLR start rule_attributes
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:538:1: rule_attributes[RuleDescr rule] : ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:539:1: rule_attributes[RuleDescr rule] : ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* ;
     public void rule_attributes(RuleDescr rule) throws RecognitionException {   
         AttributeDescr a = null;
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:540:25: ( ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:540:25: ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:541:25: ( ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:541:25: ( 'attributes' )? ( ':' )? opt_eol ( ( ',' )? a= rule_attribute opt_eol )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:540:25: ( 'attributes' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:541:25: ( 'attributes' )?
             int alt30=2;
             int LA30_0 = input.LA(1);
             if ( LA30_0==35 ) {
@@ -2327,22 +2338,22 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("540:25: ( \'attributes\' )?", 30, 0, input);
+                    new NoViableAltException("541:25: ( \'attributes\' )?", 30, 0, input);
 
                 throw nvae;
             }
             switch (alt30) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:540:25: 'attributes'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:541:25: 'attributes'
                     {
-                    match(input,35,FOLLOW_35_in_rule_attributes978); 
+                    match(input,35,FOLLOW_35_in_rule_attributes980); 
 
                     }
                     break;
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:540:39: ( ':' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:541:39: ( ':' )?
             int alt31=2;
             int LA31_0 = input.LA(1);
             if ( LA31_0==33 ) {
@@ -2353,26 +2364,26 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("540:39: ( \':\' )?", 31, 0, input);
+                    new NoViableAltException("541:39: ( \':\' )?", 31, 0, input);
 
                 throw nvae;
             }
             switch (alt31) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:540:39: ':'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:541:39: ':'
                     {
-                    match(input,33,FOLLOW_33_in_rule_attributes981); 
+                    match(input,33,FOLLOW_33_in_rule_attributes983); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_rule_attributes984);
+            following.push(FOLLOW_opt_eol_in_rule_attributes986);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:541:25: ( ( ',' )? a= rule_attribute opt_eol )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:542:25: ( ( ',' )? a= rule_attribute opt_eol )*
             loop33:
             do {
                 int alt33=2;
@@ -2384,9 +2395,9 @@
 
                 switch (alt33) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:541:33: ( ',' )? a= rule_attribute opt_eol
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:542:33: ( ',' )? a= rule_attribute opt_eol
             	    {
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:541:33: ( ',' )?
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:542:33: ( ',' )?
             	    int alt32=2;
             	    int LA32_0 = input.LA(1);
             	    if ( LA32_0==24 ) {
@@ -2397,31 +2408,31 @@
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("541:33: ( \',\' )?", 32, 0, input);
+            	            new NoViableAltException("542:33: ( \',\' )?", 32, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt32) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:541:33: ','
+            	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:542:33: ','
             	            {
-            	            match(input,24,FOLLOW_24_in_rule_attributes991); 
+            	            match(input,24,FOLLOW_24_in_rule_attributes993); 
 
             	            }
             	            break;
 
             	    }
 
-            	    following.push(FOLLOW_rule_attribute_in_rule_attributes996);
+            	    following.push(FOLLOW_rule_attribute_in_rule_attributes998);
             	    a=rule_attribute();
             	    following.pop();
 
-            	    following.push(FOLLOW_opt_eol_in_rule_attributes998);
+            	    following.push(FOLLOW_opt_eol_in_rule_attributes1000);
             	    opt_eol();
             	    following.pop();
 
-
-            	    					rule.addAttribute( a );
+            	    
+            	    					rule.addAttribute( a );
             	    				
 
             	    }
@@ -2448,17 +2459,17 @@
 
 
     // $ANTLR start rule_attribute
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:548:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:549:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );
     public AttributeDescr rule_attribute() throws RecognitionException {   
         AttributeDescr d;
         AttributeDescr a = null;
 
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:553:25: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:554:25: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus )
             int alt34=6;
             switch ( input.LA(1) ) {
             case 36:
@@ -2481,16 +2492,16 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("548:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );", 34, 0, input);
+                    new NoViableAltException("549:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus );", 34, 0, input);
 
                 throw nvae;
             }
 
             switch (alt34) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:553:25: a= salience
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:554:25: a= salience
                     {
-                    following.push(FOLLOW_salience_in_rule_attribute1037);
+                    following.push(FOLLOW_salience_in_rule_attribute1039);
                     a=salience();
                     following.pop();
 
@@ -2499,9 +2510,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:554:25: a= no_loop
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:555:25: a= no_loop
                     {
-                    following.push(FOLLOW_no_loop_in_rule_attribute1047);
+                    following.push(FOLLOW_no_loop_in_rule_attribute1049);
                     a=no_loop();
                     following.pop();
 
@@ -2510,9 +2521,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:555:25: a= agenda_group
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:556:25: a= agenda_group
                     {
-                    following.push(FOLLOW_agenda_group_in_rule_attribute1058);
+                    following.push(FOLLOW_agenda_group_in_rule_attribute1060);
                     a=agenda_group();
                     following.pop();
 
@@ -2521,9 +2532,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:556:25: a= duration
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:557:25: a= duration
                     {
-                    following.push(FOLLOW_duration_in_rule_attribute1071);
+                    following.push(FOLLOW_duration_in_rule_attribute1073);
                     a=duration();
                     following.pop();
 
@@ -2532,9 +2543,9 @@
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:557:25: a= activation_group
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:558:25: a= activation_group
                     {
-                    following.push(FOLLOW_activation_group_in_rule_attribute1085);
+                    following.push(FOLLOW_activation_group_in_rule_attribute1087);
                     a=activation_group();
                     following.pop();
 
@@ -2543,9 +2554,9 @@
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:558:25: a= auto_focus
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:559:25: a= auto_focus
                     {
-                    following.push(FOLLOW_auto_focus_in_rule_attribute1096);
+                    following.push(FOLLOW_auto_focus_in_rule_attribute1098);
                     a=auto_focus();
                     following.pop();
 
@@ -2568,28 +2579,28 @@
 
 
     // $ANTLR start salience
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:562:1: salience returns [AttributeDescr d ] : loc= 'salience' opt_eol i= INT ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:563:1: salience returns [AttributeDescr d ] : loc= 'salience' opt_eol i= INT ( ';' )? opt_eol ;
     public AttributeDescr salience() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
         Token i=null;
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:567:17: (loc= 'salience' opt_eol i= INT ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:567:17: loc= 'salience' opt_eol i= INT ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:568:17: (loc= 'salience' opt_eol i= INT ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:568:17: loc= 'salience' opt_eol i= INT ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,36,FOLLOW_36_in_salience1129); 
-            following.push(FOLLOW_opt_eol_in_salience1131);
+            match(input,36,FOLLOW_36_in_salience1131); 
+            following.push(FOLLOW_opt_eol_in_salience1133);
             opt_eol();
             following.pop();
 
             i=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_salience1135); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:567:46: ( ';' )?
+            match(input,INT,FOLLOW_INT_in_salience1137); 
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:568:46: ( ';' )?
             int alt35=2;
             int LA35_0 = input.LA(1);
             if ( LA35_0==15 ) {
@@ -2600,28 +2611,28 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("567:46: ( \';\' )?", 35, 0, input);
+                    new NoViableAltException("568:46: ( \';\' )?", 35, 0, input);
 
                 throw nvae;
             }
             switch (alt35) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:567:46: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:568:46: ';'
                     {
-                    match(input,15,FOLLOW_15_in_salience1137); 
+                    match(input,15,FOLLOW_15_in_salience1139); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_salience1140);
+            following.push(FOLLOW_opt_eol_in_salience1142);
             opt_eol();
             following.pop();
 
-
-            			d = new AttributeDescr( "salience", i.getText() );
-            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            
+            			d = new AttributeDescr( "salience", i.getText() );
+            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
 
             }
@@ -2639,17 +2650,17 @@
 
 
     // $ANTLR start no_loop
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:574:1: no_loop returns [AttributeDescr d] : ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:575:1: no_loop returns [AttributeDescr d] : ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) );
     public AttributeDescr no_loop() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
         Token t=null;
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:579:17: ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:580:17: ( (loc= 'no-loop' opt_eol ( ';' )? opt_eol ) | (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol ) )
             int alt38=2;
             int LA38_0 = input.LA(1);
             if ( LA38_0==37 ) {
@@ -2662,31 +2673,31 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("574:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 38, 1, input);
+                        new NoViableAltException("575:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 38, 1, input);
 
                     throw nvae;
                 }
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("574:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 38, 0, input);
+                    new NoViableAltException("575:1: no_loop returns [AttributeDescr d] : ( (loc= \'no-loop\' opt_eol ( \';\' )? opt_eol ) | (loc= \'no-loop\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 38, 0, input);
 
                 throw nvae;
             }
             switch (alt38) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:579:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:580:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:579:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:580:25: loc= 'no-loop' opt_eol ( ';' )? opt_eol
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:580:17: (loc= 'no-loop' opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:581:25: loc= 'no-loop' opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,37,FOLLOW_37_in_no_loop1175); 
-                    following.push(FOLLOW_opt_eol_in_no_loop1177);
+                    match(input,37,FOLLOW_37_in_no_loop1177); 
+                    following.push(FOLLOW_opt_eol_in_no_loop1179);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:580:47: ( ';' )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:581:47: ( ';' )?
                     int alt36=2;
                     int LA36_0 = input.LA(1);
                     if ( LA36_0==15 ) {
@@ -2697,28 +2708,28 @@
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("580:47: ( \';\' )?", 36, 0, input);
+                            new NoViableAltException("581:47: ( \';\' )?", 36, 0, input);
 
                         throw nvae;
                     }
                     switch (alt36) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:580:47: ';'
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:581:47: ';'
                             {
-                            match(input,15,FOLLOW_15_in_no_loop1179); 
+                            match(input,15,FOLLOW_15_in_no_loop1181); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_no_loop1182);
+                    following.push(FOLLOW_opt_eol_in_no_loop1184);
                     opt_eol();
                     following.pop();
 
-
-                    				d = new AttributeDescr( "no-loop", "true" );
-                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+                    
+                    				d = new AttributeDescr( "no-loop", "true" );
+                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                     			
 
                     }
@@ -2727,20 +2738,20 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:587:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:588:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:587:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:588:25: loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:588:17: (loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:589:25: loc= 'no-loop' t= BOOL opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,37,FOLLOW_37_in_no_loop1207); 
+                    match(input,37,FOLLOW_37_in_no_loop1209); 
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1211); 
-                    following.push(FOLLOW_opt_eol_in_no_loop1213);
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1213); 
+                    following.push(FOLLOW_opt_eol_in_no_loop1215);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:588:54: ( ';' )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:589:54: ( ';' )?
                     int alt37=2;
                     int LA37_0 = input.LA(1);
                     if ( LA37_0==15 ) {
@@ -2751,28 +2762,28 @@
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("588:54: ( \';\' )?", 37, 0, input);
+                            new NoViableAltException("589:54: ( \';\' )?", 37, 0, input);
 
                         throw nvae;
                     }
                     switch (alt37) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:588:54: ';'
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:589:54: ';'
                             {
-                            match(input,15,FOLLOW_15_in_no_loop1215); 
+                            match(input,15,FOLLOW_15_in_no_loop1217); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_no_loop1218);
+                    following.push(FOLLOW_opt_eol_in_no_loop1220);
                     opt_eol();
                     following.pop();
 
-
-                    				d = new AttributeDescr( "no-loop", t.getText() );
-                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+                    
+                    				d = new AttributeDescr( "no-loop", t.getText() );
+                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                     			
 
                     }
@@ -2795,17 +2806,17 @@
 
 
     // $ANTLR start auto_focus
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:598:1: auto_focus returns [AttributeDescr d] : ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:599:1: auto_focus returns [AttributeDescr d] : ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) );
     public AttributeDescr auto_focus() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
         Token t=null;
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:603:17: ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:604:17: ( (loc= 'auto-focus' opt_eol ( ';' )? opt_eol ) | (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol ) )
             int alt41=2;
             int LA41_0 = input.LA(1);
             if ( LA41_0==38 ) {
@@ -2818,31 +2829,31 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("598:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 41, 1, input);
+                        new NoViableAltException("599:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 41, 1, input);
 
                     throw nvae;
                 }
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("598:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 41, 0, input);
+                    new NoViableAltException("599:1: auto_focus returns [AttributeDescr d] : ( (loc= \'auto-focus\' opt_eol ( \';\' )? opt_eol ) | (loc= \'auto-focus\' t= BOOL opt_eol ( \';\' )? opt_eol ) );", 41, 0, input);
 
                 throw nvae;
             }
             switch (alt41) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:603:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:604:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:603:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:604:25: loc= 'auto-focus' opt_eol ( ';' )? opt_eol
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:604:17: (loc= 'auto-focus' opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:605:25: loc= 'auto-focus' opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,38,FOLLOW_38_in_auto_focus1264); 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1266);
+                    match(input,38,FOLLOW_38_in_auto_focus1266); 
+                    following.push(FOLLOW_opt_eol_in_auto_focus1268);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:604:50: ( ';' )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:605:50: ( ';' )?
                     int alt39=2;
                     int LA39_0 = input.LA(1);
                     if ( LA39_0==15 ) {
@@ -2853,28 +2864,28 @@
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("604:50: ( \';\' )?", 39, 0, input);
+                            new NoViableAltException("605:50: ( \';\' )?", 39, 0, input);
 
                         throw nvae;
                     }
                     switch (alt39) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:604:50: ';'
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:605:50: ';'
                             {
-                            match(input,15,FOLLOW_15_in_auto_focus1268); 
+                            match(input,15,FOLLOW_15_in_auto_focus1270); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1271);
+                    following.push(FOLLOW_opt_eol_in_auto_focus1273);
                     opt_eol();
                     following.pop();
 
-
-                    				d = new AttributeDescr( "auto-focus", "true" );
-                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+                    
+                    				d = new AttributeDescr( "auto-focus", "true" );
+                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                     			
 
                     }
@@ -2883,20 +2894,20 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:611:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:612:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:611:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:612:25: loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:612:17: (loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:613:25: loc= 'auto-focus' t= BOOL opt_eol ( ';' )? opt_eol
                     {
                     loc=(Token)input.LT(1);
-                    match(input,38,FOLLOW_38_in_auto_focus1296); 
+                    match(input,38,FOLLOW_38_in_auto_focus1298); 
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1300); 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1302);
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1302); 
+                    following.push(FOLLOW_opt_eol_in_auto_focus1304);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:612:57: ( ';' )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:613:57: ( ';' )?
                     int alt40=2;
                     int LA40_0 = input.LA(1);
                     if ( LA40_0==15 ) {
@@ -2907,28 +2918,28 @@
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("612:57: ( \';\' )?", 40, 0, input);
+                            new NoViableAltException("613:57: ( \';\' )?", 40, 0, input);
 
                         throw nvae;
                     }
                     switch (alt40) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:612:57: ';'
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:613:57: ';'
                             {
-                            match(input,15,FOLLOW_15_in_auto_focus1304); 
+                            match(input,15,FOLLOW_15_in_auto_focus1306); 
 
                             }
                             break;
 
                     }
 
-                    following.push(FOLLOW_opt_eol_in_auto_focus1307);
+                    following.push(FOLLOW_opt_eol_in_auto_focus1309);
                     opt_eol();
                     following.pop();
 
-
-                    				d = new AttributeDescr( "auto-focus", t.getText() );
-                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+                    
+                    				d = new AttributeDescr( "auto-focus", t.getText() );
+                    				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
                     			
 
                     }
@@ -2951,28 +2962,28 @@
 
 
     // $ANTLR start activation_group
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:622:1: activation_group returns [AttributeDescr d] : loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:623:1: activation_group returns [AttributeDescr d] : loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol ;
     public AttributeDescr activation_group() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
         Token name=null;
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:627:17: (loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:627:17: loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:628:17: (loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:628:17: loc= 'activation-group' opt_eol name= STRING ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,39,FOLLOW_39_in_activation_group1349); 
-            following.push(FOLLOW_opt_eol_in_activation_group1351);
+            match(input,39,FOLLOW_39_in_activation_group1351); 
+            following.push(FOLLOW_opt_eol_in_activation_group1353);
             opt_eol();
             following.pop();
 
             name=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1355); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:627:60: ( ';' )?
+            match(input,STRING,FOLLOW_STRING_in_activation_group1357); 
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:628:60: ( ';' )?
             int alt42=2;
             int LA42_0 = input.LA(1);
             if ( LA42_0==15 ) {
@@ -2983,28 +2994,28 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("627:60: ( \';\' )?", 42, 0, input);
+                    new NoViableAltException("628:60: ( \';\' )?", 42, 0, input);
 
                 throw nvae;
             }
             switch (alt42) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:627:60: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:628:60: ';'
                     {
-                    match(input,15,FOLLOW_15_in_activation_group1357); 
+                    match(input,15,FOLLOW_15_in_activation_group1359); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_activation_group1360);
+            following.push(FOLLOW_opt_eol_in_activation_group1362);
             opt_eol();
             following.pop();
 
-
-            			d = new AttributeDescr( "activation-group", getString( name ) );
-            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            
+            			d = new AttributeDescr( "activation-group", getString( name ) );
+            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
 
             }
@@ -3022,28 +3033,28 @@
 
 
     // $ANTLR start agenda_group
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:634:1: agenda_group returns [AttributeDescr d] : loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:635:1: agenda_group returns [AttributeDescr d] : loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol ;
     public AttributeDescr agenda_group() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
         Token name=null;
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:639:17: (loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:639:17: loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:640:17: (loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:640:17: loc= 'agenda-group' opt_eol name= STRING ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,40,FOLLOW_40_in_agenda_group1389); 
-            following.push(FOLLOW_opt_eol_in_agenda_group1391);
+            match(input,40,FOLLOW_40_in_agenda_group1391); 
+            following.push(FOLLOW_opt_eol_in_agenda_group1393);
             opt_eol();
             following.pop();
 
             name=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1395); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:639:56: ( ';' )?
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1397); 
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:640:56: ( ';' )?
             int alt43=2;
             int LA43_0 = input.LA(1);
             if ( LA43_0==15 ) {
@@ -3054,28 +3065,28 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("639:56: ( \';\' )?", 43, 0, input);
+                    new NoViableAltException("640:56: ( \';\' )?", 43, 0, input);
 
                 throw nvae;
             }
             switch (alt43) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:639:56: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:640:56: ';'
                     {
-                    match(input,15,FOLLOW_15_in_agenda_group1397); 
+                    match(input,15,FOLLOW_15_in_agenda_group1399); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_agenda_group1400);
+            following.push(FOLLOW_opt_eol_in_agenda_group1402);
             opt_eol();
             following.pop();
 
-
-            			d = new AttributeDescr( "agenda-group", getString( name ) );
-            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            
+            			d = new AttributeDescr( "agenda-group", getString( name ) );
+            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
 
             }
@@ -3093,28 +3104,28 @@
 
 
     // $ANTLR start duration
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:647:1: duration returns [AttributeDescr d] : loc= 'duration' opt_eol i= INT ( ';' )? opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:648:1: duration returns [AttributeDescr d] : loc= 'duration' opt_eol i= INT ( ';' )? opt_eol ;
     public AttributeDescr duration() throws RecognitionException {   
         AttributeDescr d;
         Token loc=null;
         Token i=null;
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:652:17: (loc= 'duration' opt_eol i= INT ( ';' )? opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:652:17: loc= 'duration' opt_eol i= INT ( ';' )? opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:653:17: (loc= 'duration' opt_eol i= INT ( ';' )? opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:653:17: loc= 'duration' opt_eol i= INT ( ';' )? opt_eol
             {
             loc=(Token)input.LT(1);
-            match(input,41,FOLLOW_41_in_duration1432); 
-            following.push(FOLLOW_opt_eol_in_duration1434);
+            match(input,41,FOLLOW_41_in_duration1434); 
+            following.push(FOLLOW_opt_eol_in_duration1436);
             opt_eol();
             following.pop();
 
             i=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1438); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:652:46: ( ';' )?
+            match(input,INT,FOLLOW_INT_in_duration1440); 
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:653:46: ( ';' )?
             int alt44=2;
             int LA44_0 = input.LA(1);
             if ( LA44_0==15 ) {
@@ -3125,28 +3136,28 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("652:46: ( \';\' )?", 44, 0, input);
+                    new NoViableAltException("653:46: ( \';\' )?", 44, 0, input);
 
                 throw nvae;
             }
             switch (alt44) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:652:46: ';'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:653:46: ';'
                     {
-                    match(input,15,FOLLOW_15_in_duration1440); 
+                    match(input,15,FOLLOW_15_in_duration1442); 
 
                     }
                     break;
 
             }
 
-            following.push(FOLLOW_opt_eol_in_duration1443);
+            following.push(FOLLOW_opt_eol_in_duration1445);
             opt_eol();
             following.pop();
 
-
-            			d = new AttributeDescr( "duration", i.getText() );
-            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            
+            			d = new AttributeDescr( "duration", i.getText() );
+            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
 
             }
@@ -3164,34 +3175,34 @@
 
 
     // $ANTLR start normal_lhs_block
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:660:1: normal_lhs_block[AndDescr descrs] : (d= lhs opt_eol )* opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:661:1: normal_lhs_block[AndDescr descrs] : (d= lhs opt_eol )* opt_eol ;
     public void normal_lhs_block(AndDescr descrs) throws RecognitionException {   
         PatternDescr d = null;
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:662:17: ( (d= lhs opt_eol )* opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:662:17: (d= lhs opt_eol )* opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:663:17: ( (d= lhs opt_eol )* opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:663:17: (d= lhs opt_eol )* opt_eol
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:662:17: (d= lhs opt_eol )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:663:17: (d= lhs opt_eol )*
             loop45:
             do {
                 int alt45=2;
                 int LA45_0 = input.LA(1);
-                if ( LA45_0==ID||LA45_0==23||(LA45_0>=54 && LA45_0<=56) ) {
+                if ( LA45_0==ID||LA45_0==23||(LA45_0>=58 && LA45_0<=60) ) {
                     alt45=1;
                 }
 
 
                 switch (alt45) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:662:25: d= lhs opt_eol
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:663:25: d= lhs opt_eol
             	    {
-            	    following.push(FOLLOW_lhs_in_normal_lhs_block1469);
+            	    following.push(FOLLOW_lhs_in_normal_lhs_block1471);
             	    d=lhs();
             	    following.pop();
 
-            	    following.push(FOLLOW_opt_eol_in_normal_lhs_block1471);
+            	    following.push(FOLLOW_opt_eol_in_normal_lhs_block1473);
             	    opt_eol();
             	    following.pop();
 
@@ -3205,7 +3216,7 @@
                 }
             } while (true);
 
-            following.push(FOLLOW_opt_eol_in_normal_lhs_block1483);
+            following.push(FOLLOW_opt_eol_in_normal_lhs_block1485);
             opt_eol();
             following.pop();
 
@@ -3225,22 +3236,22 @@
 
 
     // $ANTLR start expander_lhs_block
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:670:1: expander_lhs_block[AndDescr descrs] : ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:671:1: expander_lhs_block[AndDescr descrs] : ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )* ;
     public void expander_lhs_block(AndDescr descrs) throws RecognitionException {   
         Token loc=null;
         String text = null;
 
 
-
-        		String lhsBlock = null;
-        		String eol = System.getProperty( "line.separator" );
-        		List constraints = null;
+        
+        		String lhsBlock = null;
+        		String eol = System.getProperty( "line.separator" );
+        		List constraints = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:677:17: ( ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:677:17: ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:678:17: ( ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:678:17: ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:677:17: ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:678:17: ( options {greedy=false; } : text= paren_chunk loc= EOL ( EOL )* )*
             loop47:
             do {
                 int alt47=2;
@@ -3314,6 +3325,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     alt47=1;
                     break;
                 case 15:
@@ -3324,39 +3339,39 @@
 
                 switch (alt47) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:678:25: text= paren_chunk loc= EOL ( EOL )*
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:679:25: text= paren_chunk loc= EOL ( EOL )*
             	    {
-            	    following.push(FOLLOW_paren_chunk_in_expander_lhs_block1524);
+            	    following.push(FOLLOW_paren_chunk_in_expander_lhs_block1526);
             	    text=paren_chunk();
             	    following.pop();
 
             	    loc=(Token)input.LT(1);
-            	    match(input,EOL,FOLLOW_EOL_in_expander_lhs_block1528); 
-
-            	    				//only expand non null
-            	    				if (text != null) {
-            	    					if (text.trim().startsWith("-")) {
-            	    						if (constraints == null) {
-            	    							constraints = new ArrayList();
-            	    						}
-            	    						constraints.add(runWhenExpander( text, offset(loc.getLine())));
-            	    					} else {
-            	    						if (constraints != null) {
-            	    							lhsBlock = applyConstraints(constraints, lhsBlock);
-            	    							constraints = null;
-            	    						}
-            	    					
-            	    					
-            	    						if (lhsBlock == null) {					
-            	    							lhsBlock = runWhenExpander( text, offset(loc.getLine()));
-            	    						} else {
-            	    							lhsBlock = lhsBlock + eol + runWhenExpander( text, offset(loc.getLine()));
-            	    						}
-            	    					}
-            	    					text = null;
-            	    				}
+            	    match(input,EOL,FOLLOW_EOL_in_expander_lhs_block1530); 
+            	    
+            	    				//only expand non null
+            	    				if (text != null) {
+            	    					if (text.trim().startsWith("-")) {
+            	    						if (constraints == null) {
+            	    							constraints = new ArrayList();
+            	    						}
+            	    						constraints.add(runWhenExpander( text, offset(loc.getLine())));
+            	    					} else {
+            	    						if (constraints != null) {
+            	    							lhsBlock = applyConstraints(constraints, lhsBlock);
+            	    							constraints = null;
+            	    						}
+            	    					
+            	    					
+            	    						if (lhsBlock == null) {					
+            	    							lhsBlock = runWhenExpander( text, offset(loc.getLine()));
+            	    						} else {
+            	    							lhsBlock = lhsBlock + eol + runWhenExpander( text, offset(loc.getLine()));
+            	    						}
+            	    					}
+            	    					text = null;
+            	    				}
             	    			
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:17: ( EOL )*
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:705:17: ( EOL )*
             	    loop46:
             	    do {
             	        int alt46=2;
@@ -3368,9 +3383,9 @@
 
             	        switch (alt46) {
             	    	case 1 :
-            	    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:704:18: EOL
+            	    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:705:18: EOL
             	    	    {
-            	    	    match(input,EOL,FOLLOW_EOL_in_expander_lhs_block1543); 
+            	    	    match(input,EOL,FOLLOW_EOL_in_expander_lhs_block1545); 
 
             	    	    }
             	    	    break;
@@ -3389,12 +3404,12 @@
                 }
             } while (true);
 
-            	
-            			//flush out any constraints left handing before the RHS
-            			lhsBlock = applyConstraints(constraints, lhsBlock);
-            			if (lhsBlock != null) {
-            				reparseLhs(lhsBlock, descrs);
-            			}
+            	
+            			//flush out any constraints left handing before the RHS
+            			lhsBlock = applyConstraints(constraints, lhsBlock);
+            			if (lhsBlock != null) {
+            				reparseLhs(lhsBlock, descrs);
+            			}
             		
 
             }
@@ -3412,20 +3427,20 @@
 
 
     // $ANTLR start lhs
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:718:1: lhs returns [PatternDescr d] : l= lhs_or ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:719:1: lhs returns [PatternDescr d] : l= lhs_or ;
     public PatternDescr lhs() throws RecognitionException {   
         PatternDescr d;
         PatternDescr l = null;
 
 
-
-        		d=null;
+        
+        		d=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:722:17: (l= lhs_or )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:722:17: l= lhs_or
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:723:17: (l= lhs_or )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:723:17: l= lhs_or
             {
-            following.push(FOLLOW_lhs_or_in_lhs1585);
+            following.push(FOLLOW_lhs_or_in_lhs1587);
             l=lhs_or();
             following.pop();
 
@@ -3446,24 +3461,24 @@
 
 
     // $ANTLR start lhs_column
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:726:1: lhs_column returns [PatternDescr d] : (f= fact_binding | f= fact );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:727:1: lhs_column returns [PatternDescr d] : (f= fact_binding | f= fact );
     public PatternDescr lhs_column() throws RecognitionException {   
         PatternDescr d;
         PatternDescr f = null;
 
 
-
-        		d=null;
+        
+        		d=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:730:17: (f= fact_binding | f= fact )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:731:17: (f= fact_binding | f= fact )
             int alt48=2;
             alt48 = dfa48.predict(input); 
             switch (alt48) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:730:17: f= fact_binding
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:731:17: f= fact_binding
                     {
-                    following.push(FOLLOW_fact_binding_in_lhs_column1613);
+                    following.push(FOLLOW_fact_binding_in_lhs_column1615);
                     f=fact_binding();
                     following.pop();
 
@@ -3472,9 +3487,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:731:17: f= fact
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:732:17: f= fact
                     {
-                    following.push(FOLLOW_fact_in_lhs_column1622);
+                    following.push(FOLLOW_fact_in_lhs_column1624);
                     f=fact();
                     following.pop();
 
@@ -3497,32 +3512,32 @@
 
 
     // $ANTLR start from_statement
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:734:1: from_statement returns [FromDescr d] : 'from' opt_eol ds= from_source ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:735:1: from_statement returns [FromDescr d] : 'from' opt_eol ds= from_source ;
     public FromDescr from_statement() throws RecognitionException {   
         FromDescr d;
         DeclarativeInvokerDescr ds = null;
 
 
-
-        		d=factory.createFrom();
+        
+        		d=factory.createFrom();
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:739:17: ( 'from' opt_eol ds= from_source )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:739:17: 'from' opt_eol ds= from_source
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:740:17: ( 'from' opt_eol ds= from_source )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:740:17: 'from' opt_eol ds= from_source
             {
-            match(input,42,FOLLOW_42_in_from_statement1650); 
-            following.push(FOLLOW_opt_eol_in_from_statement1652);
+            match(input,42,FOLLOW_42_in_from_statement1652); 
+            following.push(FOLLOW_opt_eol_in_from_statement1654);
             opt_eol();
             following.pop();
 
-            following.push(FOLLOW_from_source_in_from_statement1656);
+            following.push(FOLLOW_from_source_in_from_statement1658);
             ds=from_source();
             following.pop();
 
-
-             			d.setDataSource(ds);
+            
+             			d.setDataSource(ds);
+             		
              		
-             		
 
             }
 
@@ -3539,7 +3554,7 @@
 
 
     // $ANTLR start from_source
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:749:1: from_source returns [DeclarativeInvokerDescr ds] : ( (var= ID '.' field= ID ) | (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) | (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:750:1: from_source returns [DeclarativeInvokerDescr ds] : ( (var= ID '.' field= ID ) | (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) | (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) );
     public DeclarativeInvokerDescr from_source() throws RecognitionException {   
         DeclarativeInvokerDescr ds;
         Token var=null;
@@ -3549,29 +3564,29 @@
         ArrayList args = null;
 
 
-
-        		ds = null;
+        
+        		ds = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:754:17: ( (var= ID '.' field= ID ) | (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) | (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:755:17: ( (var= ID '.' field= ID ) | (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) | (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' ) )
             int alt49=3;
             alt49 = dfa49.predict(input); 
             switch (alt49) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:754:17: (var= ID '.' field= ID )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:755:17: (var= ID '.' field= ID )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:754:17: (var= ID '.' field= ID )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:754:18: var= ID '.' field= ID
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:755:17: (var= ID '.' field= ID )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:755:18: var= ID '.' field= ID
                     {
                     var=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_from_source1700); 
-                    match(input,19,FOLLOW_19_in_from_source1702); 
+                    match(input,ID,FOLLOW_ID_in_from_source1702); 
+                    match(input,19,FOLLOW_19_in_from_source1704); 
                     field=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_from_source1706); 
-
-                    			  FieldAccessDescr fa = new FieldAccessDescr(var.getText(), field.getText());	
-                    			  fa.setLine(var.getLine());
-                    			  ds = fa;
+                    match(input,ID,FOLLOW_ID_in_from_source1708); 
+                    
+                    			  FieldAccessDescr fa = new FieldAccessDescr(var.getText(), field.getText());	
+                    			  fa.setLine(var.getLine());
+                    			  ds = fa;
                     			 
 
                     }
@@ -3580,39 +3595,39 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:764:17: (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:765:17: (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:764:17: (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:764:18: var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:765:17: (var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:765:18: var= ID '.' method= ID opt_eol '(' opt_eol args= argument_list opt_eol ')'
                     {
                     var=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_from_source1733); 
-                    match(input,19,FOLLOW_19_in_from_source1735); 
+                    match(input,ID,FOLLOW_ID_in_from_source1735); 
+                    match(input,19,FOLLOW_19_in_from_source1737); 
                     method=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_from_source1739); 
-                    following.push(FOLLOW_opt_eol_in_from_source1741);
+                    match(input,ID,FOLLOW_ID_in_from_source1741); 
+                    following.push(FOLLOW_opt_eol_in_from_source1743);
                     opt_eol();
                     following.pop();
 
-                    match(input,23,FOLLOW_23_in_from_source1744); 
-                    following.push(FOLLOW_opt_eol_in_from_source1746);
+                    match(input,23,FOLLOW_23_in_from_source1746); 
+                    following.push(FOLLOW_opt_eol_in_from_source1748);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_argument_list_in_from_source1750);
+                    following.push(FOLLOW_argument_list_in_from_source1752);
                     args=argument_list();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_from_source1752);
+                    following.push(FOLLOW_opt_eol_in_from_source1754);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_from_source1754); 
-
-                    			MethodAccessDescr mc = new MethodAccessDescr(var.getText(), method.getText());
-                    			mc.setArguments(args);
-                    			mc.setLine(var.getLine());
-                    			ds = mc;
+                    match(input,25,FOLLOW_25_in_from_source1756); 
+                    
+                    			MethodAccessDescr mc = new MethodAccessDescr(var.getText(), method.getText());
+                    			mc.setArguments(args);
+                    			mc.setLine(var.getLine());
+                    			ds = mc;
                     			
 
                     }
@@ -3621,36 +3636,36 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:773:17: (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:774:17: (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:773:17: (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:773:18: functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:774:17: (functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:774:18: functionName= ID opt_eol '(' opt_eol args= argument_list opt_eol ')'
                     {
                     functionName=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_from_source1776); 
-                    following.push(FOLLOW_opt_eol_in_from_source1778);
+                    match(input,ID,FOLLOW_ID_in_from_source1778); 
+                    following.push(FOLLOW_opt_eol_in_from_source1780);
                     opt_eol();
                     following.pop();
 
-                    match(input,23,FOLLOW_23_in_from_source1780); 
-                    following.push(FOLLOW_opt_eol_in_from_source1782);
+                    match(input,23,FOLLOW_23_in_from_source1782); 
+                    following.push(FOLLOW_opt_eol_in_from_source1784);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_argument_list_in_from_source1786);
+                    following.push(FOLLOW_argument_list_in_from_source1788);
                     args=argument_list();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_from_source1788);
+                    following.push(FOLLOW_opt_eol_in_from_source1790);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_from_source1790); 
-
-                    			FunctionCallDescr fc = new FunctionCallDescr(functionName.getText());
-                    			fc.setLine(functionName.getLine());
-                    			fc.setArguments(args);
-                    			ds = fc;
+                    match(input,25,FOLLOW_25_in_from_source1792); 
+                    
+                    			FunctionCallDescr fc = new FunctionCallDescr(functionName.getText());
+                    			fc.setLine(functionName.getLine());
+                    			fc.setArguments(args);
+                    			ds = fc;
                     			
 
                     }
@@ -3672,24 +3687,156 @@
     // $ANTLR end from_source
 
 
+    // $ANTLR start accumulate_statement
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:787:1: accumulate_statement returns [AccumulateDescr d] : loc= 'from' opt_eol 'accumulate' opt_eol '(' opt_eol column= lhs_column opt_eol ',' opt_eol 'init' opt_eol '(' c= paren_chunk2 ')' opt_eol ',' opt_eol 'action' opt_eol '(' c= paren_chunk2 ')' opt_eol ',' opt_eol 'result' opt_eol '(' c= paren_chunk2 ')' opt_eol ')' ;
+    public AccumulateDescr accumulate_statement() throws RecognitionException {   
+        AccumulateDescr d;
+        Token loc=null;
+        PatternDescr column = null;
+
+        String c = null;
+
+
+        
+        		d = factory.createAccumulate();
+        	
+        try {
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:792:17: (loc= 'from' opt_eol 'accumulate' opt_eol '(' opt_eol column= lhs_column opt_eol ',' opt_eol 'init' opt_eol '(' c= paren_chunk2 ')' opt_eol ',' opt_eol 'action' opt_eol '(' c= paren_chunk2 ')' opt_eol ',' opt_eol 'result' opt_eol '(' c= paren_chunk2 ')' opt_eol ')' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:792:17: loc= 'from' opt_eol 'accumulate' opt_eol '(' opt_eol column= lhs_column opt_eol ',' opt_eol 'init' opt_eol '(' c= paren_chunk2 ')' opt_eol ',' opt_eol 'action' opt_eol '(' c= paren_chunk2 ')' opt_eol ',' opt_eol 'result' opt_eol '(' c= paren_chunk2 ')' opt_eol ')'
+            {
+            loc=(Token)input.LT(1);
+            match(input,42,FOLLOW_42_in_accumulate_statement1841); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1843);
+            opt_eol();
+            following.pop();
+
+            match(input,43,FOLLOW_43_in_accumulate_statement1845); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1847);
+            opt_eol();
+            following.pop();
+
+             
+            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            		
+            match(input,23,FOLLOW_23_in_accumulate_statement1857); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1859);
+            opt_eol();
+            following.pop();
+
+            following.push(FOLLOW_lhs_column_in_accumulate_statement1863);
+            column=lhs_column();
+            following.pop();
+
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1865);
+            opt_eol();
+            following.pop();
+
+            match(input,24,FOLLOW_24_in_accumulate_statement1867); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1869);
+            opt_eol();
+            following.pop();
+
+            
+            		        d.setSourceColumn( (ColumnDescr)column );
+            		
+            match(input,44,FOLLOW_44_in_accumulate_statement1877); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1879);
+            opt_eol();
+            following.pop();
+
+            match(input,23,FOLLOW_23_in_accumulate_statement1881); 
+            following.push(FOLLOW_paren_chunk2_in_accumulate_statement1885);
+            c=paren_chunk2();
+            following.pop();
+
+            match(input,25,FOLLOW_25_in_accumulate_statement1887); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1889);
+            opt_eol();
+            following.pop();
+
+            match(input,24,FOLLOW_24_in_accumulate_statement1891); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1893);
+            opt_eol();
+            following.pop();
+
+            
+            		        d.setInitCode( c );
+            		
+            match(input,45,FOLLOW_45_in_accumulate_statement1901); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1903);
+            opt_eol();
+            following.pop();
+
+            match(input,23,FOLLOW_23_in_accumulate_statement1905); 
+            following.push(FOLLOW_paren_chunk2_in_accumulate_statement1909);
+            c=paren_chunk2();
+            following.pop();
+
+            match(input,25,FOLLOW_25_in_accumulate_statement1911); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1913);
+            opt_eol();
+            following.pop();
+
+            match(input,24,FOLLOW_24_in_accumulate_statement1915); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1917);
+            opt_eol();
+            following.pop();
+
+            
+            		        d.setActionCode( c );
+            		
+            match(input,46,FOLLOW_46_in_accumulate_statement1925); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1927);
+            opt_eol();
+            following.pop();
+
+            match(input,23,FOLLOW_23_in_accumulate_statement1929); 
+            following.push(FOLLOW_paren_chunk2_in_accumulate_statement1933);
+            c=paren_chunk2();
+            following.pop();
+
+            match(input,25,FOLLOW_25_in_accumulate_statement1935); 
+            following.push(FOLLOW_opt_eol_in_accumulate_statement1937);
+            opt_eol();
+            following.pop();
+
+            match(input,25,FOLLOW_25_in_accumulate_statement1939); 
+            
+            		        d.setResultCode( c );
+            		
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return d;
+    }
+    // $ANTLR end accumulate_statement
+
+
     // $ANTLR start argument_list
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:786:1: argument_list returns [ArrayList args] : (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )? ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:814:1: argument_list returns [ArrayList args] : (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )? ;
     public ArrayList argument_list() throws RecognitionException {   
         ArrayList args;
         ArgumentValueDescr param = null;
 
 
-
-        		args = new ArrayList();
+        
+        		args = new ArrayList();
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:791:17: ( (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )? )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:791:17: (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:819:17: ( (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )? )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:819:17: (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )?
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:791:17: (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:819:17: (param= argument_value ( opt_eol ',' opt_eol param= argument_value )* )?
             int alt51=2;
             int LA51_0 = input.LA(1);
-            if ( (LA51_0>=ID && LA51_0<=FLOAT)||LA51_0==26||LA51_0==43||LA51_0==45 ) {
+            if ( (LA51_0>=ID && LA51_0<=FLOAT)||LA51_0==26||LA51_0==47||LA51_0==49 ) {
                 alt51=1;
             }
             else if ( LA51_0==EOL||LA51_0==15||LA51_0==25 ) {
@@ -3697,49 +3844,49 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("791:17: (param= argument_value ( opt_eol \',\' opt_eol param= argument_value )* )?", 51, 0, input);
+                    new NoViableAltException("819:17: (param= argument_value ( opt_eol \',\' opt_eol param= argument_value )* )?", 51, 0, input);
 
                 throw nvae;
             }
             switch (alt51) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:791:18: param= argument_value ( opt_eol ',' opt_eol param= argument_value )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:819:18: param= argument_value ( opt_eol ',' opt_eol param= argument_value )*
                     {
-                    following.push(FOLLOW_argument_value_in_argument_list1833);
+                    following.push(FOLLOW_argument_value_in_argument_list1976);
                     param=argument_value();
                     following.pop();
 
-
-                    			if (param != null) {
-                    				args.add(param);
-                    			}
+                    
+                    			if (param != null) {
+                    				args.add(param);
+                    			}
                     		
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:797:17: ( opt_eol ',' opt_eol param= argument_value )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:825:17: ( opt_eol ',' opt_eol param= argument_value )*
                     loop50:
                     do {
                         int alt50=2;
                         alt50 = dfa50.predict(input); 
                         switch (alt50) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:798:25: opt_eol ',' opt_eol param= argument_value
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:826:25: opt_eol ',' opt_eol param= argument_value
                     	    {
-                    	    following.push(FOLLOW_opt_eol_in_argument_list1849);
+                    	    following.push(FOLLOW_opt_eol_in_argument_list1992);
                     	    opt_eol();
                     	    following.pop();
 
-                    	    match(input,24,FOLLOW_24_in_argument_list1851); 
-                    	    following.push(FOLLOW_opt_eol_in_argument_list1853);
+                    	    match(input,24,FOLLOW_24_in_argument_list1994); 
+                    	    following.push(FOLLOW_opt_eol_in_argument_list1996);
                     	    opt_eol();
                     	    following.pop();
 
-                    	    following.push(FOLLOW_argument_value_in_argument_list1857);
+                    	    following.push(FOLLOW_argument_value_in_argument_list2000);
                     	    param=argument_value();
                     	    following.pop();
 
-
-                    	    				if (param != null) {
-                    	    					args.add(param);
-                    	    				}
+                    	    
+                    	    				if (param != null) {
+                    	    					args.add(param);
+                    	    				}
                     	    			
 
                     	    }
@@ -3772,7 +3919,7 @@
 
 
     // $ANTLR start argument_value
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:807:1: argument_value returns [ArgumentValueDescr value] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array ) ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:835:1: argument_value returns [ArgumentValueDescr value] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array ) ;
     public ArgumentValueDescr argument_value() throws RecognitionException {   
         ArgumentValueDescr value;
         Token t=null;
@@ -3781,15 +3928,15 @@
         List a = null;
 
 
-
-        		value = null;
-        		String text = null;
+        
+        		value = null;
+        		String text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:17: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:840:17: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:840:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:840:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= 'null' | t= 'null' | m= inline_map | a= inline_array )
             int alt52=9;
             switch ( input.LA(1) ) {
             case STRING:
@@ -3807,90 +3954,90 @@
             case ID:
                 alt52=5;
                 break;
-            case 43:
+            case 47:
                 alt52=6;
                 break;
             case 26:
                 alt52=8;
                 break;
-            case 45:
+            case 49:
                 alt52=9;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("812:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= \'null\' | t= \'null\' | m= inline_map | a= inline_array )", 52, 0, input);
+                    new NoViableAltException("840:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= ID | t= \'null\' | t= \'null\' | m= inline_map | a= inline_array )", 52, 0, input);
 
                 throw nvae;
             }
 
             switch (alt52) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:812:25: t= STRING
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:840:25: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_argument_value1897); 
+                    match(input,STRING,FOLLOW_STRING_in_argument_value2040); 
                      text = getString( t );  value=new ArgumentValueDescr(ArgumentValueDescr.STRING, text);
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:813:25: t= INT
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:841:25: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_argument_value1908); 
+                    match(input,INT,FOLLOW_INT_in_argument_value2051); 
                      text = t.getText();  value=new ArgumentValueDescr(ArgumentValueDescr.INTEGRAL, text);
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:814:25: t= FLOAT
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:842:25: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_argument_value1921); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_argument_value2064); 
                      text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.DECIMAL, text); 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:815:25: t= BOOL
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:843:25: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_argument_value1932); 
+                    match(input,BOOL,FOLLOW_BOOL_in_argument_value2075); 
                      text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.BOOLEAN, text); 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:816:25: t= ID
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:844:25: t= ID
                     {
                     t=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_argument_value1944); 
+                    match(input,ID,FOLLOW_ID_in_argument_value2087); 
                      text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.VARIABLE, text);
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:817:25: t= 'null'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:845:25: t= 'null'
                     {
                     t=(Token)input.LT(1);
-                    match(input,43,FOLLOW_43_in_argument_value1955); 
+                    match(input,47,FOLLOW_47_in_argument_value2098); 
                      text = "null"; value=new ArgumentValueDescr(ArgumentValueDescr.NULL, text);
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:818:25: t= 'null'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:846:25: t= 'null'
                     {
                     t=(Token)input.LT(1);
-                    match(input,43,FOLLOW_43_in_argument_value1966); 
+                    match(input,47,FOLLOW_47_in_argument_value2109); 
                      text = "null"; value=new ArgumentValueDescr(ArgumentValueDescr.NULL, text);
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:819:25: m= inline_map
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:847:25: m= inline_map
                     {
-                    following.push(FOLLOW_inline_map_in_argument_value1985);
+                    following.push(FOLLOW_inline_map_in_argument_value2128);
                     m=inline_map();
                     following.pop();
 
@@ -3899,9 +4046,9 @@
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:820:25: a= inline_array
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:848:25: a= inline_array
                     {
-                    following.push(FOLLOW_inline_array_in_argument_value2001);
+                    following.push(FOLLOW_inline_array_in_argument_value2144);
                     a=inline_array();
                     following.pop();
 
@@ -3928,7 +4075,7 @@
 
 
     // $ANTLR start inline_map
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:824:1: inline_map returns [ArgumentValueDescr.MapDescr mapDescr] : '{' (key= argument_value '=>' value= argument_value ) ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )* '}' ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:852:1: inline_map returns [ArgumentValueDescr.MapDescr mapDescr] : '{' (key= argument_value '=>' value= argument_value ) ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )* '}' ;
     public ArgumentValueDescr.MapDescr inline_map() throws RecognitionException {   
         ArgumentValueDescr.MapDescr mapDescr;
         ArgumentValueDescr key = null;
@@ -3936,35 +4083,35 @@
         ArgumentValueDescr value = null;
 
 
-
-                mapDescr = new ArgumentValueDescr.MapDescr();
+        
+                mapDescr = new ArgumentValueDescr.MapDescr();
             
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:828:8: ( '{' (key= argument_value '=>' value= argument_value ) ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )* '}' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:828:8: '{' (key= argument_value '=>' value= argument_value ) ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )* '}'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:856:8: ( '{' (key= argument_value '=>' value= argument_value ) ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )* '}' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:856:8: '{' (key= argument_value '=>' value= argument_value ) ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )* '}'
             {
-            match(input,26,FOLLOW_26_in_inline_map2041); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:829:12: (key= argument_value '=>' value= argument_value )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:829:14: key= argument_value '=>' value= argument_value
+            match(input,26,FOLLOW_26_in_inline_map2184); 
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:857:12: (key= argument_value '=>' value= argument_value )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:857:14: key= argument_value '=>' value= argument_value
             {
-            following.push(FOLLOW_argument_value_in_inline_map2059);
+            following.push(FOLLOW_argument_value_in_inline_map2202);
             key=argument_value();
             following.pop();
 
-            match(input,44,FOLLOW_44_in_inline_map2061); 
-            following.push(FOLLOW_argument_value_in_inline_map2065);
+            match(input,48,FOLLOW_48_in_inline_map2204); 
+            following.push(FOLLOW_argument_value_in_inline_map2208);
             value=argument_value();
             following.pop();
 
-
-                             if ( key != null ) {
-                                 mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
-                             }
+            
+                             if ( key != null ) {
+                                 mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
+                             }
                          
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:12: ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:864:12: ( ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value )*
             loop55:
             do {
                 int alt55=2;
@@ -3976,9 +4123,9 @@
 
                 switch (alt55) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:14: ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:864:14: ( EOL )? ',' ( EOL )? key= argument_value '=>' value= argument_value
             	    {
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:14: ( EOL )?
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:864:14: ( EOL )?
             	    int alt53=2;
             	    int LA53_0 = input.LA(1);
             	    if ( LA53_0==EOL ) {
@@ -3989,61 +4136,61 @@
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("836:14: ( EOL )?", 53, 0, input);
+            	            new NoViableAltException("864:14: ( EOL )?", 53, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt53) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:15: EOL
+            	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:864:15: EOL
             	            {
-            	            match(input,EOL,FOLLOW_EOL_in_inline_map2108); 
+            	            match(input,EOL,FOLLOW_EOL_in_inline_map2251); 
 
             	            }
             	            break;
 
             	    }
 
-            	    match(input,24,FOLLOW_24_in_inline_map2112); 
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:25: ( EOL )?
+            	    match(input,24,FOLLOW_24_in_inline_map2255); 
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:864:25: ( EOL )?
             	    int alt54=2;
             	    int LA54_0 = input.LA(1);
             	    if ( LA54_0==EOL ) {
             	        alt54=1;
             	    }
-            	    else if ( (LA54_0>=ID && LA54_0<=FLOAT)||LA54_0==26||LA54_0==43||LA54_0==45 ) {
+            	    else if ( (LA54_0>=ID && LA54_0<=FLOAT)||LA54_0==26||LA54_0==47||LA54_0==49 ) {
             	        alt54=2;
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("836:25: ( EOL )?", 54, 0, input);
+            	            new NoViableAltException("864:25: ( EOL )?", 54, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt54) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:836:26: EOL
+            	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:864:26: EOL
             	            {
-            	            match(input,EOL,FOLLOW_EOL_in_inline_map2115); 
+            	            match(input,EOL,FOLLOW_EOL_in_inline_map2258); 
 
             	            }
             	            break;
 
             	    }
 
-            	    following.push(FOLLOW_argument_value_in_inline_map2121);
+            	    following.push(FOLLOW_argument_value_in_inline_map2264);
             	    key=argument_value();
             	    following.pop();
 
-            	    match(input,44,FOLLOW_44_in_inline_map2123); 
-            	    following.push(FOLLOW_argument_value_in_inline_map2127);
+            	    match(input,48,FOLLOW_48_in_inline_map2266); 
+            	    following.push(FOLLOW_argument_value_in_inline_map2270);
             	    value=argument_value();
             	    following.pop();
 
-
-            	                     if ( key != null ) {
-            	                         mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
-            	                     }
+            	    
+            	                     if ( key != null ) {
+            	                         mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
+            	                     }
             	                 
 
             	    }
@@ -4054,7 +4201,7 @@
                 }
             } while (true);
 
-            match(input,27,FOLLOW_27_in_inline_map2163); 
+            match(input,27,FOLLOW_27_in_inline_map2306); 
 
             }
 
@@ -4071,26 +4218,26 @@
 
 
     // $ANTLR start inline_array
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:845:1: inline_array returns [List list] : '[' arg= argument_value ( ( EOL )? ',' ( EOL )? arg= argument_value )* ']' ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:873:1: inline_array returns [List list] : '[' arg= argument_value ( ( EOL )? ',' ( EOL )? arg= argument_value )* ']' ;
     public List inline_array() throws RecognitionException {   
         List list;
         ArgumentValueDescr arg = null;
 
 
-
-            	list = new ArrayList();
+        
+            	list = new ArrayList();
             
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:850:5: ( '[' arg= argument_value ( ( EOL )? ',' ( EOL )? arg= argument_value )* ']' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:850:5: '[' arg= argument_value ( ( EOL )? ',' ( EOL )? arg= argument_value )* ']'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:878:5: ( '[' arg= argument_value ( ( EOL )? ',' ( EOL )? arg= argument_value )* ']' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:878:5: '[' arg= argument_value ( ( EOL )? ',' ( EOL )? arg= argument_value )* ']'
             {
-            match(input,45,FOLLOW_45_in_inline_array2207); 
-            following.push(FOLLOW_argument_value_in_inline_array2211);
+            match(input,49,FOLLOW_49_in_inline_array2350); 
+            following.push(FOLLOW_argument_value_in_inline_array2354);
             arg=argument_value();
             following.pop();
 
              list.add(arg); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:852:10: ( ( EOL )? ',' ( EOL )? arg= argument_value )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:880:10: ( ( EOL )? ',' ( EOL )? arg= argument_value )*
             loop58:
             do {
                 int alt58=2;
@@ -4102,9 +4249,9 @@
 
                 switch (alt58) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:852:12: ( EOL )? ',' ( EOL )? arg= argument_value
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:880:12: ( EOL )? ',' ( EOL )? arg= argument_value
             	    {
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:852:12: ( EOL )?
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:880:12: ( EOL )?
             	    int alt56=2;
             	    int LA56_0 = input.LA(1);
             	    if ( LA56_0==EOL ) {
@@ -4115,49 +4262,49 @@
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("852:12: ( EOL )?", 56, 0, input);
+            	            new NoViableAltException("880:12: ( EOL )?", 56, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt56) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:852:12: EOL
+            	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:880:12: EOL
             	            {
-            	            match(input,EOL,FOLLOW_EOL_in_inline_array2229); 
+            	            match(input,EOL,FOLLOW_EOL_in_inline_array2372); 
 
             	            }
             	            break;
 
             	    }
 
-            	    match(input,24,FOLLOW_24_in_inline_array2232); 
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:852:21: ( EOL )?
+            	    match(input,24,FOLLOW_24_in_inline_array2375); 
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:880:21: ( EOL )?
             	    int alt57=2;
             	    int LA57_0 = input.LA(1);
             	    if ( LA57_0==EOL ) {
             	        alt57=1;
             	    }
-            	    else if ( (LA57_0>=ID && LA57_0<=FLOAT)||LA57_0==26||LA57_0==43||LA57_0==45 ) {
+            	    else if ( (LA57_0>=ID && LA57_0<=FLOAT)||LA57_0==26||LA57_0==47||LA57_0==49 ) {
             	        alt57=2;
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("852:21: ( EOL )?", 57, 0, input);
+            	            new NoViableAltException("880:21: ( EOL )?", 57, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt57) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:852:21: EOL
+            	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:880:21: EOL
             	            {
-            	            match(input,EOL,FOLLOW_EOL_in_inline_array2234); 
+            	            match(input,EOL,FOLLOW_EOL_in_inline_array2377); 
 
             	            }
             	            break;
 
             	    }
 
-            	    following.push(FOLLOW_argument_value_in_inline_array2239);
+            	    following.push(FOLLOW_argument_value_in_inline_array2382);
             	    arg=argument_value();
             	    following.pop();
 
@@ -4171,7 +4318,7 @@
                 }
             } while (true);
 
-            match(input,46,FOLLOW_46_in_inline_array2252); 
+            match(input,50,FOLLOW_50_in_inline_array2395); 
 
             }
 
@@ -4188,38 +4335,38 @@
 
 
     // $ANTLR start fact_binding
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:857:1: fact_binding returns [PatternDescr d] : id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:885:1: fact_binding returns [PatternDescr d] : id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] ;
     public PatternDescr fact_binding() throws RecognitionException {   
         PatternDescr d;
         Token id=null;
         PatternDescr fe = null;
 
 
-
-        		d=null;
-        		boolean multi=false;
+        
+        		d=null;
+        		boolean multi=false;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:863:17: (id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:863:17: id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()]
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:891:17: (id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()] )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:891:17: id= ID opt_eol ':' opt_eol fe= fact_expression[id.getText()]
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_fact_binding2295); 
-            following.push(FOLLOW_opt_eol_in_fact_binding2305);
+            match(input,ID,FOLLOW_ID_in_fact_binding2438); 
+            following.push(FOLLOW_opt_eol_in_fact_binding2448);
             opt_eol();
             following.pop();
 
-            match(input,33,FOLLOW_33_in_fact_binding2307); 
-            following.push(FOLLOW_opt_eol_in_fact_binding2309);
+            match(input,33,FOLLOW_33_in_fact_binding2450); 
+            following.push(FOLLOW_opt_eol_in_fact_binding2452);
             opt_eol();
             following.pop();
 
-            following.push(FOLLOW_fact_expression_in_fact_binding2313);
+            following.push(FOLLOW_fact_expression_in_fact_binding2456);
             fe=fact_expression(id.getText());
             following.pop();
 
-
-             			d=fe;
+            
+             			d=fe;
              		
 
             }
@@ -4237,7 +4384,7 @@
 
 
     // $ANTLR start fact_expression
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:871:2: fact_expression[String id] returns [PatternDescr pd] : ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:899:2: fact_expression[String id] returns [PatternDescr pd] : ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* );
     public PatternDescr fact_expression(String id) throws RecognitionException {   
         PatternDescr pd;
         PatternDescr fe = null;
@@ -4245,12 +4392,12 @@
         PatternDescr f = null;
 
 
-
-         		pd = null;
-         		boolean multi = false;
+        
+         		pd = null;
+         		boolean multi = false;
          	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:876:17: ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:904:17: ( '(' opt_eol fe= fact_expression[id] opt_eol ')' | f= fact opt_eol ( ('or'|'||') opt_eol f= fact )* )
             int alt60=2;
             int LA60_0 = input.LA(1);
             if ( LA60_0==23 ) {
@@ -4261,89 +4408,89 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("871:2: fact_expression[String id] returns [PatternDescr pd] : ( \'(\' opt_eol fe= fact_expression[id] opt_eol \')\' | f= fact opt_eol ( (\'or\'|\'||\') opt_eol f= fact )* );", 60, 0, input);
+                    new NoViableAltException("899:2: fact_expression[String id] returns [PatternDescr pd] : ( \'(\' opt_eol fe= fact_expression[id] opt_eol \')\' | f= fact opt_eol ( (\'or\'|\'||\') opt_eol f= fact )* );", 60, 0, input);
 
                 throw nvae;
             }
             switch (alt60) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:876:17: '(' opt_eol fe= fact_expression[id] opt_eol ')'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:904:17: '(' opt_eol fe= fact_expression[id] opt_eol ')'
                     {
-                    match(input,23,FOLLOW_23_in_fact_expression2345); 
-                    following.push(FOLLOW_opt_eol_in_fact_expression2347);
+                    match(input,23,FOLLOW_23_in_fact_expression2488); 
+                    following.push(FOLLOW_opt_eol_in_fact_expression2490);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_fact_expression_in_fact_expression2351);
+                    following.push(FOLLOW_fact_expression_in_fact_expression2494);
                     fe=fact_expression(id);
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_fact_expression2353);
+                    following.push(FOLLOW_opt_eol_in_fact_expression2496);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_fact_expression2355); 
+                    match(input,25,FOLLOW_25_in_fact_expression2498); 
                      pd=fe; 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:877:17: f= fact opt_eol ( ('or'|'||') opt_eol f= fact )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:905:17: f= fact opt_eol ( ('or'|'||') opt_eol f= fact )*
                     {
-                    following.push(FOLLOW_fact_in_fact_expression2366);
+                    following.push(FOLLOW_fact_in_fact_expression2509);
                     f=fact();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_fact_expression2368);
+                    following.push(FOLLOW_opt_eol_in_fact_expression2511);
                     opt_eol();
                     following.pop();
 
-
-                     			((ColumnDescr)f).setIdentifier( id );
-                     			pd = f;
+                    
+                     			((ColumnDescr)f).setIdentifier( id );
+                     			pd = f;
                      		
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:882:17: ( ('or'|'||') opt_eol f= fact )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:910:17: ( ('or'|'||') opt_eol f= fact )*
                     loop59:
                     do {
                         int alt59=2;
                         int LA59_0 = input.LA(1);
-                        if ( (LA59_0>=47 && LA59_0<=48) ) {
+                        if ( (LA59_0>=51 && LA59_0<=52) ) {
                             alt59=1;
                         }
 
 
                         switch (alt59) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:882:25: ('or'|'||') opt_eol f= fact
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:910:25: ('or'|'||') opt_eol f= fact
                     	    {
-                    	    if ( (input.LA(1)>=47 && input.LA(1)<=48) ) {
+                    	    if ( (input.LA(1)>=51 && input.LA(1)<=52) ) {
                     	        input.consume();
                     	        errorRecovery=false;
                     	    }
                     	    else {
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_expression2381);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_fact_expression2524);    throw mse;
                     	    }
 
-                    	    following.push(FOLLOW_opt_eol_in_fact_expression2386);
+                    	    following.push(FOLLOW_opt_eol_in_fact_expression2529);
                     	    opt_eol();
                     	    following.pop();
 
-                    	    	if ( ! multi ) {
-                    	     					PatternDescr first = pd;
-                    	     					pd = new OrDescr();
-                    	     					((OrDescr)pd).addDescr( first );
-                    	     					multi=true;
-                    	     				}
+                    	    	if ( ! multi ) {
+                    	     					PatternDescr first = pd;
+                    	     					pd = new OrDescr();
+                    	     					((OrDescr)pd).addDescr( first );
+                    	     					multi=true;
+                    	     				}
                     	     			
-                    	    following.push(FOLLOW_fact_in_fact_expression2400);
+                    	    following.push(FOLLOW_fact_in_fact_expression2543);
                     	    f=fact();
                     	    following.pop();
 
-
-                    	     				((ColumnDescr)f).setIdentifier( id );
-                    	     				((OrDescr)pd).addDescr( f );
+                    	    
+                    	     				((ColumnDescr)f).setIdentifier( id );
+                    	     				((OrDescr)pd).addDescr( f );
                     	     			
 
                     	    }
@@ -4372,7 +4519,7 @@
 
 
     // $ANTLR start fact
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:898:1: fact returns [PatternDescr d] : id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:926:1: fact returns [PatternDescr d] : id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol ;
     public PatternDescr fact() throws RecognitionException {   
         PatternDescr d;
         Token loc=null;
@@ -4382,48 +4529,48 @@
         List c = null;
 
 
-
-        		d=null;
+        
+        		d=null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:902:17: (id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:902:17: id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:930:17: (id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:930:17: id= dotted_name opt_eol loc= '(' opt_eol (c= constraints )? opt_eol endLoc= ')' opt_eol
             {
-            following.push(FOLLOW_dotted_name_in_fact2439);
+            following.push(FOLLOW_dotted_name_in_fact2582);
             id=dotted_name();
             following.pop();
 
-             
-             			d = new ColumnDescr( id ); 
+             
+             			d = new ColumnDescr( id ); 
              		
-            following.push(FOLLOW_opt_eol_in_fact2447);
+            following.push(FOLLOW_opt_eol_in_fact2590);
             opt_eol();
             following.pop();
 
             loc=(Token)input.LT(1);
-            match(input,23,FOLLOW_23_in_fact2455); 
-
-             				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            match(input,23,FOLLOW_23_in_fact2598); 
+            
+             				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
              			
-            following.push(FOLLOW_opt_eol_in_fact2458);
+            following.push(FOLLOW_opt_eol_in_fact2601);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:34: (c= constraints )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:936:34: (c= constraints )?
             int alt61=2;
             alt61 = dfa61.predict(input); 
             switch (alt61) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:908:41: c= constraints
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:936:41: c= constraints
                     {
-                    following.push(FOLLOW_constraints_in_fact2464);
+                    following.push(FOLLOW_constraints_in_fact2607);
                     c=constraints();
                     following.pop();
 
-
-                    		 			for ( Iterator cIter = c.iterator() ; cIter.hasNext() ; ) {
-                     						((ColumnDescr)d).addDescr( (PatternDescr) cIter.next() );
-                     					}
+                    
+                    		 			for ( Iterator cIter = c.iterator() ; cIter.hasNext() ; ) {
+                     						((ColumnDescr)d).addDescr( (PatternDescr) cIter.next() );
+                     					}
                      				
 
                     }
@@ -4431,18 +4578,18 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_fact2483);
+            following.push(FOLLOW_opt_eol_in_fact2626);
             opt_eol();
             following.pop();
 
             endLoc=(Token)input.LT(1);
-            match(input,25,FOLLOW_25_in_fact2487); 
-            following.push(FOLLOW_opt_eol_in_fact2489);
+            match(input,25,FOLLOW_25_in_fact2630); 
+            following.push(FOLLOW_opt_eol_in_fact2632);
             opt_eol();
             following.pop();
 
-
-             					d.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );	
+            
+             					d.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );	
              				
 
             }
@@ -4460,21 +4607,21 @@
 
 
     // $ANTLR start constraints
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:922:1: constraints returns [List constraints] : opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:950:1: constraints returns [List constraints] : opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol ;
     public List constraints() throws RecognitionException {   
         List constraints;
-
-        		constraints = new ArrayList();
+        
+        		constraints = new ArrayList();
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:926:17: ( opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:926:17: opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:954:17: ( opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:954:17: opt_eol ( constraint[constraints] | predicate[constraints] ) ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )* opt_eol
             {
-            following.push(FOLLOW_opt_eol_in_constraints2521);
+            following.push(FOLLOW_opt_eol_in_constraints2664);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:927:17: ( constraint[constraints] | predicate[constraints] )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:955:17: ( constraint[constraints] | predicate[constraints] )
             int alt62=2;
             int LA62_0 = input.LA(1);
             if ( LA62_0==EOL||LA62_0==15 ) {
@@ -4486,15 +4633,15 @@
                     int LA62_3 = input.LA(3);
                     if ( LA62_3==ID ) {
                         int LA62_17 = input.LA(4);
-                        if ( LA62_17==51 ) {
+                        if ( LA62_17==55 ) {
                             alt62=2;
                         }
-                        else if ( LA62_17==EOL||LA62_17==15||(LA62_17>=24 && LA62_17<=25)||(LA62_17>=58 && LA62_17<=67) ) {
+                        else if ( LA62_17==EOL||LA62_17==15||(LA62_17>=24 && LA62_17<=25)||(LA62_17>=62 && LA62_17<=71) ) {
                             alt62=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("927:17: ( constraint[constraints] | predicate[constraints] )", 62, 17, input);
+                                new NoViableAltException("955:17: ( constraint[constraints] | predicate[constraints] )", 62, 17, input);
 
                             throw nvae;
                         }
@@ -4504,32 +4651,32 @@
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("927:17: ( constraint[constraints] | predicate[constraints] )", 62, 3, input);
+                            new NoViableAltException("955:17: ( constraint[constraints] | predicate[constraints] )", 62, 3, input);
 
                         throw nvae;
                     }
                 }
-                else if ( LA62_2==EOL||LA62_2==15||(LA62_2>=24 && LA62_2<=25)||(LA62_2>=58 && LA62_2<=67) ) {
+                else if ( LA62_2==EOL||LA62_2==15||(LA62_2>=24 && LA62_2<=25)||(LA62_2>=62 && LA62_2<=71) ) {
                     alt62=1;
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("927:17: ( constraint[constraints] | predicate[constraints] )", 62, 2, input);
+                        new NoViableAltException("955:17: ( constraint[constraints] | predicate[constraints] )", 62, 2, input);
 
                     throw nvae;
                 }
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("927:17: ( constraint[constraints] | predicate[constraints] )", 62, 0, input);
+                    new NoViableAltException("955:17: ( constraint[constraints] | predicate[constraints] )", 62, 0, input);
 
                 throw nvae;
             }
             switch (alt62) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:927:18: constraint[constraints]
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:955:18: constraint[constraints]
                     {
-                    following.push(FOLLOW_constraint_in_constraints2526);
+                    following.push(FOLLOW_constraint_in_constraints2669);
                     constraint(constraints);
                     following.pop();
 
@@ -4537,9 +4684,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:927:42: predicate[constraints]
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:955:42: predicate[constraints]
                     {
-                    following.push(FOLLOW_predicate_in_constraints2529);
+                    following.push(FOLLOW_predicate_in_constraints2672);
                     predicate(constraints);
                     following.pop();
 
@@ -4549,25 +4696,25 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:928:17: ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:956:17: ( opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] ) )*
             loop64:
             do {
                 int alt64=2;
                 alt64 = dfa64.predict(input); 
                 switch (alt64) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:928:19: opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] )
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:956:19: opt_eol ',' opt_eol ( constraint[constraints] | predicate[constraints] )
             	    {
-            	    following.push(FOLLOW_opt_eol_in_constraints2537);
+            	    following.push(FOLLOW_opt_eol_in_constraints2680);
             	    opt_eol();
             	    following.pop();
 
-            	    match(input,24,FOLLOW_24_in_constraints2539); 
-            	    following.push(FOLLOW_opt_eol_in_constraints2541);
+            	    match(input,24,FOLLOW_24_in_constraints2682); 
+            	    following.push(FOLLOW_opt_eol_in_constraints2684);
             	    opt_eol();
             	    following.pop();
 
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:928:39: ( constraint[constraints] | predicate[constraints] )
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:956:39: ( constraint[constraints] | predicate[constraints] )
             	    int alt63=2;
             	    int LA63_0 = input.LA(1);
             	    if ( LA63_0==EOL||LA63_0==15 ) {
@@ -4579,15 +4726,15 @@
             	            int LA63_3 = input.LA(3);
             	            if ( LA63_3==ID ) {
             	                int LA63_17 = input.LA(4);
-            	                if ( LA63_17==51 ) {
+            	                if ( LA63_17==55 ) {
             	                    alt63=2;
             	                }
-            	                else if ( LA63_17==EOL||LA63_17==15||(LA63_17>=24 && LA63_17<=25)||(LA63_17>=58 && LA63_17<=67) ) {
+            	                else if ( LA63_17==EOL||LA63_17==15||(LA63_17>=24 && LA63_17<=25)||(LA63_17>=62 && LA63_17<=71) ) {
             	                    alt63=1;
             	                }
             	                else {
             	                    NoViableAltException nvae =
-            	                        new NoViableAltException("928:39: ( constraint[constraints] | predicate[constraints] )", 63, 17, input);
+            	                        new NoViableAltException("956:39: ( constraint[constraints] | predicate[constraints] )", 63, 17, input);
 
             	                    throw nvae;
             	                }
@@ -4597,32 +4744,32 @@
             	            }
             	            else {
             	                NoViableAltException nvae =
-            	                    new NoViableAltException("928:39: ( constraint[constraints] | predicate[constraints] )", 63, 3, input);
+            	                    new NoViableAltException("956:39: ( constraint[constraints] | predicate[constraints] )", 63, 3, input);
 
             	                throw nvae;
             	            }
             	        }
-            	        else if ( LA63_2==EOL||LA63_2==15||(LA63_2>=24 && LA63_2<=25)||(LA63_2>=58 && LA63_2<=67) ) {
+            	        else if ( LA63_2==EOL||LA63_2==15||(LA63_2>=24 && LA63_2<=25)||(LA63_2>=62 && LA63_2<=71) ) {
             	            alt63=1;
             	        }
             	        else {
             	            NoViableAltException nvae =
-            	                new NoViableAltException("928:39: ( constraint[constraints] | predicate[constraints] )", 63, 2, input);
+            	                new NoViableAltException("956:39: ( constraint[constraints] | predicate[constraints] )", 63, 2, input);
 
             	            throw nvae;
             	        }
             	    }
             	    else {
             	        NoViableAltException nvae =
-            	            new NoViableAltException("928:39: ( constraint[constraints] | predicate[constraints] )", 63, 0, input);
+            	            new NoViableAltException("956:39: ( constraint[constraints] | predicate[constraints] )", 63, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt63) {
             	        case 1 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:928:40: constraint[constraints]
+            	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:956:40: constraint[constraints]
             	            {
-            	            following.push(FOLLOW_constraint_in_constraints2544);
+            	            following.push(FOLLOW_constraint_in_constraints2687);
             	            constraint(constraints);
             	            following.pop();
 
@@ -4630,9 +4777,9 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:928:64: predicate[constraints]
+            	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:956:64: predicate[constraints]
             	            {
-            	            following.push(FOLLOW_predicate_in_constraints2547);
+            	            following.push(FOLLOW_predicate_in_constraints2690);
             	            predicate(constraints);
             	            following.pop();
 
@@ -4651,7 +4798,7 @@
                 }
             } while (true);
 
-            following.push(FOLLOW_opt_eol_in_constraints2555);
+            following.push(FOLLOW_opt_eol_in_constraints2698);
             opt_eol();
             following.pop();
 
@@ -4671,7 +4818,7 @@
 
 
     // $ANTLR start constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:932: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 ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:960: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;
@@ -4684,32 +4831,32 @@
         String rvc = null;
 
 
-
-        		PatternDescr d = null;
+        
+        		PatternDescr d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:936: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:936: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
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:964: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 )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:964: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_constraint2574);
+            following.push(FOLLOW_opt_eol_in_constraint2717);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:937:17: (fb= ID opt_eol ':' opt_eol )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:965:17: (fb= ID opt_eol ':' opt_eol )?
             int alt65=2;
             alt65 = dfa65.predict(input); 
             switch (alt65) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:937:19: fb= ID opt_eol ':' opt_eol
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:965:19: fb= ID opt_eol ':' opt_eol
                     {
                     fb=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_constraint2582); 
-                    following.push(FOLLOW_opt_eol_in_constraint2584);
+                    match(input,ID,FOLLOW_ID_in_constraint2725); 
+                    following.push(FOLLOW_opt_eol_in_constraint2727);
                     opt_eol();
                     following.pop();
 
-                    match(input,33,FOLLOW_33_in_constraint2586); 
-                    following.push(FOLLOW_opt_eol_in_constraint2588);
+                    match(input,33,FOLLOW_33_in_constraint2729); 
+                    following.push(FOLLOW_opt_eol_in_constraint2731);
                     opt_eol();
                     following.pop();
 
@@ -4720,31 +4867,31 @@
             }
 
             f=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_constraint2598); 
-
-
-            			if ( fb != null ) {
-            				//System.err.println( "fb: " + fb.getText() );
-            				//System.err.println( " f: " + f.getText() );
-            				d = new FieldBindingDescr( f.getText(), fb.getText() );
-            				//System.err.println( "fbd: " + d );
-            				
-            				d.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-            				constraints.add( d );
-            			} 
-            			FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());
-            			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-            									
-            			
+            match(input,ID,FOLLOW_ID_in_constraint2741); 
+            
+            
+            			if ( fb != null ) {
+            				//System.err.println( "fb: " + fb.getText() );
+            				//System.err.println( " f: " + f.getText() );
+            				d = new FieldBindingDescr( f.getText(), fb.getText() );
+            				//System.err.println( "fbd: " + d );
+            				
+            				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_constraint2612);
+            following.push(FOLLOW_opt_eol_in_constraint2755);
             opt_eol();
             following.pop();
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:955: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 ) )* )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:983: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 alt69=2;
             int LA69_0 = input.LA(1);
-            if ( (LA69_0>=58 && LA69_0<=67) ) {
+            if ( (LA69_0>=62 && LA69_0<=71) ) {
                 alt69=1;
             }
             else if ( LA69_0==EOL||LA69_0==15||(LA69_0>=24 && LA69_0<=25) ) {
@@ -4752,23 +4899,23 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("955: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 ) )* )?", 69, 0, input);
+                    new NoViableAltException("983: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 ) )* )?", 69, 0, input);
 
                 throw nvae;
             }
             switch (alt69) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:955: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 ) )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:983:41: op= operator opt_eol (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
                     {
-                    following.push(FOLLOW_operator_in_constraint2618);
+                    following.push(FOLLOW_operator_in_constraint2761);
                     op=operator();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_constraint2620);
+                    following.push(FOLLOW_opt_eol_in_constraint2763);
                     opt_eol();
                     following.pop();
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:957:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:985:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
                     int alt66=4;
                     switch ( input.LA(1) ) {
                     case ID:
@@ -4776,12 +4923,12 @@
                         if ( LA66_1==19 ) {
                             alt66=2;
                         }
-                        else if ( LA66_1==EOL||LA66_1==15||(LA66_1>=24 && LA66_1<=25)||(LA66_1>=49 && LA66_1<=50) ) {
+                        else if ( LA66_1==EOL||LA66_1==15||(LA66_1>=24 && LA66_1<=25)||(LA66_1>=53 && LA66_1<=54) ) {
                             alt66=1;
                         }
                         else {
                             NoViableAltException nvae =
-                                new NoViableAltException("957:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 66, 1, input);
+                                new NoViableAltException("985:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 66, 1, input);
 
                             throw nvae;
                         }
@@ -4790,7 +4937,7 @@
                     case BOOL:
                     case STRING:
                     case FLOAT:
-                    case 43:
+                    case 47:
                         alt66=3;
                         break;
                     case 23:
@@ -4798,78 +4945,78 @@
                         break;
                     default:
                         NoViableAltException nvae =
-                            new NoViableAltException("957:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 66, 0, input);
+                            new NoViableAltException("985:41: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 66, 0, input);
 
                         throw nvae;
                     }
 
                     switch (alt66) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:957:49: bvc= ID
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:985:49: bvc= ID
                             {
                             bvc=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_constraint2638); 
-
-                            							
-                            														
-                            							
-                            							VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
-                            							fc.addRestriction(vd);
-                            							constraints.add(fc);
-                            							
+                            match(input,ID,FOLLOW_ID_in_constraint2781); 
+                            
+                            							
+                            														
+                            							
+                            							VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
+                            							fc.addRestriction(vd);
+                            							constraints.add(fc);
+                            							
                             						
 
                             }
                             break;
                         case 2 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:968:49: lc= enum_constraint
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:996:49: lc= enum_constraint
                             {
-                            following.push(FOLLOW_enum_constraint_in_constraint2663);
+                            following.push(FOLLOW_enum_constraint_in_constraint2806);
                             lc=enum_constraint();
                             following.pop();
 
-                             
-
-                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
-                            							fc.addRestriction(lrd);
-                            							constraints.add(fc);
-                            							
+                             
+                            
+                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
+                            							fc.addRestriction(lrd);
+                            							constraints.add(fc);
+                            							
                             						
 
                             }
                             break;
                         case 3 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:977:49: lc= literal_constraint
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1005:49: lc= literal_constraint
                             {
-                            following.push(FOLLOW_literal_constraint_in_constraint2695);
+                            following.push(FOLLOW_literal_constraint_in_constraint2838);
                             lc=literal_constraint();
                             following.pop();
 
-                             
-                            							
-                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
-                            							fc.addRestriction(lrd);
-                            							constraints.add(fc);
-                            							
+                             
+                            							
+                            							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
+                            							fc.addRestriction(lrd);
+                            							constraints.add(fc);
+                            							
                             						
 
                             }
                             break;
                         case 4 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:985:49: rvc= retval_constraint
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1013:49: rvc= retval_constraint
                             {
-                            following.push(FOLLOW_retval_constraint_in_constraint2715);
+                            following.push(FOLLOW_retval_constraint_in_constraint2858);
                             rvc=retval_constraint();
                             following.pop();
 
-                             
-                            							
-                            							
-
-                            							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
-                            							fc.addRestriction(rvd);
-                            							constraints.add(fc);
-                            							
+                             
+                            							
+                            							
+                            
+                            							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
+                            							fc.addRestriction(rvd);
+                            							constraints.add(fc);
+                            							
                             						
 
                             }
@@ -4877,43 +5024,43 @@
 
                     }
 
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:996:41: (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1024:41: (con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )*
                     loop68:
                     do {
                         int alt68=2;
                         int LA68_0 = input.LA(1);
-                        if ( (LA68_0>=49 && LA68_0<=50) ) {
+                        if ( (LA68_0>=53 && LA68_0<=54) ) {
                             alt68=1;
                         }
 
 
                         switch (alt68) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:997:49: con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1025:49: con= ('&'|'|')op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
                     	    {
                     	    con=(Token)input.LT(1);
-                    	    if ( (input.LA(1)>=49 && input.LA(1)<=50) ) {
+                    	    if ( (input.LA(1)>=53 && input.LA(1)<=54) ) {
                     	        input.consume();
                     	        errorRecovery=false;
                     	    }
                     	    else {
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2750);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2893);    throw mse;
                     	    }
 
-
-                    	    							if (con.getText().equals("&") ) {								
-                    	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
-                    	    							} else {
-                    	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
-                    	    							}							
+                    	    
+                    	    							if (con.getText().equals("&") ) {								
+                    	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
+                    	    							} else {
+                    	    								fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
+                    	    							}							
                     	    						
-                    	    following.push(FOLLOW_operator_in_constraint2772);
+                    	    following.push(FOLLOW_operator_in_constraint2915);
                     	    op=operator();
                     	    following.pop();
 
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1007:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1035:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
                     	    int alt67=4;
                     	    switch ( input.LA(1) ) {
                     	    case ID:
@@ -4921,12 +5068,12 @@
                     	        if ( LA67_1==19 ) {
                     	            alt67=2;
                     	        }
-                    	        else if ( LA67_1==EOL||LA67_1==15||(LA67_1>=24 && LA67_1<=25)||(LA67_1>=49 && LA67_1<=50) ) {
+                    	        else if ( LA67_1==EOL||LA67_1==15||(LA67_1>=24 && LA67_1<=25)||(LA67_1>=53 && LA67_1<=54) ) {
                     	            alt67=1;
                     	        }
                     	        else {
                     	            NoViableAltException nvae =
-                    	                new NoViableAltException("1007:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 67, 1, input);
+                    	                new NoViableAltException("1035:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 67, 1, input);
 
                     	            throw nvae;
                     	        }
@@ -4935,7 +5082,7 @@
                     	    case BOOL:
                     	    case STRING:
                     	    case FLOAT:
-                    	    case 43:
+                    	    case 47:
                     	        alt67=3;
                     	        break;
                     	    case 23:
@@ -4943,65 +5090,65 @@
                     	        break;
                     	    default:
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("1007:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 67, 0, input);
+                    	            new NoViableAltException("1035:49: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 67, 0, input);
 
                     	        throw nvae;
                     	    }
 
                     	    switch (alt67) {
                     	        case 1 :
-                    	            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1007:57: bvc= ID
+                    	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1035:57: bvc= ID
                     	            {
                     	            bvc=(Token)input.LT(1);
-                    	            match(input,ID,FOLLOW_ID_in_constraint2784); 
-
-                    	            								VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
-                    	            								fc.addRestriction(vd);
+                    	            match(input,ID,FOLLOW_ID_in_constraint2927); 
+                    	            
+                    	            								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:1013:57: lc= enum_constraint
+                    	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1041:57: lc= enum_constraint
                     	            {
-                    	            following.push(FOLLOW_enum_constraint_in_constraint2812);
+                    	            following.push(FOLLOW_enum_constraint_in_constraint2955);
                     	            lc=enum_constraint();
                     	            following.pop();
 
-                    	             
-                    	            								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
-                    	            								fc.addRestriction(lrd);
-                    	            								
+                    	             
+                    	            								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:1020:57: lc= literal_constraint
+                    	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1048:57: lc= literal_constraint
                     	            {
-                    	            following.push(FOLLOW_literal_constraint_in_constraint2847);
+                    	            following.push(FOLLOW_literal_constraint_in_constraint2990);
                     	            lc=literal_constraint();
                     	            following.pop();
 
-                    	             
-                    	            								LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
-                    	            								fc.addRestriction(lrd);
-                    	            								
+                    	             
+                    	            								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:1026:57: rvc= retval_constraint
+                    	            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1054:57: rvc= retval_constraint
                     	            {
-                    	            following.push(FOLLOW_retval_constraint_in_constraint2869);
+                    	            following.push(FOLLOW_retval_constraint_in_constraint3012);
                     	            rvc=retval_constraint();
                     	            following.pop();
 
-                    	             
-                    	            								ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
-                    	            								fc.addRestriction(rvd);
-                    	            								
+                    	             
+                    	            								ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
+                    	            								fc.addRestriction(rvd);
+                    	            								
                     	            							
 
                     	            }
@@ -5024,7 +5171,7 @@
 
             }
 
-            following.push(FOLLOW_opt_eol_in_constraint2925);
+            following.push(FOLLOW_opt_eol_in_constraint3068);
             opt_eol();
             following.pop();
 
@@ -5044,19 +5191,19 @@
 
 
     // $ANTLR start literal_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1039:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' ) ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1067: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;
 
-
-        		text = null;
+        
+        		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1043: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:1043:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1071:17: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1071: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:1043:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1071:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= 'null' )
             int alt70=5;
             switch ( input.LA(1) ) {
             case STRING:
@@ -5071,58 +5218,58 @@
             case BOOL:
                 alt70=4;
                 break;
-            case 43:
+            case 47:
                 alt70=5;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1043:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 70, 0, input);
+                    new NoViableAltException("1071:17: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= \'null\' )", 70, 0, input);
 
                 throw nvae;
             }
 
             switch (alt70) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1043:25: t= STRING
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1071:25: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2952); 
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint3095); 
                      text = getString( t ); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1044:25: t= INT
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1072:25: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint2963); 
+                    match(input,INT,FOLLOW_INT_in_literal_constraint3106); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1045:25: t= FLOAT
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1073:25: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2976); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint3119); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1046:25: t= BOOL
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1074:25: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2987); 
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint3130); 
                      text = t.getText(); 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1047:25: t= 'null'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1075:25: t= 'null'
                     {
                     t=(Token)input.LT(1);
-                    match(input,43,FOLLOW_43_in_literal_constraint2999); 
+                    match(input,47,FOLLOW_47_in_literal_constraint3142); 
                      text = null; 
 
                     }
@@ -5146,27 +5293,27 @@
 
 
     // $ANTLR start enum_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1051:1: enum_constraint returns [String text] : (cls= ID '.' en= ID ) ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1079:1: enum_constraint returns [String text] : (cls= ID '.' en= ID ) ;
     public String enum_constraint() throws RecognitionException {   
         String text;
         Token cls=null;
         Token en=null;
 
-
-        		text = null;
+        
+        		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1055:17: ( (cls= ID '.' en= ID ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1055:17: (cls= ID '.' en= ID )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1083:17: ( (cls= ID '.' en= ID ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1083:17: (cls= ID '.' en= ID )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1055:17: (cls= ID '.' en= ID )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1055:18: cls= ID '.' en= ID
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1083:17: (cls= ID '.' en= ID )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1083:18: cls= ID '.' en= ID
             {
             cls=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint3030); 
-            match(input,19,FOLLOW_19_in_enum_constraint3032); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint3173); 
+            match(input,19,FOLLOW_19_in_enum_constraint3175); 
             en=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint3036); 
+            match(input,ID,FOLLOW_ID_in_enum_constraint3179); 
 
             }
 
@@ -5187,25 +5334,25 @@
 
 
     // $ANTLR start retval_constraint
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1058:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1086:1: retval_constraint returns [String text] : '(' c= paren_chunk ')' ;
     public String retval_constraint() throws RecognitionException {   
         String text;
         String c = null;
 
 
-
-        		text = null;
+        
+        		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1063:17: ( '(' c= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1063:17: '(' c= paren_chunk ')'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1091:17: ( '(' c= paren_chunk ')' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1091:17: '(' c= paren_chunk ')'
             {
-            match(input,23,FOLLOW_23_in_retval_constraint3065); 
-            following.push(FOLLOW_paren_chunk_in_retval_constraint3070);
+            match(input,23,FOLLOW_23_in_retval_constraint3208); 
+            following.push(FOLLOW_paren_chunk_in_retval_constraint3213);
             c=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_retval_constraint3073); 
+            match(input,25,FOLLOW_25_in_retval_constraint3216); 
              text = c; 
 
             }
@@ -5223,7 +5370,7 @@
 
 
     // $ANTLR start predicate
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1066:1: predicate[List constraints] : decl= ID ':' field= ID '->' '(' text= paren_chunk ')' ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1094:1: predicate[List constraints] : decl= ID ':' field= ID '->' '(' text= paren_chunk ')' ;
     public void predicate(List constraints) throws RecognitionException {   
         Token decl=null;
         Token field=null;
@@ -5231,24 +5378,24 @@
 
 
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1068:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1068:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1096:17: (decl= ID ':' field= ID '->' '(' text= paren_chunk ')' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1096:17: decl= ID ':' field= ID '->' '(' text= paren_chunk ')'
             {
             decl=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_predicate3091); 
-            match(input,33,FOLLOW_33_in_predicate3093); 
+            match(input,ID,FOLLOW_ID_in_predicate3234); 
+            match(input,33,FOLLOW_33_in_predicate3236); 
             field=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_predicate3097); 
-            match(input,51,FOLLOW_51_in_predicate3099); 
-            match(input,23,FOLLOW_23_in_predicate3101); 
-            following.push(FOLLOW_paren_chunk_in_predicate3105);
+            match(input,ID,FOLLOW_ID_in_predicate3240); 
+            match(input,55,FOLLOW_55_in_predicate3242); 
+            match(input,23,FOLLOW_23_in_predicate3244); 
+            following.push(FOLLOW_paren_chunk_in_predicate3248);
             text=paren_chunk();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_predicate3107); 
-
-            			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
-            			constraints.add( d );
+            match(input,25,FOLLOW_25_in_predicate3250); 
+            
+            			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
+            			constraints.add( d );
             		
 
             }
@@ -5266,21 +5413,21 @@
 
 
     // $ANTLR start paren_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1075:1: paren_chunk returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1103:1: paren_chunk returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* ;
     public String paren_chunk() throws RecognitionException {   
         String text;
         Token any=null;
         String c = null;
 
 
-
-        		text = null;
+        
+        		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1109:18: ( ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1109:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1081:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1109:18: ( options {greedy=false; } : '(' c= paren_chunk ')' | any= . )*
             loop71:
             do {
                 int alt71=3;
@@ -5355,6 +5502,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     alt71=2;
                     break;
 
@@ -5362,38 +5513,38 @@
 
                 switch (alt71) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1082:25: '(' c= paren_chunk ')'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1110:25: '(' c= paren_chunk ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk3153); 
-            	    following.push(FOLLOW_paren_chunk_in_paren_chunk3157);
+            	    match(input,23,FOLLOW_23_in_paren_chunk3296); 
+            	    following.push(FOLLOW_paren_chunk_in_paren_chunk3300);
             	    c=paren_chunk();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk3159); 
-
-            	    				if ( c == null ) {
-            	    					c = "";
-            	    				}
-            	    				if ( text == null ) {
-            	    					text = "( " + c + " )";
-            	    				} else {
-            	    					text = text + " ( " + c + " )";
-            	    				}
+            	    match(input,25,FOLLOW_25_in_paren_chunk3302); 
+            	    
+            	    				if ( c == null ) {
+            	    					c = "";
+            	    				}
+            	    				if ( text == null ) {
+            	    					text = "( " + c + " )";
+            	    				} else {
+            	    					text = text + " ( " + c + " )";
+            	    				}
             	    			
 
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1093:19: any= .
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1121:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
-
-            	    				if ( text == null ) {
-            	    					text = any.getText();
-            	    				} else {
-            	    					text = text + " " + any.getText(); 
-            	    				} 
+            	    
+            	    				if ( text == null ) {
+            	    					text = any.getText();
+            	    				} else {
+            	    					text = text + " " + any.getText(); 
+            	    				} 
             	    			
 
             	    }
@@ -5420,21 +5571,21 @@
 
 
     // $ANTLR start paren_chunk2
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1105:1: paren_chunk2 returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1133:1: paren_chunk2 returns [String text] : ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* ;
     public String paren_chunk2() throws RecognitionException {   
         String text;
         Token any=null;
         String c = null;
 
 
-
-        		text = null;
+        
+        		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1111:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1111:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1139:18: ( ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1139:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1111:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1139:18: ( options {greedy=false; } : '(' c= paren_chunk2 ')' | any= . )*
             loop72:
             do {
                 int alt72=3;
@@ -5507,6 +5658,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     alt72=2;
                     break;
 
@@ -5514,38 +5669,38 @@
 
                 switch (alt72) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1112:25: '(' c= paren_chunk2 ')'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1140:25: '(' c= paren_chunk2 ')'
             	    {
-            	    match(input,23,FOLLOW_23_in_paren_chunk23230); 
-            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk23234);
+            	    match(input,23,FOLLOW_23_in_paren_chunk23373); 
+            	    following.push(FOLLOW_paren_chunk2_in_paren_chunk23377);
             	    c=paren_chunk2();
             	    following.pop();
 
-            	    match(input,25,FOLLOW_25_in_paren_chunk23236); 
-
-            	    				if ( c == null ) {
-            	    					c = "";
-            	    				}
-            	    				if ( text == null ) {
-            	    					text = "( " + c + " )";
-            	    				} else {
-            	    					text = text + " ( " + c + " )";
-            	    				}
+            	    match(input,25,FOLLOW_25_in_paren_chunk23379); 
+            	    
+            	    				if ( c == null ) {
+            	    					c = "";
+            	    				}
+            	    				if ( text == null ) {
+            	    					text = "( " + c + " )";
+            	    				} else {
+            	    					text = text + " ( " + c + " )";
+            	    				}
             	    			
 
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1123:19: any= .
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1151:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
-
-            	    				if ( text == null ) {
-            	    					text = any.getText();
-            	    				} else {
-            	    					text = text + " " + any.getText(); 
-            	    				} 
+            	    
+            	    				if ( text == null ) {
+            	    					text = any.getText();
+            	    				} else {
+            	    					text = text + " " + any.getText(); 
+            	    				} 
             	    			
 
             	    }
@@ -5572,21 +5727,21 @@
 
 
     // $ANTLR start curly_chunk
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1134:1: curly_chunk returns [String text] : ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1162:1: curly_chunk returns [String text] : ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* ;
     public String curly_chunk() throws RecognitionException {   
         String text;
         Token any=null;
         String c = null;
 
 
-
-        		text = null;
+        
+        		text = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1140:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1140:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1168:17: ( ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1168:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1140:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1168:17: ( options {greedy=false; } : '{' c= curly_chunk '}' | any= . )*
             loop73:
             do {
                 int alt73=3;
@@ -5659,6 +5814,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     alt73=2;
                     break;
 
@@ -5666,40 +5825,40 @@
 
                 switch (alt73) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1141:25: '{' c= curly_chunk '}'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1169:25: '{' c= curly_chunk '}'
             	    {
-            	    match(input,26,FOLLOW_26_in_curly_chunk3305); 
-            	    following.push(FOLLOW_curly_chunk_in_curly_chunk3309);
+            	    match(input,26,FOLLOW_26_in_curly_chunk3448); 
+            	    following.push(FOLLOW_curly_chunk_in_curly_chunk3452);
             	    c=curly_chunk();
             	    following.pop();
 
-            	    match(input,27,FOLLOW_27_in_curly_chunk3311); 
-
-            	    				//System.err.println( "chunk [" + c + "]" );
-            	    				if ( c == null ) {
-            	    					c = "";
-            	    				}
-            	    				if ( text == null ) {
-            	    					text = "{ " + c + " }";
-            	    				} else {
-            	    					text = text + " { " + c + " }";
-            	    				}
+            	    match(input,27,FOLLOW_27_in_curly_chunk3454); 
+            	    
+            	    				//System.err.println( "chunk [" + c + "]" );
+            	    				if ( c == null ) {
+            	    					c = "";
+            	    				}
+            	    				if ( text == null ) {
+            	    					text = "{ " + c + " }";
+            	    				} else {
+            	    					text = text + " { " + c + " }";
+            	    				}
             	    			
 
             	    }
             	    break;
             	case 2 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1153:19: any= .
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1181:19: any= .
             	    {
             	    any=(Token)input.LT(1);
             	    matchAny(input); 
-
-            	    				//System.err.println( "any [" + any.getText() + "]" );
-            	    				if ( text == null ) {
-            	    					text = any.getText();
-            	    				} else {
-            	    					text = text + " " + any.getText(); 
-            	    				} 
+            	    
+            	    				//System.err.println( "any [" + any.getText() + "]" );
+            	    				if ( text == null ) {
+            	    					text = any.getText();
+            	    				} else {
+            	    					text = text + " " + any.getText(); 
+            	    				} 
             	    			
 
             	    }
@@ -5726,7 +5885,7 @@
 
 
     // $ANTLR start lhs_or
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1165:1: lhs_or returns [PatternDescr d] : left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1193: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;
@@ -5734,59 +5893,59 @@
         PatternDescr right = null;
 
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1170: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:1170:17: left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1198:17: (left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1198:17: left= lhs_and ( ('or'|'||') opt_eol right= lhs_and )*
             {
              OrDescr or = null; 
-            following.push(FOLLOW_lhs_and_in_lhs_or3369);
+            following.push(FOLLOW_lhs_and_in_lhs_or3512);
             left=lhs_and();
             following.pop();
 
             d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1172:17: ( ('or'|'||') opt_eol right= lhs_and )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1200:17: ( ('or'|'||') opt_eol right= lhs_and )*
             loop74:
             do {
                 int alt74=2;
                 int LA74_0 = input.LA(1);
-                if ( (LA74_0>=47 && LA74_0<=48) ) {
+                if ( (LA74_0>=51 && LA74_0<=52) ) {
                     alt74=1;
                 }
 
 
                 switch (alt74) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1172:19: ('or'|'||') opt_eol right= lhs_and
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1200:19: ('or'|'||') opt_eol right= lhs_and
             	    {
-            	    if ( (input.LA(1)>=47 && input.LA(1)<=48) ) {
+            	    if ( (input.LA(1)>=51 && input.LA(1)<=52) ) {
             	        input.consume();
             	        errorRecovery=false;
             	    }
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3378);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3521);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_or3383);
+            	    following.push(FOLLOW_opt_eol_in_lhs_or3526);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_and_in_lhs_or3390);
+            	    following.push(FOLLOW_lhs_and_in_lhs_or3533);
             	    right=lhs_and();
             	    following.pop();
 
-
-            	    				if ( or == null ) {
-            	    					or = new OrDescr();
-            	    					or.addDescr( left );
-            	    					d = or;
-            	    				}
-            	    				
-            	    				or.addDescr( right );
+            	    
+            	    				if ( or == null ) {
+            	    					or = new OrDescr();
+            	    					or.addDescr( left );
+            	    					d = or;
+            	    				}
+            	    				
+            	    				or.addDescr( right );
             	    			
 
             	    }
@@ -5813,7 +5972,7 @@
 
 
     // $ANTLR start lhs_and
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1186:1: lhs_and returns [PatternDescr d] : left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1214: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;
@@ -5821,59 +5980,59 @@
         PatternDescr right = null;
 
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1191: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:1191:17: left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1219:17: (left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1219:17: left= lhs_unary ( ('and'|'&&') opt_eol right= lhs_unary )*
             {
              AndDescr and = null; 
-            following.push(FOLLOW_lhs_unary_in_lhs_and3430);
+            following.push(FOLLOW_lhs_unary_in_lhs_and3573);
             left=lhs_unary();
             following.pop();
 
              d = left; 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1193:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1221:17: ( ('and'|'&&') opt_eol right= lhs_unary )*
             loop75:
             do {
                 int alt75=2;
                 int LA75_0 = input.LA(1);
-                if ( (LA75_0>=52 && LA75_0<=53) ) {
+                if ( (LA75_0>=56 && LA75_0<=57) ) {
                     alt75=1;
                 }
 
 
                 switch (alt75) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1193:19: ('and'|'&&') opt_eol right= lhs_unary
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1221:19: ('and'|'&&') opt_eol right= lhs_unary
             	    {
-            	    if ( (input.LA(1)>=52 && input.LA(1)<=53) ) {
+            	    if ( (input.LA(1)>=56 && input.LA(1)<=57) ) {
             	        input.consume();
             	        errorRecovery=false;
             	    }
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3439);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3582);    throw mse;
             	    }
 
-            	    following.push(FOLLOW_opt_eol_in_lhs_and3444);
+            	    following.push(FOLLOW_opt_eol_in_lhs_and3587);
             	    opt_eol();
             	    following.pop();
 
-            	    following.push(FOLLOW_lhs_unary_in_lhs_and3451);
+            	    following.push(FOLLOW_lhs_unary_in_lhs_and3594);
             	    right=lhs_unary();
             	    following.pop();
 
-
-            	    				if ( and == null ) {
-            	    					and = new AndDescr();
-            	    					and.addDescr( left );
-            	    					d = and;
-            	    				}
-            	    				
-            	    				and.addDescr( right );
+            	    
+            	    				if ( and == null ) {
+            	    					and = new AndDescr();
+            	    					and.addDescr( left );
+            	    					d = and;
+            	    				}
+            	    				
+            	    				and.addDescr( right );
             	    			
 
             	    }
@@ -5900,31 +6059,33 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1207:1: lhs_unary returns [PatternDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' ) ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1235:1: lhs_unary returns [PatternDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column ( (fm= from_statement ) | (ac= accumulate_statement ) )? | '(' opt_eol u= lhs opt_eol ')' ) ;
     public PatternDescr lhs_unary() throws RecognitionException {   
         PatternDescr d;
         PatternDescr u = null;
 
         FromDescr fm = null;
 
+        AccumulateDescr ac = null;
 
 
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1211:17: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1211:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1239:17: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column ( (fm= from_statement ) | (ac= accumulate_statement ) )? | '(' opt_eol u= lhs opt_eol ')' ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1239:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column ( (fm= from_statement ) | (ac= accumulate_statement ) )? | '(' opt_eol u= lhs opt_eol ')' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1211:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | '(' opt_eol u= lhs opt_eol ')' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1239:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column ( (fm= from_statement ) | (ac= accumulate_statement ) )? | '(' opt_eol u= lhs opt_eol ')' )
             int alt77=5;
             switch ( input.LA(1) ) {
-            case 54:
+            case 58:
                 alt77=1;
                 break;
-            case 55:
+            case 59:
                 alt77=2;
                 break;
-            case 56:
+            case 60:
                 alt77=3;
                 break;
             case ID:
@@ -5935,16 +6096,16 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1211:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column (fm= from_statement )? | \'(\' opt_eol u= lhs opt_eol \')\' )", 77, 0, input);
+                    new NoViableAltException("1239:17: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_column ( (fm= from_statement ) | (ac= accumulate_statement ) )? | \'(\' opt_eol u= lhs opt_eol \')\' )", 77, 0, input);
 
                 throw nvae;
             }
 
             switch (alt77) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1211:25: u= lhs_exist
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1239:25: u= lhs_exist
                     {
-                    following.push(FOLLOW_lhs_exist_in_lhs_unary3489);
+                    following.push(FOLLOW_lhs_exist_in_lhs_unary3632);
                     u=lhs_exist();
                     following.pop();
 
@@ -5953,9 +6114,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1212:25: u= lhs_not
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1240:25: u= lhs_not
                     {
-                    following.push(FOLLOW_lhs_not_in_lhs_unary3499);
+                    following.push(FOLLOW_lhs_not_in_lhs_unary3642);
                     u=lhs_not();
                     following.pop();
 
@@ -5964,9 +6125,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1213:25: u= lhs_eval
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1241:25: u= lhs_eval
                     {
-                    following.push(FOLLOW_lhs_eval_in_lhs_unary3509);
+                    following.push(FOLLOW_lhs_eval_in_lhs_unary3652);
                     u=lhs_eval();
                     following.pop();
 
@@ -5975,63 +6136,74 @@
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1214:25: u= lhs_column (fm= from_statement )?
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1242:25: u= lhs_column ( (fm= from_statement ) | (ac= accumulate_statement ) )?
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_unary3523);
+                    following.push(FOLLOW_lhs_column_in_lhs_unary3666);
                     u=lhs_column();
                     following.pop();
 
                     d=u;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1214:45: (fm= from_statement )?
-                    int alt76=2;
-                    int LA76_0 = input.LA(1);
-                    if ( LA76_0==42 ) {
-                        alt76=1;
-                    }
-                    else if ( (LA76_0>=EOL && LA76_0<=ID)||LA76_0==15||LA76_0==23||LA76_0==25||LA76_0==29||LA76_0==34||(LA76_0>=47 && LA76_0<=48)||(LA76_0>=52 && LA76_0<=56) ) {
-                        alt76=2;
-                    }
-                    else {
-                        NoViableAltException nvae =
-                            new NoViableAltException("1214:45: (fm= from_statement )?", 76, 0, input);
-
-                        throw nvae;
-                    }
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1243:27: ( (fm= from_statement ) | (ac= accumulate_statement ) )?
+                    int alt76=3;
+                    alt76 = dfa76.predict(input); 
                     switch (alt76) {
                         case 1 :
-                            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1214:46: fm= from_statement
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1243:28: (fm= from_statement )
                             {
-                            following.push(FOLLOW_from_statement_in_lhs_unary3530);
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1243:28: (fm= from_statement )
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1243:29: fm= from_statement
+                            {
+                            following.push(FOLLOW_from_statement_in_lhs_unary3687);
                             fm=from_statement();
                             following.pop();
 
                             fm.setColumn((ColumnDescr) u); d=fm;
 
                             }
+
+
+                            }
                             break;
+                        case 2 :
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1244:28: (ac= accumulate_statement )
+                            {
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1244:28: (ac= accumulate_statement )
+                            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1244:29: ac= accumulate_statement
+                            {
+                            following.push(FOLLOW_accumulate_statement_in_lhs_unary3709);
+                            ac=accumulate_statement();
+                            following.pop();
 
+                            ac.setResultColumn((ColumnDescr) u); d=ac;
+
+                            }
+
+
+                            }
+                            break;
+
                     }
 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1215:25: '(' opt_eol u= lhs opt_eol ')'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1245:25: '(' opt_eol u= lhs opt_eol ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_unary3540); 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary3542);
+                    match(input,23,FOLLOW_23_in_lhs_unary3721); 
+                    following.push(FOLLOW_opt_eol_in_lhs_unary3723);
                     opt_eol();
                     following.pop();
 
-                    following.push(FOLLOW_lhs_in_lhs_unary3546);
+                    following.push(FOLLOW_lhs_in_lhs_unary3727);
                     u=lhs();
                     following.pop();
 
-                    following.push(FOLLOW_opt_eol_in_lhs_unary3548);
+                    following.push(FOLLOW_opt_eol_in_lhs_unary3729);
                     opt_eol();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_unary3550); 
+                    match(input,25,FOLLOW_25_in_lhs_unary3731); 
                     d = u;
 
                     }
@@ -6055,23 +6227,23 @@
 
 
     // $ANTLR start lhs_exist
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1219:1: lhs_exist returns [PatternDescr d] : loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1249: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;
         PatternDescr column = null;
 
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1223:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1223:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1253:17: (loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1253:17: loc= 'exists' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,54,FOLLOW_54_in_lhs_exist3581); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1223:30: ( '(' column= lhs_column ')' | column= lhs_column )
+            match(input,58,FOLLOW_58_in_lhs_exist3762); 
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1253:30: ( '(' column= lhs_column ')' | column= lhs_column )
             int alt78=2;
             int LA78_0 = input.LA(1);
             if ( LA78_0==23 ) {
@@ -6082,27 +6254,27 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1223:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 78, 0, input);
+                    new NoViableAltException("1253:30: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 78, 0, input);
 
                 throw nvae;
             }
             switch (alt78) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1223:31: '(' column= lhs_column ')'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1253:31: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_exist3584); 
-                    following.push(FOLLOW_lhs_column_in_lhs_exist3588);
+                    match(input,23,FOLLOW_23_in_lhs_exist3765); 
+                    following.push(FOLLOW_lhs_column_in_lhs_exist3769);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_exist3590); 
+                    match(input,25,FOLLOW_25_in_lhs_exist3771); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1223:59: column= lhs_column
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1253:59: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_exist3596);
+                    following.push(FOLLOW_lhs_column_in_lhs_exist3777);
                     column=lhs_column();
                     following.pop();
 
@@ -6112,9 +6284,9 @@
 
             }
 
-             
-            			d = new ExistsDescr( (ColumnDescr) column ); 
-            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+             
+            			d = new ExistsDescr( (ColumnDescr) column ); 
+            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
 
             }
@@ -6132,23 +6304,23 @@
 
 
     // $ANTLR start lhs_not
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1230:1: lhs_not returns [NotDescr d] : loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1260: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;
         PatternDescr column = null;
 
 
-
-        		d = null;
+        
+        		d = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1234:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1234:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1264:17: (loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1264:17: loc= 'not' ( '(' column= lhs_column ')' | column= lhs_column )
             {
             loc=(Token)input.LT(1);
-            match(input,55,FOLLOW_55_in_lhs_not3626); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1234:27: ( '(' column= lhs_column ')' | column= lhs_column )
+            match(input,59,FOLLOW_59_in_lhs_not3807); 
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1264:27: ( '(' column= lhs_column ')' | column= lhs_column )
             int alt79=2;
             int LA79_0 = input.LA(1);
             if ( LA79_0==23 ) {
@@ -6159,27 +6331,27 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1234:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 79, 0, input);
+                    new NoViableAltException("1264:27: ( \'(\' column= lhs_column \')\' | column= lhs_column )", 79, 0, input);
 
                 throw nvae;
             }
             switch (alt79) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1234:28: '(' column= lhs_column ')'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1264:28: '(' column= lhs_column ')'
                     {
-                    match(input,23,FOLLOW_23_in_lhs_not3629); 
-                    following.push(FOLLOW_lhs_column_in_lhs_not3633);
+                    match(input,23,FOLLOW_23_in_lhs_not3810); 
+                    following.push(FOLLOW_lhs_column_in_lhs_not3814);
                     column=lhs_column();
                     following.pop();
 
-                    match(input,25,FOLLOW_25_in_lhs_not3636); 
+                    match(input,25,FOLLOW_25_in_lhs_not3817); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1234:57: column= lhs_column
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1264:57: column= lhs_column
                     {
-                    following.push(FOLLOW_lhs_column_in_lhs_not3642);
+                    following.push(FOLLOW_lhs_column_in_lhs_not3823);
                     column=lhs_column();
                     following.pop();
 
@@ -6189,9 +6361,9 @@
 
             }
 
-
-            			d = new NotDescr( (ColumnDescr) column ); 
-            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+            
+            			d = new NotDescr( (ColumnDescr) column ); 
+            			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
             		
 
             }
@@ -6209,32 +6381,32 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1241:1: lhs_eval returns [PatternDescr d] : 'eval' loc= '(' c= paren_chunk2 ')' ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1271:1: lhs_eval returns [PatternDescr d] : 'eval' loc= '(' c= paren_chunk2 ')' ;
     public PatternDescr lhs_eval() throws RecognitionException {   
         PatternDescr d;
         Token loc=null;
         String c = null;
 
 
-
-        		d = null;
-        		String text = "";
+        
+        		d = null;
+        		String text = "";
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1246:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1246:17: 'eval' loc= '(' c= paren_chunk2 ')'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1276:17: ( 'eval' loc= '(' c= paren_chunk2 ')' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1276:17: 'eval' loc= '(' c= paren_chunk2 ')'
             {
-            match(input,56,FOLLOW_56_in_lhs_eval3668); 
+            match(input,60,FOLLOW_60_in_lhs_eval3849); 
             loc=(Token)input.LT(1);
-            match(input,23,FOLLOW_23_in_lhs_eval3672); 
-            following.push(FOLLOW_paren_chunk2_in_lhs_eval3680);
+            match(input,23,FOLLOW_23_in_lhs_eval3853); 
+            following.push(FOLLOW_paren_chunk2_in_lhs_eval3861);
             c=paren_chunk2();
             following.pop();
 
-            match(input,25,FOLLOW_25_in_lhs_eval3684); 
-             
-            			checkTrailingSemicolon( c, offset(loc.getLine()) );
-            			d = new EvalDescr( c ); 
+            match(input,25,FOLLOW_25_in_lhs_eval3865); 
+             
+            			checkTrailingSemicolon( c, offset(loc.getLine()) );
+            			d = new EvalDescr( c ); 
             		
 
             }
@@ -6252,22 +6424,22 @@
 
 
     // $ANTLR start dotted_name
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1255:1: dotted_name returns [String name] : id= ID ( '.' id= ID )* ( '[' ']' )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1285:1: dotted_name returns [String name] : id= ID ( '.' id= ID )* ( '[' ']' )* ;
     public String dotted_name() throws RecognitionException {   
         String name;
         Token id=null;
 
-
-        		name = null;
+        
+        		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1260:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1260:17: id= ID ( '.' id= ID )* ( '[' ']' )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1290:17: (id= ID ( '.' id= ID )* ( '[' ']' )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1290:17: id= ID ( '.' id= ID )* ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dotted_name3716); 
+            match(input,ID,FOLLOW_ID_in_dotted_name3897); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1260:46: ( '.' id= ID )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1290:46: ( '.' id= ID )*
             loop80:
             do {
                 int alt80=2;
@@ -6279,11 +6451,11 @@
 
                 switch (alt80) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1260:48: '.' id= ID
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1290:48: '.' id= ID
             	    {
-            	    match(input,19,FOLLOW_19_in_dotted_name3722); 
+            	    match(input,19,FOLLOW_19_in_dotted_name3903); 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_dotted_name3726); 
+            	    match(input,ID,FOLLOW_ID_in_dotted_name3907); 
             	     name = name + "." + id.getText(); 
 
             	    }
@@ -6294,22 +6466,22 @@
                 }
             } while (true);
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1260:99: ( '[' ']' )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1290:99: ( '[' ']' )*
             loop81:
             do {
                 int alt81=2;
                 int LA81_0 = input.LA(1);
-                if ( LA81_0==45 ) {
+                if ( LA81_0==49 ) {
                     alt81=1;
                 }
 
 
                 switch (alt81) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1260:101: '[' ']'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1290:101: '[' ']'
             	    {
-            	    match(input,45,FOLLOW_45_in_dotted_name3735); 
-            	    match(input,46,FOLLOW_46_in_dotted_name3737); 
+            	    match(input,49,FOLLOW_49_in_dotted_name3916); 
+            	    match(input,50,FOLLOW_50_in_dotted_name3918); 
             	     name = name + "[]";
 
             	    }
@@ -6336,37 +6508,37 @@
 
 
     // $ANTLR start argument_name
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1263:1: argument_name returns [String name] : id= ID ( '[' ']' )* ;
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1293:1: argument_name returns [String name] : id= ID ( '[' ']' )* ;
     public String argument_name() throws RecognitionException {   
         String name;
         Token id=null;
 
-
-        		name = null;
+        
+        		name = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1268:17: (id= ID ( '[' ']' )* )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1268:17: id= ID ( '[' ']' )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1298:17: (id= ID ( '[' ']' )* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1298:17: id= ID ( '[' ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument_name3767); 
+            match(input,ID,FOLLOW_ID_in_argument_name3948); 
              name=id.getText(); 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1268:46: ( '[' ']' )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1298:46: ( '[' ']' )*
             loop82:
             do {
                 int alt82=2;
                 int LA82_0 = input.LA(1);
-                if ( LA82_0==45 ) {
+                if ( LA82_0==49 ) {
                     alt82=1;
                 }
 
 
                 switch (alt82) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1268:48: '[' ']'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1298:48: '[' ']'
             	    {
-            	    match(input,45,FOLLOW_45_in_argument_name3773); 
-            	    match(input,46,FOLLOW_46_in_argument_name3775); 
+            	    match(input,49,FOLLOW_49_in_argument_name3954); 
+            	    match(input,50,FOLLOW_50_in_argument_name3956); 
             	     name = name + "[]";
 
             	    }
@@ -6393,17 +6565,17 @@
 
 
     // $ANTLR start word
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1272:1: word returns [String word] : (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1302: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;
         Token str=null;
 
-
-        		word = null;
+        
+        		word = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1276:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1306:17: (id= ID | 'import' | 'use' | 'rule' | 'query' | 'salience' | 'no-loop' | 'when' | 'then' | 'end' | str= STRING )
             int alt83=11;
             switch ( input.LA(1) ) {
             case ID:
@@ -6412,7 +6584,7 @@
             case 17:
                 alt83=2;
                 break;
-            case 57:
+            case 61:
                 alt83=3;
                 break;
             case 31:
@@ -6441,98 +6613,98 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1272:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 83, 0, input);
+                    new NoViableAltException("1302:1: word returns [String word] : (id= ID | \'import\' | \'use\' | \'rule\' | \'query\' | \'salience\' | \'no-loop\' | \'when\' | \'then\' | \'end\' | str= STRING );", 83, 0, input);
 
                 throw nvae;
             }
 
             switch (alt83) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1276:17: id= ID
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1306:17: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_word3803); 
+                    match(input,ID,FOLLOW_ID_in_word3984); 
                      word=id.getText(); 
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1277:17: 'import'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1307:17: 'import'
                     {
-                    match(input,17,FOLLOW_17_in_word3815); 
+                    match(input,17,FOLLOW_17_in_word3996); 
                      word="import"; 
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1278:17: 'use'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1308:17: 'use'
                     {
-                    match(input,57,FOLLOW_57_in_word3824); 
+                    match(input,61,FOLLOW_61_in_word4005); 
                      word="use"; 
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1279:17: 'rule'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1309:17: 'rule'
                     {
-                    match(input,31,FOLLOW_31_in_word3836); 
+                    match(input,31,FOLLOW_31_in_word4017); 
                      word="rule"; 
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1280:17: 'query'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1310:17: 'query'
                     {
-                    match(input,28,FOLLOW_28_in_word3847); 
+                    match(input,28,FOLLOW_28_in_word4028); 
                      word="query"; 
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1281:17: 'salience'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1311:17: 'salience'
                     {
-                    match(input,36,FOLLOW_36_in_word3857); 
+                    match(input,36,FOLLOW_36_in_word4038); 
                      word="salience"; 
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1282:17: 'no-loop'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1312:17: 'no-loop'
                     {
-                    match(input,37,FOLLOW_37_in_word3865); 
+                    match(input,37,FOLLOW_37_in_word4046); 
                      word="no-loop"; 
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1283:17: 'when'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1313:17: 'when'
                     {
-                    match(input,32,FOLLOW_32_in_word3873); 
+                    match(input,32,FOLLOW_32_in_word4054); 
                      word="when"; 
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1284:17: 'then'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1314:17: 'then'
                     {
-                    match(input,34,FOLLOW_34_in_word3884); 
+                    match(input,34,FOLLOW_34_in_word4065); 
                      word="then"; 
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1285:17: 'end'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1315:17: 'end'
                     {
-                    match(input,29,FOLLOW_29_in_word3895); 
+                    match(input,29,FOLLOW_29_in_word4076); 
                      word="end"; 
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1286:17: str= STRING
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1316:17: str= STRING
                     {
                     str=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_word3909); 
+                    match(input,STRING,FOLLOW_STRING_in_word4090); 
                      word=getString(str);
 
                     }
@@ -6552,130 +6724,130 @@
 
 
     // $ANTLR start operator
-    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1289:1: operator returns [String str] : ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' );
+    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1319:1: operator returns [String str] : ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' );
     public String operator() throws RecognitionException {   
         String str;
-
-        		str = null;
+        
+        		str = null;
         	
         try {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1295:17: ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1325:17: ( '==' | '=' | '>' | '>=' | '<' | '<=' | '!=' | 'contains' | 'matches' | 'excludes' )
             int alt84=10;
             switch ( input.LA(1) ) {
-            case 58:
+            case 62:
                 alt84=1;
                 break;
-            case 59:
+            case 63:
                 alt84=2;
                 break;
-            case 60:
+            case 64:
                 alt84=3;
                 break;
-            case 61:
+            case 65:
                 alt84=4;
                 break;
-            case 62:
+            case 66:
                 alt84=5;
                 break;
-            case 63:
+            case 67:
                 alt84=6;
                 break;
-            case 64:
+            case 68:
                 alt84=7;
                 break;
-            case 65:
+            case 69:
                 alt84=8;
                 break;
-            case 66:
+            case 70:
                 alt84=9;
                 break;
-            case 67:
+            case 71:
                 alt84=10;
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1289:1: operator returns [String str] : ( \'==\' | \'=\' | \'>\' | \'>=\' | \'<\' | \'<=\' | \'!=\' | \'contains\' | \'matches\' | \'excludes\' );", 84, 0, input);
+                    new NoViableAltException("1319:1: operator returns [String str] : ( \'==\' | \'=\' | \'>\' | \'>=\' | \'<\' | \'<=\' | \'!=\' | \'contains\' | \'matches\' | \'excludes\' );", 84, 0, input);
 
                 throw nvae;
             }
 
             switch (alt84) {
                 case 1 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1295:17: '=='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1325:17: '=='
                     {
-                    match(input,58,FOLLOW_58_in_operator3938); 
+                    match(input,62,FOLLOW_62_in_operator4119); 
                     str= "==";
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1296:18: '='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1326:18: '='
                     {
-                    match(input,59,FOLLOW_59_in_operator3945); 
+                    match(input,63,FOLLOW_63_in_operator4126); 
                     str="==";
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1297:18: '>'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1327:18: '>'
                     {
-                    match(input,60,FOLLOW_60_in_operator3952); 
+                    match(input,64,FOLLOW_64_in_operator4133); 
                     str=">";
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1298:18: '>='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1328:18: '>='
                     {
-                    match(input,61,FOLLOW_61_in_operator3959); 
+                    match(input,65,FOLLOW_65_in_operator4140); 
                     str=">=";
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1299:18: '<'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1329:18: '<'
                     {
-                    match(input,62,FOLLOW_62_in_operator3968); 
+                    match(input,66,FOLLOW_66_in_operator4149); 
                     str="<";
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1300:18: '<='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1330:18: '<='
                     {
-                    match(input,63,FOLLOW_63_in_operator3975); 
+                    match(input,67,FOLLOW_67_in_operator4156); 
                     str="<=";
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1301:18: '!='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1331:18: '!='
                     {
-                    match(input,64,FOLLOW_64_in_operator3982); 
+                    match(input,68,FOLLOW_68_in_operator4163); 
                     str="!=";
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1302:18: 'contains'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1332:18: 'contains'
                     {
-                    match(input,65,FOLLOW_65_in_operator3989); 
+                    match(input,69,FOLLOW_69_in_operator4170); 
                     str="contains";
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1303:18: 'matches'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1333:18: 'matches'
                     {
-                    match(input,66,FOLLOW_66_in_operator3996); 
+                    match(input,70,FOLLOW_70_in_operator4177); 
                     str="matches";
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1304:18: 'excludes'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1334:18: 'excludes'
                     {
-                    match(input,67,FOLLOW_67_in_operator4003); 
+                    match(input,71,FOLLOW_71_in_operator4184); 
                     str="excludes";
 
                     }
@@ -6694,31 +6866,31 @@
     // $ANTLR end operator
 
 
-    protected DFA2 dfa2 = new DFA2();protected DFA4 dfa4 = new DFA4();protected DFA13 dfa13 = new DFA13();protected DFA14 dfa14 = new DFA14();protected DFA15 dfa15 = new DFA15();protected DFA48 dfa48 = new DFA48();protected DFA49 dfa49 = new DFA49();protected DFA50 dfa50 = new DFA50();protected DFA61 dfa61 = new DFA61();protected DFA64 dfa64 = new DFA64();protected DFA65 dfa65 = new DFA65();
+    protected DFA2 dfa2 = new DFA2();protected DFA4 dfa4 = new DFA4();protected DFA13 dfa13 = new DFA13();protected DFA14 dfa14 = new DFA14();protected DFA15 dfa15 = new DFA15();protected DFA48 dfa48 = new DFA48();protected DFA49 dfa49 = new DFA49();protected DFA50 dfa50 = new DFA50();protected DFA61 dfa61 = new DFA61();protected DFA64 dfa64 = new DFA64();protected DFA65 dfa65 = new DFA65();protected DFA76 dfa76 = new DFA76();
     class DFA2 extends DFA {
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
         DFA.State s1 = new DFA.State() {{alt=5;}};
+        DFA.State s3 = new DFA.State() {{alt=1;}};
         DFA.State s4 = new DFA.State() {{alt=2;}};
         DFA.State s5 = new DFA.State() {{alt=3;}};
-        DFA.State 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 28:
-                    return s4;
+                case 31:
+                    return s3;
 
                 case EOL:
                 case 15:
                     return s2;
 
+                case 28:
+                    return s4;
+
                 case 30:
                     return s5;
 
-                case 31:
-                    return s3;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 2, 2, input);
@@ -6827,7 +6999,7 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA4_33 = input.LA(1);
                 if ( LA4_33==ID ) {return s22;}
-                if ( LA4_33==45 ) {return s21;}
+                if ( LA4_33==49 ) {return s21;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 4, 33, input);
@@ -6838,7 +7010,7 @@
         DFA.State s21 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA4_21 = input.LA(1);
-                if ( LA4_21==46 ) {return s33;}
+                if ( LA4_21==50 ) {return s33;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 4, 21, input);
@@ -6849,7 +7021,7 @@
         DFA.State s32 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 45:
+                case 49:
                     return s21;
 
                 case ID:
@@ -6882,7 +7054,7 @@
                 case 19:
                     return s20;
 
-                case 45:
+                case 49:
                     return s21;
 
                 case ID:
@@ -6906,6 +7078,7 @@
                 throw nvae;
             }
         };
+        DFA.State s120 = new DFA.State() {{alt=1;}};
         DFA.State s127 = new DFA.State() {{alt=1;}};
         DFA.State s128 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
@@ -6978,6 +7151,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s128;
 
                 default:
@@ -6990,12 +7167,12 @@
         DFA.State s126 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 27:
+                    return s127;
+
                 case 26:
                     return s126;
 
-                case 27:
-                    return s127;
-
                 case EOL:
                 case ID:
                 case INT:
@@ -7058,6 +7235,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s128;
 
                 default:
@@ -7067,7 +7248,7 @@
                     throw nvae;        }
             }
         };
-        DFA.State s120 = new DFA.State() {
+        DFA.State s121 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 26:
@@ -7138,24 +7319,27 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s128;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 120, input);
+                        new NoViableAltException("", 4, 121, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s121 = new DFA.State() {{alt=1;}};
         DFA.State s122 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 27:
-                    return s121;
+                    return s120;
 
                 case 26:
-                    return s120;
+                    return s121;
 
                 case EOL:
                 case ID:
@@ -7219,6 +7403,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s122;
 
                 default:
@@ -7231,10 +7419,10 @@
         DFA.State s111 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 26:
+                case 27:
                     return s120;
 
-                case 27:
+                case 26:
                     return s121;
 
                 case EOL:
@@ -7299,6 +7487,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s122;
 
                 default:
@@ -7380,6 +7572,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s113;
 
                 default:
@@ -7460,6 +7656,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s113;
 
                 default:
@@ -7541,6 +7741,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s95;
 
                 default:
@@ -7621,6 +7825,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s95;
 
                 default:
@@ -7702,6 +7910,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s75;
 
                 default:
@@ -7782,6 +7994,10 @@
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s75;
 
                 default:
@@ -7815,221 +8031,221 @@
                 throw nvae;
             }
         };
-        DFA.State s104 = new DFA.State() {
+        DFA.State s66 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 24:
+                    return s56;
+
                 case 25:
                     return s41;
 
-                case 24:
-                    return s54;
-
                 case EOL:
                 case 15:
-                    return s104;
+                    return s66;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 104, input);
+                        new NoViableAltException("", 4, 66, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s88 = new DFA.State() {
+        DFA.State s81 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 45:
-                    return s67;
-
                 case EOL:
                 case 15:
-                    return s104;
+                    return s66;
 
+                case 24:
+                    return s56;
+
                 case 25:
                     return s41;
 
-                case 24:
-                    return s54;
+                case 49:
+                    return s65;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 88, input);
+                        new NoViableAltException("", 4, 81, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s84 = new DFA.State() {
+        DFA.State s65 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA4_65 = input.LA(1);
+                if ( LA4_65==50 ) {return s81;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 4, 65, input);
+
+                throw nvae;
+            }
+        };
+        DFA.State s108 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 25:
                     return s41;
 
                 case 24:
-                    return s54;
+                    return s56;
 
                 case EOL:
                 case 15:
-                    return s84;
+                    return s108;
 
-                case ID:
-                    return s88;
-
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 84, input);
+                        new NoViableAltException("", 4, 108, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s66 = new DFA.State() {
+        DFA.State s92 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 45:
-                    return s52;
+                case 49:
+                    return s65;
 
                 case EOL:
                 case 15:
-                    return s84;
+                    return s108;
 
                 case 25:
                     return s41;
 
                 case 24:
-                    return s54;
+                    return s56;
 
-                case 19:
-                    return s20;
-
-                case ID:
-                    return s88;
-
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 66, input);
+                        new NoViableAltException("", 4, 92, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s65 = new DFA.State() {
+        DFA.State s88 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_65 = input.LA(1);
-                if ( LA4_65==ID ) {return s66;}
-                if ( LA4_65==EOL||LA4_65==15 ) {return s65;}
-
-                NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 65, input);
-
-                throw nvae;
-            }
-        };
-        DFA.State s54 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_54 = input.LA(1);
-                if ( LA4_54==EOL||LA4_54==15 ) {return s65;}
-                if ( LA4_54==ID ) {return s66;}
-
-                NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 54, input);
-
-                throw nvae;
-            }
-        };
-        DFA.State s68 = new DFA.State() {
-            public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                    return s54;
-
                 case 25:
                     return s41;
 
+                case 24:
+                    return s56;
+
                 case EOL:
                 case 15:
-                    return s68;
+                    return s88;
 
+                case ID:
+                    return s92;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 68, input);
+                        new NoViableAltException("", 4, 88, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s89 = new DFA.State() {
+        DFA.State s70 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 49:
+                    return s53;
+
                 case EOL:
                 case 15:
-                    return s68;
+                    return s88;
 
-                case 24:
-                    return s54;
-
                 case 25:
                     return s41;
 
-                case 45:
-                    return s67;
+                case 24:
+                    return s56;
 
+                case 19:
+                    return s20;
+
+                case ID:
+                    return s92;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 89, input);
+                        new NoViableAltException("", 4, 70, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s67 = new DFA.State() {
+        DFA.State s69 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_67 = input.LA(1);
-                if ( LA4_67==46 ) {return s89;}
+                int LA4_69 = input.LA(1);
+                if ( LA4_69==ID ) {return s70;}
+                if ( LA4_69==EOL||LA4_69==15 ) {return s69;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 67, input);
+        	    new NoViableAltException("", 4, 69, input);
 
                 throw nvae;
             }
         };
-        DFA.State s57 = new DFA.State() {
+        DFA.State s56 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA4_56 = input.LA(1);
+                if ( LA4_56==EOL||LA4_56==15 ) {return s69;}
+                if ( LA4_56==ID ) {return s70;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 4, 56, input);
+
+                throw nvae;
+            }
+        };
+        DFA.State s55 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 45:
-                    return s67;
+                case 49:
+                    return s65;
 
                 case EOL:
                 case 15:
-                    return s68;
+                    return s66;
 
                 case 24:
-                    return s54;
+                    return s56;
 
                 case 25:
                     return s41;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 57, input);
+                        new NoViableAltException("", 4, 55, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s53 = new DFA.State() {
+        DFA.State s54 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                    return s57;
+                case 24:
+                    return s56;
 
+                case 25:
+                    return s41;
+
                 case EOL:
                 case 15:
-                    return s53;
-
-                case 24:
                     return s54;
 
-                case 25:
-                    return s41;
+                case ID:
+                    return s55;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 4, 53, input);
+                        new NoViableAltException("", 4, 54, input);
 
                     throw nvae;        }
             }
@@ -8039,20 +8255,20 @@
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
+                    return s54;
+
+                case ID:
+                    return s55;
+
+                case 49:
                     return s53;
 
                 case 24:
-                    return s54;
+                    return s56;
 
                 case 25:
                     return s41;
 
-                case 45:
-                    return s52;
-
-                case ID:
-                    return s57;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 4, 60, input);
@@ -8060,13 +8276,13 @@
                     throw nvae;        }
             }
         };
-        DFA.State s52 = new DFA.State() {
+        DFA.State s53 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA4_52 = input.LA(1);
-                if ( LA4_52==46 ) {return s60;}
+                int LA4_53 = input.LA(1);
+                if ( LA4_53==50 ) {return s60;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 4, 52, input);
+        	    new NoViableAltException("", 4, 53, input);
 
                 throw nvae;
             }
@@ -8074,25 +8290,25 @@
         DFA.State s40 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 45:
-                    return s52;
+                case 19:
+                    return s20;
 
+                case 49:
+                    return s53;
+
                 case EOL:
                 case 15:
-                    return s53;
+                    return s54;
 
+                case ID:
+                    return s55;
+
                 case 24:
-                    return s54;
+                    return s56;
 
                 case 25:
                     return s41;
 
-                case 19:
-                    return s20;
-
-                case ID:
-                    return s57;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 4, 40, input);
@@ -8167,15 +8383,15 @@
         DFA.State s27 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 23:
-                    return s29;
+                case ID:
+                    return s28;
 
                 case EOL:
                 case 15:
                     return s27;
 
-                case ID:
-                    return s28;
+                case 23:
+                    return s29;
 
                 default:
                     NoViableAltException nvae =
@@ -8190,7 +8406,7 @@
                 case 19:
                     return s20;
 
-                case 45:
+                case 49:
                     return s21;
 
                 case EOL:
@@ -8270,24 +8486,24 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
+        DFA.State s3 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {{alt=2;}};
-        DFA.State s5 = new DFA.State() {{alt=1;}};
-        DFA.State s3 = new DFA.State() {
+        DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 23:
-                    return s2;
+                case ID:
+                    return s3;
 
                 case EOL:
                 case 15:
-                    return s3;
-
-                case ID:
                     return s5;
 
+                case 23:
+                    return s2;
+
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 13, 3, input);
+                        new NoViableAltException("", 13, 5, input);
 
                     throw nvae;        }
             }
@@ -8295,18 +8511,18 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case ID:
+                case 19:
+                case 49:
+                    return s3;
+
                 case EOL:
                 case 15:
-                    return s3;
+                    return s5;
 
                 case 23:
                     return s2;
 
-                case ID:
-                case 19:
-                case 45:
-                    return s5;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 13, 1, input);
@@ -8331,25 +8547,25 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
-        DFA.State s3 = new DFA.State() {{alt=1;}};
         DFA.State s2 = new DFA.State() {{alt=2;}};
-        DFA.State s5 = new DFA.State() {
+        DFA.State s7 = new DFA.State() {{alt=1;}};
+        DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                    return s3;
+                case 24:
+                case 25:
+                    return s2;
 
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
-                case 24:
-                case 25:
-                    return s2;
+                case ID:
+                    return s7;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 14, 5, input);
+                        new NoViableAltException("", 14, 4, input);
 
                     throw nvae;        }
             }
@@ -8359,18 +8575,18 @@
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
-                    return s5;
-
-                case ID:
-                    return s3;
-
-                case 45:
                     return s4;
 
                 case 24:
                 case 25:
                     return s2;
 
+                case 49:
+                    return s3;
+
+                case ID:
+                    return s7;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 14, 9, input);
@@ -8378,13 +8594,13 @@
                     throw nvae;        }
             }
         };
-        DFA.State s4 = new DFA.State() {
+        DFA.State s3 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA14_4 = input.LA(1);
-                if ( LA14_4==46 ) {return s9;}
+                int LA14_3 = input.LA(1);
+                if ( LA14_3==50 ) {return s9;}
 
                 NoViableAltException nvae =
-        	    new NoViableAltException("", 14, 4, input);
+        	    new NoViableAltException("", 14, 3, input);
 
                 throw nvae;
             }
@@ -8392,21 +8608,21 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                case 19:
+                case 49:
                     return s3;
 
-                case 45:
-                    return s4;
-
                 case EOL:
                 case 15:
-                    return s5;
+                    return s4;
 
                 case 24:
                 case 25:
                     return s2;
 
+                case ID:
+                case 19:
+                    return s7;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 14, 1, input);
@@ -8436,16 +8652,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 =
@@ -8465,7 +8681,7 @@
                 case 25:
                     return s2;
 
-                case 45:
+                case 49:
                     return s4;
 
                 case ID:
@@ -8481,7 +8697,7 @@
         DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA15_4 = input.LA(1);
-                if ( LA15_4==46 ) {return s9;}
+                if ( LA15_4==50 ) {return s9;}
 
                 NoViableAltException nvae =
         	    new NoViableAltException("", 15, 4, input);
@@ -8496,7 +8712,7 @@
                 case 19:
                     return s3;
 
-                case 45:
+                case 49:
                     return s4;
 
                 case EOL:
@@ -8531,20 +8747,20 @@
         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 23:
-                    return s4;
+                case 33:
+                    return s3;
 
                 case EOL:
                 case 15:
                     return s2;
 
-                case 33:
-                    return s3;
+                case 23:
+                    return s4;
 
                 default:
                     NoViableAltException nvae =
@@ -8565,7 +8781,7 @@
 
                 case 19:
                 case 23:
-                case 45:
+                case 49:
                     return s4;
 
                 default:
@@ -8591,50 +8807,50 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
-        DFA.State s6 = new DFA.State() {{alt=1;}};
-        DFA.State s27 = new DFA.State() {{alt=2;}};
-        DFA.State s54 = new DFA.State() {
+        DFA.State s8 = new DFA.State() {{alt=1;}};
+        DFA.State s32 = new DFA.State() {{alt=2;}};
+        DFA.State s56 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 24:
-                case 25:
-                    return s27;
+                case 23:
+                case 33:
+                    return s8;
 
                 case EOL:
                 case 15:
-                    return s54;
+                    return s56;
 
-                case 23:
-                case 33:
-                    return s6;
+                case 24:
+                case 25:
+                    return s32;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 49, 54, input);
+                        new NoViableAltException("", 49, 56, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s31 = new DFA.State() {
+        DFA.State s30 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case EOL:
-                case 15:
-                    return s54;
-
                 case 19:
                 case 23:
                 case 33:
-                case 45:
-                    return s6;
+                case 49:
+                    return s8;
 
+                case EOL:
+                case 15:
+                    return s56;
+
                 case 24:
                 case 25:
-                    return s27;
+                    return s32;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 49, 31, input);
+                        new NoViableAltException("", 49, 30, input);
 
                     throw nvae;        }
             }
@@ -8642,29 +8858,29 @@
         DFA.State s26 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case 23:
+                case 58:
+                case 59:
+                case 60:
+                    return s8;
+
+                case ID:
+                    return s30;
+
+                case EOL:
+                case 15:
+                    return s26;
+
                 case INT:
                 case BOOL:
                 case STRING:
                 case FLOAT:
                 case 25:
                 case 26:
-                case 43:
-                case 45:
-                    return s27;
+                case 47:
+                case 49:
+                    return s32;
 
-                case EOL:
-                case 15:
-                    return s26;
-
-                case ID:
-                    return s31;
-
-                case 23:
-                case 54:
-                case 55:
-                case 56:
-                    return s6;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 49, 26, input);
@@ -8672,61 +8888,61 @@
                     throw nvae;        }
             }
         };
-        DFA.State s15 = new DFA.State() {
+        DFA.State s7 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case EOL:
                 case 15:
                     return s26;
 
+                case 23:
+                case 58:
+                case 59:
+                case 60:
+                    return s8;
+
+                case ID:
+                    return s30;
+
                 case INT:
                 case BOOL:
                 case STRING:
                 case FLOAT:
                 case 25:
                 case 26:
-                case 43:
-                case 45:
-                    return s27;
+                case 47:
+                case 49:
+                    return s32;
 
-                case ID:
-                    return s31;
-
-                case 23:
-                case 54:
-                case 55:
-                case 56:
-                    return s6;
-
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 49, 15, input);
+                        new NoViableAltException("", 49, 7, input);
 
                     throw nvae;        }
             }
         };
-        DFA.State s8 = new DFA.State() {
+        DFA.State s6 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case ID:
                 case 25:
                 case 29:
                 case 34:
-                case 54:
-                case 55:
-                case 56:
-                    return s6;
+                case 58:
+                case 59:
+                case 60:
+                    return s8;
 
                 case EOL:
                 case 15:
-                    return s8;
+                    return s6;
 
                 case 23:
-                    return s15;
+                    return s7;
 
                 default:
                     NoViableAltException nvae =
-                        new NoViableAltException("", 49, 8, input);
+                        new NoViableAltException("", 49, 6, input);
 
                     throw nvae;        }
             }
@@ -8734,26 +8950,26 @@
         DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case EOL:
+                case 15:
+                    return s6;
+
+                case 23:
+                    return s7;
+
                 case ID:
                 case 25:
                 case 29:
                 case 34:
-                case 47:
-                case 48:
+                case 51:
                 case 52:
-                case 53:
-                case 54:
-                case 55:
                 case 56:
-                    return s6;
-
-                case EOL:
-                case 15:
+                case 57:
+                case 58:
+                case 59:
+                case 60:
                     return s8;
 
-                case 23:
-                    return s15;
-
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 49, 5, input);
@@ -8853,13 +9069,13 @@
         DFA.State s1 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case ID:
-                    return s2;
-
                 case EOL:
                 case 15:
                     return s1;
 
+                case ID:
+                    return s2;
+
                 case 25:
                     return s3;
 
@@ -8942,32 +9158,32 @@
         public int predict(IntStream input) throws RecognitionException {
             return predict(input, s0);
         }
+        DFA.State s3 = new DFA.State() {{alt=2;}};
         DFA.State s15 = new DFA.State() {{alt=1;}};
-        DFA.State s3 = new DFA.State() {{alt=2;}};
         DFA.State s2 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 33:
-                    return s15;
-
-                case EOL:
-                case 15:
-                    return s2;
-
                 case 24:
                 case 25:
-                case 58:
-                case 59:
-                case 60:
-                case 61:
                 case 62:
                 case 63:
                 case 64:
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s3;
 
+                case EOL:
+                case 15:
+                    return s2;
+
+                case 33:
+                    return s15;
+
                 default:
                     NoViableAltException nvae =
                         new NoViableAltException("", 65, 2, input);
@@ -8984,16 +9200,16 @@
 
                 case 24:
                 case 25:
-                case 58:
-                case 59:
-                case 60:
-                case 61:
                 case 62:
                 case 63:
                 case 64:
                 case 65:
                 case 66:
                 case 67:
+                case 68:
+                case 69:
+                case 70:
+                case 71:
                     return s3;
 
                 case 33:
@@ -9018,6 +9234,66 @@
             }
         };
 
+    }class DFA76 extends DFA {
+        public int predict(IntStream input) throws RecognitionException {
+            return predict(input, s0);
+        }
+        DFA.State s15 = new DFA.State() {{alt=1;}};
+        DFA.State s14 = new DFA.State() {{alt=2;}};
+        DFA.State s13 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case ID:
+                    return s15;
+
+                case EOL:
+                case 15:
+                    return s13;
+
+                case 43:
+                    return s14;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 76, 13, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s1 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case EOL:
+                case 15:
+                    return s13;
+
+                case 43:
+                    return s14;
+
+                case ID:
+                    return s15;
+
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 76, 1, input);
+
+                    throw nvae;        }
+            }
+        };
+        DFA.State s2 = new DFA.State() {{alt=3;}};
+        DFA.State s0 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA76_0 = input.LA(1);
+                if ( LA76_0==42 ) {return s1;}
+                if ( (LA76_0>=EOL && LA76_0<=ID)||LA76_0==15||LA76_0==23||LA76_0==25||LA76_0==29||LA76_0==34||(LA76_0>=51 && LA76_0<=52)||(LA76_0>=56 && LA76_0<=60) ) {return s2;}
+
+                NoViableAltException nvae =
+        	    new NoViableAltException("", 76, 0, input);
+
+                throw nvae;
+            }
+        };
+
     }
 
 
@@ -9062,322 +9338,356 @@
     public static final BitSet FOLLOW_ID_in_global373 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_15_in_global375 = new BitSet(new long[]{0x0000000000008012L});
     public static final BitSet FOLLOW_opt_eol_in_global378 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_18_in_function402 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function404 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_dotted_name_in_function409 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function413 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_function417 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function419 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_function428 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function430 = new BitSet(new long[]{0x0000000002008032L});
-    public static final BitSet FOLLOW_dotted_name_in_function440 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function444 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_argument_name_in_function448 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function450 = new BitSet(new long[]{0x0000000003000000L});
-    public static final BitSet FOLLOW_24_in_function464 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function466 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_dotted_name_in_function471 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function475 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_argument_name_in_function479 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function481 = new BitSet(new long[]{0x0000000003000000L});
-    public static final BitSet FOLLOW_25_in_function506 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function510 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_function514 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_curly_chunk_in_function521 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_function530 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_function538 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_query562 = new BitSet(new long[]{0x0000000010000000L});
-    public static final BitSet FOLLOW_28_in_query568 = new BitSet(new long[]{0x02000035B0020120L});
-    public static final BitSet FOLLOW_word_in_query572 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_query574 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_expander_lhs_block_in_query590 = new BitSet(new long[]{0x0000000020000000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query598 = new BitSet(new long[]{0x0000000020000000L});
-    public static final BitSet FOLLOW_29_in_query613 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_query615 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_template639 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_template645 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_template649 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_EOL_in_template651 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_template_slot_in_template666 = new BitSet(new long[]{0x0000000020000020L});
-    public static final BitSet FOLLOW_29_in_template681 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_EOL_in_template683 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dotted_name_in_template_slot715 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_template_slot719 = new BitSet(new long[]{0x0000000000008010L});
-    public static final BitSet FOLLOW_set_in_template_slot723 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_rule758 = new BitSet(new long[]{0x0000000080000000L});
-    public static final BitSet FOLLOW_31_in_rule764 = new BitSet(new long[]{0x02000035B0020120L});
-    public static final BitSet FOLLOW_word_in_rule768 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule770 = new BitSet(new long[]{0x0000000A00008012L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule781 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule791 = new BitSet(new long[]{0x0000000120008012L});
-    public static final BitSet FOLLOW_32_in_rule800 = new BitSet(new long[]{0x0000000200008012L});
-    public static final BitSet FOLLOW_33_in_rule802 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule805 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_expander_lhs_block_in_rule823 = new BitSet(new long[]{0x0000000020008012L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_rule832 = new BitSet(new long[]{0x0000000020008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule855 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_34_in_rule859 = new BitSet(new long[]{0x0000000200008012L});
-    public static final BitSet FOLLOW_33_in_rule861 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule865 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000000FL});
-    public static final BitSet FOLLOW_EOL_in_rule892 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000000FL});
-    public static final BitSet FOLLOW_29_in_rule922 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule924 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_extra_statement944 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_import_statement_in_extra_statement949 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_extra_statement954 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_extra_statement959 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_rule_attributes978 = new BitSet(new long[]{0x0000000200008012L});
-    public static final BitSet FOLLOW_33_in_rule_attributes981 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule_attributes984 = new BitSet(new long[]{0x000003F001000002L});
-    public static final BitSet FOLLOW_24_in_rule_attributes991 = new BitSet(new long[]{0x000003F000000000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes996 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_rule_attributes998 = new BitSet(new long[]{0x000003F001000002L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute1037 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute1047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1058 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1071 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1085 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1096 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_salience1129 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_salience1131 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_INT_in_salience1135 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_salience1137 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_salience1140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_no_loop1175 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1177 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_no_loop1179 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1182 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_no_loop1207 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1211 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1213 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_no_loop1215 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_no_loop1218 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_38_in_auto_focus1264 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1266 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_auto_focus1268 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1271 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_38_in_auto_focus1296 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1300 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1302 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_auto_focus1304 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_auto_focus1307 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_39_in_activation_group1349 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_activation_group1351 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1355 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_activation_group1357 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_activation_group1360 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_40_in_agenda_group1389 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_agenda_group1391 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1395 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_agenda_group1397 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_agenda_group1400 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_41_in_duration1432 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_duration1434 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_INT_in_duration1438 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_15_in_duration1440 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_duration1443 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1469 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1471 = new BitSet(new long[]{0x01C0000000808032L});
-    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1483 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expander_lhs_block1524 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1528 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1543 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1585 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_column1613 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_column1622 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_42_in_from_statement1650 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_from_statement1652 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_from_source_in_from_statement1656 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source1700 = new BitSet(new long[]{0x0000000000080000L});
-    public static final BitSet FOLLOW_19_in_from_source1702 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_from_source1706 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source1733 = new BitSet(new long[]{0x0000000000080000L});
-    public static final BitSet FOLLOW_19_in_from_source1735 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_from_source1739 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_from_source1741 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_from_source1744 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_from_source1746 = new BitSet(new long[]{0x00002800040003E2L});
-    public static final BitSet FOLLOW_argument_list_in_from_source1750 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_from_source1752 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_from_source1754 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source1776 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_from_source1778 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_from_source1780 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_from_source1782 = new BitSet(new long[]{0x00002800040003E2L});
-    public static final BitSet FOLLOW_argument_list_in_from_source1786 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_from_source1788 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_from_source1790 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_argument_value_in_argument_list1833 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_argument_list1849 = new BitSet(new long[]{0x0000000001000000L});
-    public static final BitSet FOLLOW_24_in_argument_list1851 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_argument_list1853 = new BitSet(new long[]{0x00002800040003E0L});
-    public static final BitSet FOLLOW_argument_value_in_argument_list1857 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_STRING_in_argument_value1897 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_argument_value1908 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_argument_value1921 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_argument_value1932 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument_value1944 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_43_in_argument_value1955 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_43_in_argument_value1966 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_inline_map_in_argument_value1985 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_inline_array_in_argument_value2001 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_26_in_inline_map2041 = new BitSet(new long[]{0x00002800040003E0L});
-    public static final BitSet FOLLOW_argument_value_in_inline_map2059 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_inline_map2061 = new BitSet(new long[]{0x00002800040003E0L});
-    public static final BitSet FOLLOW_argument_value_in_inline_map2065 = new BitSet(new long[]{0x0000000009000010L});
-    public static final BitSet FOLLOW_EOL_in_inline_map2108 = new BitSet(new long[]{0x0000000001000000L});
-    public static final BitSet FOLLOW_24_in_inline_map2112 = new BitSet(new long[]{0x00002800040003F0L});
-    public static final BitSet FOLLOW_EOL_in_inline_map2115 = new BitSet(new long[]{0x00002800040003E0L});
-    public static final BitSet FOLLOW_argument_value_in_inline_map2121 = new BitSet(new long[]{0x0000100000000000L});
-    public static final BitSet FOLLOW_44_in_inline_map2123 = new BitSet(new long[]{0x00002800040003E0L});
-    public static final BitSet FOLLOW_argument_value_in_inline_map2127 = new BitSet(new long[]{0x0000000009000010L});
-    public static final BitSet FOLLOW_27_in_inline_map2163 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_45_in_inline_array2207 = new BitSet(new long[]{0x00002800040003E0L});
-    public static final BitSet FOLLOW_argument_value_in_inline_array2211 = new BitSet(new long[]{0x0000400001000010L});
-    public static final BitSet FOLLOW_EOL_in_inline_array2229 = new BitSet(new long[]{0x0000000001000000L});
-    public static final BitSet FOLLOW_24_in_inline_array2232 = new BitSet(new long[]{0x00002800040003F0L});
-    public static final BitSet FOLLOW_EOL_in_inline_array2234 = new BitSet(new long[]{0x00002800040003E0L});
-    public static final BitSet FOLLOW_argument_value_in_inline_array2239 = new BitSet(new long[]{0x0000400001000010L});
-    public static final BitSet FOLLOW_46_in_inline_array2252 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_fact_binding2295 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_binding2305 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_fact_binding2307 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_binding2309 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_binding2313 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_fact_expression2345 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression2347 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression2351 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression2353 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_fact_expression2355 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_expression2366 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression2368 = new BitSet(new long[]{0x0001800000000002L});
-    public static final BitSet FOLLOW_set_in_fact_expression2381 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact_expression2386 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_fact_in_fact_expression2400 = new BitSet(new long[]{0x0001800000000002L});
-    public static final BitSet FOLLOW_dotted_name_in_fact2439 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact2447 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_fact2455 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact2458 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_constraints_in_fact2464 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact2483 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_fact2487 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_fact2489 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints2521 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_constraint_in_constraints2526 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_predicate_in_constraints2529 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints2537 = new BitSet(new long[]{0x0000000001000000L});
-    public static final BitSet FOLLOW_24_in_constraints2539 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints2541 = new BitSet(new long[]{0x0000000000008032L});
-    public static final BitSet FOLLOW_constraint_in_constraints2544 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_predicate_in_constraints2547 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraints2555 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2574 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_constraint2582 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2584 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_constraint2586 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2588 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_constraint2598 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2612 = new BitSet(new long[]{0xFC00000000008012L,0x000000000000000FL});
-    public static final BitSet FOLLOW_operator_in_constraint2618 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2620 = new BitSet(new long[]{0x00000800008003E0L});
-    public static final BitSet FOLLOW_ID_in_constraint2638 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_enum_constraint_in_constraint2663 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_literal_constraint_in_constraint2695 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_retval_constraint_in_constraint2715 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_set_in_constraint2750 = new BitSet(new long[]{0xFC00000000000000L,0x000000000000000FL});
-    public static final BitSet FOLLOW_operator_in_constraint2772 = new BitSet(new long[]{0x00000800008003E0L});
-    public static final BitSet FOLLOW_ID_in_constraint2784 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_enum_constraint_in_constraint2812 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_literal_constraint_in_constraint2847 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_retval_constraint_in_constraint2869 = new BitSet(new long[]{0x0006000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_constraint2925 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint2952 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint2963 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint2976 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint2987 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_43_in_literal_constraint2999 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint3030 = new BitSet(new long[]{0x0000000000080000L});
-    public static final BitSet FOLLOW_19_in_enum_constraint3032 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint3036 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_retval_constraint3065 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint3070 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_retval_constraint3073 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_predicate3091 = new BitSet(new long[]{0x0000000200000000L});
-    public static final BitSet FOLLOW_33_in_predicate3093 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_predicate3097 = new BitSet(new long[]{0x0008000000000000L});
-    public static final BitSet FOLLOW_51_in_predicate3099 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_predicate3101 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate3105 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_predicate3107 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_paren_chunk3153 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk3157 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_paren_chunk3159 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_23_in_paren_chunk23230 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_paren_chunk2_in_paren_chunk23234 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_paren_chunk23236 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_26_in_curly_chunk3305 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk3309 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_curly_chunk3311 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3369 = new BitSet(new long[]{0x0001800000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_or3378 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_or3383 = new BitSet(new long[]{0x01C0000000800020L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3390 = new BitSet(new long[]{0x0001800000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3430 = new BitSet(new long[]{0x0030000000000002L});
-    public static final BitSet FOLLOW_set_in_lhs_and3439 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_and3444 = new BitSet(new long[]{0x01C0000000800020L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3451 = new BitSet(new long[]{0x0030000000000002L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3489 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3499 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3509 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_unary3523 = new BitSet(new long[]{0x0000040000000002L});
-    public static final BitSet FOLLOW_from_statement_in_lhs_unary3530 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_lhs_unary3540 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_unary3542 = new BitSet(new long[]{0x01C0000000800020L});
-    public static final BitSet FOLLOW_lhs_in_lhs_unary3546 = new BitSet(new long[]{0x0000000000008012L});
-    public static final BitSet FOLLOW_opt_eol_in_lhs_unary3548 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_unary3550 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_54_in_lhs_exist3581 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_23_in_lhs_exist3584 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_exist3588 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_exist3590 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_exist3596 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_55_in_lhs_not3626 = new BitSet(new long[]{0x0000000000800020L});
-    public static final BitSet FOLLOW_23_in_lhs_not3629 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_not3633 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_not3636 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_column_in_lhs_not3642 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_56_in_lhs_eval3668 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_23_in_lhs_eval3672 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x000000000000000FL});
-    public static final BitSet FOLLOW_paren_chunk2_in_lhs_eval3680 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_lhs_eval3684 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dotted_name3716 = new BitSet(new long[]{0x0000200000080002L});
-    public static final BitSet FOLLOW_19_in_dotted_name3722 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_ID_in_dotted_name3726 = new BitSet(new long[]{0x0000200000080002L});
-    public static final BitSet FOLLOW_45_in_dotted_name3735 = new BitSet(new long[]{0x0000400000000000L});
-    public static final BitSet FOLLOW_46_in_dotted_name3737 = new BitSet(new long[]{0x0000200000000002L});
-    public static final BitSet FOLLOW_ID_in_argument_name3767 = new BitSet(new long[]{0x0000200000000002L});
-    public static final BitSet FOLLOW_45_in_argument_name3773 = new BitSet(new long[]{0x0000400000000000L});
-    public static final BitSet FOLLOW_46_in_argument_name3775 = new BitSet(new long[]{0x0000200000000002L});
-    public static final BitSet FOLLOW_ID_in_word3803 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_word3815 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_57_in_word3824 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_word3836 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_word3847 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_word3857 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_word3865 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_word3873 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_34_in_word3884 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_29_in_word3895 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_word3909 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_58_in_operator3938 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_59_in_operator3945 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_60_in_operator3952 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_61_in_operator3959 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_62_in_operator3968 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_63_in_operator3975 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_64_in_operator3982 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_65_in_operator3989 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_66_in_operator3996 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_67_in_operator4003 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_function404 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function406 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_dotted_name_in_function411 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function415 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_function419 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function421 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_function430 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function432 = new BitSet(new long[]{0x0000000002008032L});
+    public static final BitSet FOLLOW_dotted_name_in_function442 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function446 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_argument_name_in_function450 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function452 = new BitSet(new long[]{0x0000000003000000L});
+    public static final BitSet FOLLOW_24_in_function466 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function468 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_dotted_name_in_function473 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function477 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_argument_name_in_function481 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function483 = new BitSet(new long[]{0x0000000003000000L});
+    public static final BitSet FOLLOW_25_in_function508 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function512 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_function516 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_curly_chunk_in_function523 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_function532 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_function540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_query564 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_28_in_query570 = new BitSet(new long[]{0x20000035B0020120L});
+    public static final BitSet FOLLOW_word_in_query574 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_query576 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_expander_lhs_block_in_query592 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query600 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_29_in_query615 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_query617 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_template641 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_template647 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_template651 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_EOL_in_template653 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_template_slot_in_template668 = new BitSet(new long[]{0x0000000020000020L});
+    public static final BitSet FOLLOW_29_in_template683 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_EOL_in_template685 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_template_slot717 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_template_slot721 = new BitSet(new long[]{0x0000000000008010L});
+    public static final BitSet FOLLOW_set_in_template_slot725 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_rule760 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_31_in_rule766 = new BitSet(new long[]{0x20000035B0020120L});
+    public static final BitSet FOLLOW_word_in_rule770 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule772 = new BitSet(new long[]{0x0000000A00008012L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule783 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule793 = new BitSet(new long[]{0x0000000120008012L});
+    public static final BitSet FOLLOW_32_in_rule802 = new BitSet(new long[]{0x0000000200008012L});
+    public static final BitSet FOLLOW_33_in_rule804 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule807 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_expander_lhs_block_in_rule825 = new BitSet(new long[]{0x0000000020008012L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_rule834 = new BitSet(new long[]{0x0000000020008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule857 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_34_in_rule861 = new BitSet(new long[]{0x0000000200008012L});
+    public static final BitSet FOLLOW_33_in_rule863 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule867 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_EOL_in_rule894 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_29_in_rule924 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule926 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_extra_statement946 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_extra_statement951 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_extra_statement956 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_extra_statement961 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_rule_attributes980 = new BitSet(new long[]{0x0000000200008012L});
+    public static final BitSet FOLLOW_33_in_rule_attributes983 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule_attributes986 = new BitSet(new long[]{0x000003F001000002L});
+    public static final BitSet FOLLOW_24_in_rule_attributes993 = new BitSet(new long[]{0x000003F000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes998 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_rule_attributes1000 = new BitSet(new long[]{0x000003F001000002L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1039 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1049 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1060 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1073 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1087 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1098 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_salience1131 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_salience1133 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_INT_in_salience1137 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_salience1139 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_salience1142 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_no_loop1177 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1179 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_no_loop1181 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1184 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_no_loop1209 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1213 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1215 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_no_loop1217 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_no_loop1220 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_auto_focus1266 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1268 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_auto_focus1270 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_auto_focus1298 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1302 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1304 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_auto_focus1306 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_auto_focus1309 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_39_in_activation_group1351 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_activation_group1353 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1357 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_activation_group1359 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_activation_group1362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_40_in_agenda_group1391 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_agenda_group1393 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1397 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_agenda_group1399 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_agenda_group1402 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_duration1434 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_duration1436 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_INT_in_duration1440 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_15_in_duration1442 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_duration1445 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1471 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1473 = new BitSet(new long[]{0x1C00000000808032L});
+    public static final BitSet FOLLOW_opt_eol_in_normal_lhs_block1485 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expander_lhs_block1526 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1530 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_EOL_in_expander_lhs_block1545 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1587 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_column1615 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_column1624 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_42_in_from_statement1652 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_statement1654 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_from_source_in_from_statement1658 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source1702 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_19_in_from_source1704 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_from_source1708 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source1735 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_19_in_from_source1737 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_from_source1741 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1743 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_from_source1746 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1748 = new BitSet(new long[]{0x00028000040003E2L});
+    public static final BitSet FOLLOW_argument_list_in_from_source1752 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1754 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_from_source1756 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source1778 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1780 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_from_source1782 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1784 = new BitSet(new long[]{0x00028000040003E2L});
+    public static final BitSet FOLLOW_argument_list_in_from_source1788 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_from_source1790 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_from_source1792 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_42_in_accumulate_statement1841 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1843 = new BitSet(new long[]{0x0000080000000000L});
+    public static final BitSet FOLLOW_43_in_accumulate_statement1845 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1847 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_accumulate_statement1857 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1859 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_accumulate_statement1863 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1865 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_accumulate_statement1867 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1869 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_accumulate_statement1877 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1879 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_accumulate_statement1881 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk2_in_accumulate_statement1885 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_accumulate_statement1887 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1889 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_accumulate_statement1891 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1893 = new BitSet(new long[]{0x0000200000000000L});
+    public static final BitSet FOLLOW_45_in_accumulate_statement1901 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1903 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_accumulate_statement1905 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk2_in_accumulate_statement1909 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_accumulate_statement1911 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1913 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_accumulate_statement1915 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1917 = new BitSet(new long[]{0x0000400000000000L});
+    public static final BitSet FOLLOW_46_in_accumulate_statement1925 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1927 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_accumulate_statement1929 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk2_in_accumulate_statement1933 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_accumulate_statement1935 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_accumulate_statement1937 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_accumulate_statement1939 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_argument_value_in_argument_list1976 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_argument_list1992 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_argument_list1994 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_argument_list1996 = new BitSet(new long[]{0x00028000040003E0L});
+    public static final BitSet FOLLOW_argument_value_in_argument_list2000 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_STRING_in_argument_value2040 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_argument_value2051 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_argument_value2064 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_argument_value2075 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument_value2087 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_47_in_argument_value2098 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_47_in_argument_value2109 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_inline_map_in_argument_value2128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_inline_array_in_argument_value2144 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_inline_map2184 = new BitSet(new long[]{0x00028000040003E0L});
+    public static final BitSet FOLLOW_argument_value_in_inline_map2202 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_48_in_inline_map2204 = new BitSet(new long[]{0x00028000040003E0L});
+    public static final BitSet FOLLOW_argument_value_in_inline_map2208 = new BitSet(new long[]{0x0000000009000010L});
+    public static final BitSet FOLLOW_EOL_in_inline_map2251 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_inline_map2255 = new BitSet(new long[]{0x00028000040003F0L});
+    public static final BitSet FOLLOW_EOL_in_inline_map2258 = new BitSet(new long[]{0x00028000040003E0L});
+    public static final BitSet FOLLOW_argument_value_in_inline_map2264 = new BitSet(new long[]{0x0001000000000000L});
+    public static final BitSet FOLLOW_48_in_inline_map2266 = new BitSet(new long[]{0x00028000040003E0L});
+    public static final BitSet FOLLOW_argument_value_in_inline_map2270 = new BitSet(new long[]{0x0000000009000010L});
+    public static final BitSet FOLLOW_27_in_inline_map2306 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_49_in_inline_array2350 = new BitSet(new long[]{0x00028000040003E0L});
+    public static final BitSet FOLLOW_argument_value_in_inline_array2354 = new BitSet(new long[]{0x0004000001000010L});
+    public static final BitSet FOLLOW_EOL_in_inline_array2372 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_inline_array2375 = new BitSet(new long[]{0x00028000040003F0L});
+    public static final BitSet FOLLOW_EOL_in_inline_array2377 = new BitSet(new long[]{0x00028000040003E0L});
+    public static final BitSet FOLLOW_argument_value_in_inline_array2382 = new BitSet(new long[]{0x0004000001000010L});
+    public static final BitSet FOLLOW_50_in_inline_array2395 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_fact_binding2438 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_binding2448 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_fact_binding2450 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_binding2452 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_binding2456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_fact_expression2488 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression2490 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2494 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression2496 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_fact_expression2498 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2509 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression2511 = new BitSet(new long[]{0x0018000000000002L});
+    public static final BitSet FOLLOW_set_in_fact_expression2524 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact_expression2529 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2543 = new BitSet(new long[]{0x0018000000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_fact2582 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2590 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_fact2598 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2601 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_constraints_in_fact2607 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2626 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_fact2630 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_fact2632 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2664 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_constraint_in_constraints2669 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_predicate_in_constraints2672 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2680 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_constraints2682 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2684 = new BitSet(new long[]{0x0000000000008032L});
+    public static final BitSet FOLLOW_constraint_in_constraints2687 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_predicate_in_constraints2690 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraints2698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2717 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_constraint2725 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2727 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_constraint2729 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2731 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_constraint2741 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2755 = new BitSet(new long[]{0xC000000000008012L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_operator_in_constraint2761 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint2763 = new BitSet(new long[]{0x00008000008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint2781 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint2806 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint2838 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint2858 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_set_in_constraint2893 = new BitSet(new long[]{0xC000000000000000L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_operator_in_constraint2915 = new BitSet(new long[]{0x00008000008003E0L});
+    public static final BitSet FOLLOW_ID_in_constraint2927 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_enum_constraint_in_constraint2955 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_literal_constraint_in_constraint2990 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_retval_constraint_in_constraint3012 = new BitSet(new long[]{0x0060000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_constraint3068 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint3095 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint3106 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint3119 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint3130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_47_in_literal_constraint3142 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint3173 = new BitSet(new long[]{0x0000000000080000L});
+    public static final BitSet FOLLOW_19_in_enum_constraint3175 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint3179 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_retval_constraint3208 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint3213 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_retval_constraint3216 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_predicate3234 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_33_in_predicate3236 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_predicate3240 = new BitSet(new long[]{0x0080000000000000L});
+    public static final BitSet FOLLOW_55_in_predicate3242 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_predicate3244 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk_in_predicate3248 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_predicate3250 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_paren_chunk3296 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk3300 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk3302 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_23_in_paren_chunk23373 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk2_in_paren_chunk23377 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_paren_chunk23379 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_26_in_curly_chunk3448 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk3452 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_curly_chunk3454 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3512 = new BitSet(new long[]{0x0018000000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_or3521 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_or3526 = new BitSet(new long[]{0x1C00000000800020L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3533 = new BitSet(new long[]{0x0018000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3573 = new BitSet(new long[]{0x0300000000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_and3582 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_and3587 = new BitSet(new long[]{0x1C00000000800020L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3594 = new BitSet(new long[]{0x0300000000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3632 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3642 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3652 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_unary3666 = new BitSet(new long[]{0x0000040000000002L});
+    public static final BitSet FOLLOW_from_statement_in_lhs_unary3687 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_statement_in_lhs_unary3709 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_lhs_unary3721 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary3723 = new BitSet(new long[]{0x1C00000000800020L});
+    public static final BitSet FOLLOW_lhs_in_lhs_unary3727 = new BitSet(new long[]{0x0000000000008012L});
+    public static final BitSet FOLLOW_opt_eol_in_lhs_unary3729 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_unary3731 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_58_in_lhs_exist3762 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_exist3765 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist3769 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_exist3771 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_exist3777 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_59_in_lhs_not3807 = new BitSet(new long[]{0x0000000000800020L});
+    public static final BitSet FOLLOW_23_in_lhs_not3810 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not3814 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_not3817 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_column_in_lhs_not3823 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_60_in_lhs_eval3849 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_23_in_lhs_eval3853 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF2L,0x00000000000000FFL});
+    public static final BitSet FOLLOW_paren_chunk2_in_lhs_eval3861 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_lhs_eval3865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dotted_name3897 = new BitSet(new long[]{0x0002000000080002L});
+    public static final BitSet FOLLOW_19_in_dotted_name3903 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_ID_in_dotted_name3907 = new BitSet(new long[]{0x0002000000080002L});
+    public static final BitSet FOLLOW_49_in_dotted_name3916 = new BitSet(new long[]{0x0004000000000000L});
+    public static final BitSet FOLLOW_50_in_dotted_name3918 = new BitSet(new long[]{0x0002000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument_name3948 = new BitSet(new long[]{0x0002000000000002L});
+    public static final BitSet FOLLOW_49_in_argument_name3954 = new BitSet(new long[]{0x0004000000000000L});
+    public static final BitSet FOLLOW_50_in_argument_name3956 = new BitSet(new long[]{0x0002000000000002L});
+    public static final BitSet FOLLOW_ID_in_word3984 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_word3996 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_61_in_word4005 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_word4017 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_word4028 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_word4038 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_word4046 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_word4054 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_word4065 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_word4076 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_word4090 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_62_in_operator4119 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_63_in_operator4126 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_64_in_operator4133 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_65_in_operator4140 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_66_in_operator4149 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_67_in_operator4156 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_68_in_operator4163 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_69_in_operator4170 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_70_in_operator4177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_71_in_operator4184 = 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-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/RuleParserLexer.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -1,8 +1,8 @@
-// $ANTLR 3.0ea8 /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g 2006-09-01 12:37:59
+// $ANTLR 3.0ea8 D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g 2006-09-06 10:48:08
+
+	package org.drools.lang;
 
-	package org.drools.lang;
 
-
 import org.antlr.runtime.*;
 import java.util.Stack;
 import java.util.List;
@@ -13,6 +13,7 @@
     public static final int T29=29;
     public static final int T36=36;
     public static final int T58=58;
+    public static final int T70=70;
     public static final int MISC=10;
     public static final int FLOAT=9;
     public static final int T35=35;
@@ -36,14 +37,16 @@
     public static final int T41=41;
     public static final int T24=24;
     public static final int T19=19;
+    public static final int T69=69;
     public static final int T39=39;
     public static final int ID=5;
     public static final int T21=21;
-    public static final int Synpred1_fragment=69;
+    public static final int Synpred1_fragment=73;
     public static final int T62=62;
     public static final int T44=44;
     public static final int T55=55;
     public static final int BOOL=7;
+    public static final int T68=68;
     public static final int T33=33;
     public static final int T22=22;
     public static final int T50=50;
@@ -55,6 +58,7 @@
     public static final int T42=42;
     public static final int T66=66;
     public static final int T40=40;
+    public static final int T71=71;
     public static final int T63=63;
     public static final int T57=57;
     public static final int T65=65;
@@ -67,7 +71,7 @@
     public static final int T67=67;
     public static final int T47=47;
     public static final int EOL=4;
-    public static final int Tokens=68;
+    public static final int Tokens=72;
     public static final int T53=53;
     public static final int T60=60;
     public static final int T31=31;
@@ -80,7 +84,7 @@
     public RuleParserLexer() {;} 
     public RuleParserLexer(CharStream input) {
         super(input);
-        ruleMemo = new Map[66+1];
+        ruleMemo = new Map[70+1];
      }
 
 
@@ -94,8 +98,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 1) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:6:7: ( ';' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:6:7: ';'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:6:7: ( ';' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:6:7: ';'
             {
             match(';'); if (failed) return ;
 
@@ -120,8 +124,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 2) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:7:7: ( 'package' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:7:7: 'package'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:7:7: ( 'package' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:7:7: 'package'
             {
             match("package"); if (failed) return ;
 
@@ -147,8 +151,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 3) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:8:7: ( 'import' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:8:7: 'import'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:8:7: ( 'import' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:8:7: 'import'
             {
             match("import"); if (failed) return ;
 
@@ -174,8 +178,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 4) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:9:7: ( 'function' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:9:7: 'function'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:9:7: ( 'function' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:9:7: 'function'
             {
             match("function"); if (failed) return ;
 
@@ -201,8 +205,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 5) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:10:7: ( '.' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:10:7: '.'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:10:7: ( '.' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:10:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -227,8 +231,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 6) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:11:7: ( '.*' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:11:7: '.*'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:11:7: ( '.*' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:11:7: '.*'
             {
             match(".*"); if (failed) return ;
 
@@ -254,8 +258,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 7) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:12:7: ( 'expander' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:12:7: 'expander'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:12:7: ( 'expander' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:12:7: 'expander'
             {
             match("expander"); if (failed) return ;
 
@@ -281,8 +285,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 8) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:13:7: ( 'global' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:13:7: 'global'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:13:7: ( 'global' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:13:7: 'global'
             {
             match("global"); if (failed) return ;
 
@@ -308,8 +312,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 9) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:14:7: ( '(' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:14:7: '('
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:14:7: ( '(' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:14:7: '('
             {
             match('('); if (failed) return ;
 
@@ -334,8 +338,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 10) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:15:7: ( ',' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:15:7: ','
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:15:7: ( ',' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:15:7: ','
             {
             match(','); if (failed) return ;
 
@@ -360,8 +364,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 11) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:16:7: ( ')' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:16:7: ')'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:16:7: ( ')' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:16:7: ')'
             {
             match(')'); if (failed) return ;
 
@@ -386,8 +390,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 12) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:17:7: ( '{' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:17:7: '{'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:17:7: ( '{' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:17:7: '{'
             {
             match('{'); if (failed) return ;
 
@@ -412,8 +416,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 13) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:18:7: ( '}' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:18:7: '}'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:18:7: ( '}' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:18:7: '}'
             {
             match('}'); if (failed) return ;
 
@@ -438,8 +442,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 14) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:19:7: ( 'query' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:19:7: 'query'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:19:7: ( 'query' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:19:7: 'query'
             {
             match("query"); if (failed) return ;
 
@@ -465,8 +469,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 15) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:20:7: ( 'end' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:20:7: 'end'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:20:7: ( 'end' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:20:7: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -492,8 +496,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 16) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:21:7: ( 'template' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:21:7: 'template'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:21:7: ( 'template' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:21:7: 'template'
             {
             match("template"); if (failed) return ;
 
@@ -519,8 +523,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 17) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:22:7: ( 'rule' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:22:7: 'rule'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:22:7: ( 'rule' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:22:7: 'rule'
             {
             match("rule"); if (failed) return ;
 
@@ -546,8 +550,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 18) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:23:7: ( 'when' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:23:7: 'when'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:23:7: ( 'when' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:23:7: 'when'
             {
             match("when"); if (failed) return ;
 
@@ -573,8 +577,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 19) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:24:7: ( ':' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:24:7: ':'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:24:7: ( ':' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:24:7: ':'
             {
             match(':'); if (failed) return ;
 
@@ -599,8 +603,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 20) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:25:7: ( 'then' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:25:7: 'then'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:25:7: ( 'then' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:25:7: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -626,8 +630,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 21) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:26:7: ( 'attributes' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:26:7: 'attributes'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:26:7: ( 'attributes' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:26:7: 'attributes'
             {
             match("attributes"); if (failed) return ;
 
@@ -653,8 +657,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 22) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:27:7: ( 'salience' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:27:7: 'salience'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:27:7: ( 'salience' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:27:7: 'salience'
             {
             match("salience"); if (failed) return ;
 
@@ -680,8 +684,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 23) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:28:7: ( 'no-loop' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:28:7: 'no-loop'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:28:7: ( 'no-loop' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:28:7: 'no-loop'
             {
             match("no-loop"); if (failed) return ;
 
@@ -707,8 +711,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 24) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:29:7: ( 'auto-focus' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:29:7: 'auto-focus'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:29:7: ( 'auto-focus' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:29:7: 'auto-focus'
             {
             match("auto-focus"); if (failed) return ;
 
@@ -734,8 +738,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 25) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:30:7: ( 'activation-group' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:30:7: 'activation-group'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:30:7: ( 'activation-group' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:30:7: 'activation-group'
             {
             match("activation-group"); if (failed) return ;
 
@@ -761,8 +765,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 26) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:31:7: ( 'agenda-group' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:31:7: 'agenda-group'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:31:7: ( 'agenda-group' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:31:7: 'agenda-group'
             {
             match("agenda-group"); if (failed) return ;
 
@@ -788,8 +792,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 27) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:32:7: ( 'duration' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:32:7: 'duration'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:32:7: ( 'duration' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:32:7: 'duration'
             {
             match("duration"); if (failed) return ;
 
@@ -815,8 +819,8 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 28) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:33:7: ( 'from' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:33:7: 'from'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:33:7: ( 'from' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:33:7: 'from'
             {
             match("from"); if (failed) return ;
 
@@ -842,10 +846,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 29) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: ( 'null' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:34:7: 'null'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:34:7: ( 'accumulate' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:34:7: 'accumulate'
             {
-            match("null"); if (failed) return ;
+            match("accumulate"); if (failed) return ;
 
 
             }
@@ -869,10 +873,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: '=>'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:35:7: ( 'init' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:35:7: 'init'
             {
-            match("=>"); if (failed) return ;
+            match("init"); if (failed) return ;
 
 
             }
@@ -896,11 +900,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 31) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: ( '[' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:36:7: '['
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:36:7: ( 'action' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:36:7: 'action'
             {
-            match('['); if (failed) return ;
+            match("action"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -922,11 +927,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: ']'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:37:7: ( 'result' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:37:7: 'result'
             {
-            match(']'); if (failed) return ;
+            match("result"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -948,10 +954,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: ( 'or' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:38:7: 'or'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:38:7: ( 'null' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:38:7: 'null'
             {
-            match("or"); if (failed) return ;
+            match("null"); if (failed) return ;
 
 
             }
@@ -975,10 +981,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: '||'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:39:7: ( '=>' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:39:7: '=>'
             {
-            match("||"); if (failed) return ;
+            match("=>"); if (failed) return ;
 
 
             }
@@ -1002,10 +1008,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 35) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: ( '&' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:40:7: '&'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:40:7: ( '[' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:40:7: '['
             {
-            match('&'); if (failed) return ;
+            match('['); if (failed) return ;
 
             }
 
@@ -1028,10 +1034,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: ( '|' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:41:7: '|'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:41:7: ( ']' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:41:7: ']'
             {
-            match('|'); if (failed) return ;
+            match(']'); if (failed) return ;
 
             }
 
@@ -1054,10 +1060,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: ( '->' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:42:7: '->'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:42:7: ( 'or' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:42:7: 'or'
             {
-            match("->"); if (failed) return ;
+            match("or"); if (failed) return ;
 
 
             }
@@ -1081,10 +1087,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 38) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: ( 'and' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:43:7: 'and'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:43:7: ( '||' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:43:7: '||'
             {
-            match("and"); if (failed) return ;
+            match("||"); if (failed) return ;
 
 
             }
@@ -1108,12 +1114,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: '&&'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:44:7: ( '&' )
+            // D:\workspace\jboss\jbossrules\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);}
@@ -1135,12 +1140,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 40) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: ( 'exists' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:45:7: 'exists'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:45:7: ( '|' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:45:7: '|'
             {
-            match("exists"); if (failed) return ;
+            match('|'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1162,10 +1166,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: ( 'not' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:46:7: 'not'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:46:7: ( '->' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:46:7: '->'
             {
-            match("not"); if (failed) return ;
+            match("->"); if (failed) return ;
 
 
             }
@@ -1189,10 +1193,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 42) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: ( 'eval' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:47:7: 'eval'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:47:7: ( 'and' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:47:7: 'and'
             {
-            match("eval"); if (failed) return ;
+            match("and"); if (failed) return ;
 
 
             }
@@ -1216,10 +1220,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: ( 'use' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:48:7: 'use'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:48:7: ( '&&' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:48:7: '&&'
             {
-            match("use"); if (failed) return ;
+            match("&&"); if (failed) return ;
 
 
             }
@@ -1243,10 +1247,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 44) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: ( '==' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:49:7: '=='
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:49:7: ( 'exists' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:49:7: 'exists'
             {
-            match("=="); if (failed) return ;
+            match("exists"); if (failed) return ;
 
 
             }
@@ -1270,11 +1274,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: '='
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:50:7: ( 'not' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:50:7: 'not'
             {
-            match('='); if (failed) return ;
+            match("not"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1296,11 +1301,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: '>'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:51:7: ( 'eval' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:51:7: 'eval'
             {
-            match('>'); if (failed) return ;
+            match("eval"); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1322,10 +1328,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 47) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: ( '>=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:52:7: '>='
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:52:7: ( 'use' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:52:7: 'use'
             {
-            match(">="); if (failed) return ;
+            match("use"); if (failed) return ;
 
 
             }
@@ -1349,11 +1355,12 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 48) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: ( '<' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:53:7: '<'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:53:7: ( '==' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:53:7: '=='
             {
-            match('<'); if (failed) return ;
+            match("=="); if (failed) return ;
 
+
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1375,12 +1382,11 @@
             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: ( '<=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:54:7: '<='
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:54:7: ( '=' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:54:7: '='
             {
-            match("<="); if (failed) return ;
+            match('='); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1402,12 +1408,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 50) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:55:7: ( '!=' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:55:7: '!='
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:55:7: ( '>' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:55:7: '>'
             {
-            match("!="); if (failed) return ;
+            match('>'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1429,10 +1434,10 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 51) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:56:7: ( 'contains' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:56:7: 'contains'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:56:7: ( '>=' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:56:7: '>='
             {
-            match("contains"); if (failed) return ;
+            match(">="); if (failed) return ;
 
 
             }
@@ -1456,12 +1461,11 @@
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
             if ( backtracking>0 && alreadyParsedRule(input, 52) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:57:7: ( 'matches' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:57:7: 'matches'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:57:7: ( '<' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:57:7: '<'
             {
-            match("matches"); if (failed) return ;
+            match('<'); if (failed) return ;
 
-
             }
 
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
@@ -1483,10 +1487,10 @@
             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:58:7: ( 'excludes' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:58:7: 'excludes'
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:58:7: ( '<=' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:58:7: '<='
             {
-            match("excludes"); if (failed) return ;
+            match("<="); if (failed) return ;
 
 
             }
@@ -1500,6 +1504,114 @@
     // $ANTLR end T67
 
 
+    // $ANTLR start T68
+    public void mT68() throws RecognitionException {
+        int T68_StartIndex = input.index();
+        try {
+            int type = T68;
+            int start = getCharIndex();
+            int line = getLine();
+            int charPosition = getCharPositionInLine();
+            int channel = Token.DEFAULT_CHANNEL;
+            if ( backtracking>0 && alreadyParsedRule(input, 54) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:59:7: ( '!=' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:59:7: '!='
+            {
+            match("!="); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 54, T68_StartIndex); }
+        }
+    }
+    // $ANTLR end T68
+
+
+    // $ANTLR start T69
+    public void mT69() throws RecognitionException {
+        int T69_StartIndex = input.index();
+        try {
+            int type = T69;
+            int start = getCharIndex();
+            int line = getLine();
+            int charPosition = getCharPositionInLine();
+            int channel = Token.DEFAULT_CHANNEL;
+            if ( backtracking>0 && alreadyParsedRule(input, 55) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:60:7: ( 'contains' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:60:7: 'contains'
+            {
+            match("contains"); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 55, T69_StartIndex); }
+        }
+    }
+    // $ANTLR end T69
+
+
+    // $ANTLR start T70
+    public void mT70() throws RecognitionException {
+        int T70_StartIndex = input.index();
+        try {
+            int type = T70;
+            int start = getCharIndex();
+            int line = getLine();
+            int charPosition = getCharPositionInLine();
+            int channel = Token.DEFAULT_CHANNEL;
+            if ( backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:61:7: ( 'matches' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:61:7: 'matches'
+            {
+            match("matches"); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 56, T70_StartIndex); }
+        }
+    }
+    // $ANTLR end T70
+
+
+    // $ANTLR start T71
+    public void mT71() throws RecognitionException {
+        int T71_StartIndex = input.index();
+        try {
+            int type = T71;
+            int start = getCharIndex();
+            int line = getLine();
+            int charPosition = getCharPositionInLine();
+            int channel = Token.DEFAULT_CHANNEL;
+            if ( backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:62:7: ( 'excludes' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:62:7: 'excludes'
+            {
+            match("excludes"); if (failed) return ;
+
+
+            }
+
+            if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
+        }
+        finally {
+            if ( backtracking>0 ) { memoize(input, 57, T71_StartIndex); }
+        }
+    }
+    // $ANTLR end T71
+
+
     // $ANTLR start MISC
     public void mMISC() throws RecognitionException {
         int MISC_StartIndex = input.index();
@@ -1509,8 +1621,8 @@
             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:1312:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
+            if ( backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:17: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\' | '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' | '*=' | '=*' | '/=' | '=/' | '>>=' )
             int alt1=39;
             switch ( input.LA(1) ) {
             case '!':
@@ -1549,12 +1661,12 @@
                 break;
             case '-':
                 switch ( input.LA(2) ) {
+                case '=':
+                    alt1=33;
+                    break;
                 case '-':
                     alt1=28;
                     break;
-                case '=':
-                    alt1=33;
-                    break;
                 default:
                     alt1=9;}
 
@@ -1599,20 +1711,20 @@
                 break;
             case '=':
                 switch ( input.LA(2) ) {
-                case '=':
-                    alt1=30;
+                case '/':
+                    alt1=38;
                     break;
-                case '-':
-                    alt1=34;
+                case '*':
+                    alt1=36;
                     break;
                 case '+':
                     alt1=32;
                     break;
-                case '/':
-                    alt1=38;
+                case '=':
+                    alt1=30;
                     break;
-                case '*':
-                    alt1=36;
+                case '-':
+                    alt1=34;
                     break;
                 default:
                     alt1=18;}
@@ -1654,7 +1766,7 @@
                     else {
                         if (backtracking>0) {failed=true; return ;}
                         NoViableAltException nvae =
-                            new NoViableAltException("1311:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
+                            new NoViableAltException("1341:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 46, input);
 
                         throw nvae;
                     }
@@ -1662,7 +1774,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1311:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
+                        new NoViableAltException("1341:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 25, input);
 
                     throw nvae;
                 }
@@ -1670,175 +1782,175 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1311:1: MISC : ( \'!\' | \'@\' | \'$\' | \'%\' | \'^\' | \'&\' | \'*\' | \'_\' | \'-\' | \'+\' | \'?\' | \'|\' | \',\' | \'{\' | \'}\' | \'[\' | \']\' | \'=\' | \'/\' | \'(\' | \')\' | \'\\\'\' | \'\\\\\' | \'||\' | \'&&\' | \'<<<\' | \'++\' | \'--\' | \'>>>\' | \'==\' | \'+=\' | \'=+\' | \'-=\' | \'=-\' | \'*=\' | \'=*\' | \'/=\' | \'=/\' | \'>>=\' );", 1, 0, input);
+                    new NoViableAltException("1341: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:1312:17: '!'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:17: '!'
                     {
                     match('!'); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:23: '@'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:23: '@'
                     {
                     match('@'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:29: '$'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:29: '$'
                     {
                     match('$'); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:35: '%'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:35: '%'
                     {
                     match('%'); if (failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:41: '^'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:41: '^'
                     {
                     match('^'); if (failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:47: '&'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:47: '&'
                     {
                     match('&'); if (failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:53: '*'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:53: '*'
                     {
                     match('*'); if (failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:59: '_'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:59: '_'
                     {
                     match('_'); if (failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:65: '-'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:65: '-'
                     {
                     match('-'); if (failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:71: '+'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:71: '+'
                     {
                     match('+'); if (failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1312:78: '?'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1342:78: '?'
                     {
                     match('?'); if (failed) return ;
 
                     }
                     break;
                 case 12 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:19: '|'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:19: '|'
                     {
                     match('|'); if (failed) return ;
 
                     }
                     break;
                 case 13 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:25: ','
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:25: ','
                     {
                     match(','); if (failed) return ;
 
                     }
                     break;
                 case 14 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:31: '{'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:31: '{'
                     {
                     match('{'); if (failed) return ;
 
                     }
                     break;
                 case 15 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:37: '}'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:37: '}'
                     {
                     match('}'); if (failed) return ;
 
                     }
                     break;
                 case 16 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:43: '['
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:43: '['
                     {
                     match('['); if (failed) return ;
 
                     }
                     break;
                 case 17 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:49: ']'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:49: ']'
                     {
                     match(']'); if (failed) return ;
 
                     }
                     break;
                 case 18 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:55: '='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:55: '='
                     {
                     match('='); if (failed) return ;
 
                     }
                     break;
                 case 19 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:61: '/'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:61: '/'
                     {
                     match('/'); if (failed) return ;
 
                     }
                     break;
                 case 20 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:67: '('
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:67: '('
                     {
                     match('('); if (failed) return ;
 
                     }
                     break;
                 case 21 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:73: ')'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:73: ')'
                     {
                     match(')'); if (failed) return ;
 
                     }
                     break;
                 case 22 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:79: '\''
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:79: '\''
                     {
                     match('\''); if (failed) return ;
 
                     }
                     break;
                 case 23 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1313:86: '\\'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1343:86: '\\'
                     {
                     match('\\'); if (failed) return ;
 
                     }
                     break;
                 case 24 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:19: '||'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:19: '||'
                     {
                     match("||"); if (failed) return ;
 
@@ -1846,7 +1958,7 @@
                     }
                     break;
                 case 25 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:26: '&&'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:26: '&&'
                     {
                     match("&&"); if (failed) return ;
 
@@ -1854,7 +1966,7 @@
                     }
                     break;
                 case 26 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:33: '<<<'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:33: '<<<'
                     {
                     match("<<<"); if (failed) return ;
 
@@ -1862,7 +1974,7 @@
                     }
                     break;
                 case 27 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:41: '++'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:41: '++'
                     {
                     match("++"); if (failed) return ;
 
@@ -1870,7 +1982,7 @@
                     }
                     break;
                 case 28 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:48: '--'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:48: '--'
                     {
                     match("--"); if (failed) return ;
 
@@ -1878,7 +1990,7 @@
                     }
                     break;
                 case 29 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:55: '>>>'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:55: '>>>'
                     {
                     match(">>>"); if (failed) return ;
 
@@ -1886,7 +1998,7 @@
                     }
                     break;
                 case 30 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:63: '=='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:63: '=='
                     {
                     match("=="); if (failed) return ;
 
@@ -1894,7 +2006,7 @@
                     }
                     break;
                 case 31 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:70: '+='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:70: '+='
                     {
                     match("+="); if (failed) return ;
 
@@ -1902,7 +2014,7 @@
                     }
                     break;
                 case 32 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:77: '=+'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:77: '=+'
                     {
                     match("=+"); if (failed) return ;
 
@@ -1910,7 +2022,7 @@
                     }
                     break;
                 case 33 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:84: '-='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:84: '-='
                     {
                     match("-="); if (failed) return ;
 
@@ -1918,7 +2030,7 @@
                     }
                     break;
                 case 34 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:91: '=-'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:91: '=-'
                     {
                     match("=-"); if (failed) return ;
 
@@ -1926,7 +2038,7 @@
                     }
                     break;
                 case 35 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:97: '*='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:97: '*='
                     {
                     match("*="); if (failed) return ;
 
@@ -1934,7 +2046,7 @@
                     }
                     break;
                 case 36 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1314:104: '=*'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1344:104: '=*'
                     {
                     match("=*"); if (failed) return ;
 
@@ -1942,7 +2054,7 @@
                     }
                     break;
                 case 37 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1315:19: '/='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1345:19: '/='
                     {
                     match("/="); if (failed) return ;
 
@@ -1950,7 +2062,7 @@
                     }
                     break;
                 case 38 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1315:26: '=/'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1345:26: '=/'
                     {
                     match("=/"); if (failed) return ;
 
@@ -1958,7 +2070,7 @@
                     }
                     break;
                 case 39 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1315:33: '>>='
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1345:33: '>>='
                     {
                     match(">>="); if (failed) return ;
 
@@ -1970,7 +2082,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 54, MISC_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 58, MISC_StartIndex); }
         }
     }
     // $ANTLR end MISC
@@ -1985,9 +2097,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:1319:17: ( (' '|'\t'|'\f'))
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1319:17: (' '|'\t'|'\f')
+            if ( backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1349:17: ( (' '|'\t'|'\f'))
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1349:17: (' '|'\t'|'\f')
             {
             if ( input.LA(1)=='\t'||input.LA(1)=='\f'||input.LA(1)==' ' ) {
                 input.consume();
@@ -2009,7 +2121,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 55, WS_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 59, WS_StartIndex); }
         }
     }
     // $ANTLR end WS
@@ -2024,11 +2136,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1327:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1327:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1357:17: ( ( ( '\r\n' )=> '\r\n' | '\r' | '\n' ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1357:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1327:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1357:17: ( ( '\r\n' )=> '\r\n' | '\r' | '\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
             if ( LA2_0=='\r' ) {
@@ -2045,13 +2157,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1327:17: ( ( \'\\r\\n\' )=> \'\\r\\n\' | \'\\r\' | \'\\n\' )", 2, 0, input);
+                    new NoViableAltException("1357: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:1327:25: ( '\r\n' )=> '\r\n'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1357:25: ( '\r\n' )=> '\r\n'
                     {
 
                     match("\r\n"); if (failed) return ;
@@ -2060,14 +2172,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1328:25: '\r'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1358: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:1329:25: '\n'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1359:25: '\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -2082,7 +2194,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 56, EOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 60, EOL_StartIndex); }
         }
     }
     // $ANTLR end EOL
@@ -2097,11 +2209,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1334:17: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1334:17: ( '-' )? ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 61) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1364:17: ( ( '-' )? ( '0' .. '9' )+ )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1364:17: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1334:17: ( '-' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1364:17: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
             if ( LA3_0=='-' ) {
@@ -2113,13 +2225,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1334:17: ( \'-\' )?", 3, 0, input);
+                    new NoViableAltException("1364: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:1334:18: '-'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1364:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -2128,7 +2240,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1334:23: ( '0' .. '9' )+
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1364:23: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -2141,7 +2253,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1334:24: '0' .. '9'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1364:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2164,7 +2276,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 57, INT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 61, INT_StartIndex); }
         }
     }
     // $ANTLR end INT
@@ -2179,11 +2291,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1338:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1338:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            if ( backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:17: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:17: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1338:17: ( '-' )?
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:17: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
             if ( LA5_0=='-' ) {
@@ -2195,13 +2307,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1338:17: ( \'-\' )?", 5, 0, input);
+                    new NoViableAltException("1368: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:1338:18: '-'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:18: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -2210,7 +2322,7 @@
 
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1338:23: ( '0' .. '9' )+
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:23: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -2223,7 +2335,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1338:24: '0' .. '9'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:24: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2241,7 +2353,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1338:39: ( '0' .. '9' )+
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:39: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -2254,7 +2366,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1338:40: '0' .. '9'
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1368:40: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -2277,7 +2389,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 58, FLOAT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 62, FLOAT_StartIndex); }
         }
     }
     // $ANTLR end FLOAT
@@ -2292,8 +2404,8 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
+            if ( backtracking>0 && alreadyParsedRule(input, 63) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:17: ( ( '"' ( options {greedy=false; } : . )* '"' ) | ( '\'' ( options {greedy=false; } : . )* '\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
             if ( LA10_0=='"' ) {
@@ -2305,19 +2417,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1341:1: STRING : ( ( \'\"\' ( options {greedy=false; } : . )* \'\"\' ) | ( \'\\\'\' ( options {greedy=false; } : . )* \'\\\'\' ) );", 10, 0, input);
+                    new NoViableAltException("1371: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:1342:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:17: ( '"' ( options {greedy=false; } : . )* '"' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:17: ( '"' ( options {greedy=false; } : . )* '"' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:18: '"' ( options {greedy=false; } : . )* '"'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:17: ( '"' ( options {greedy=false; } : . )* '"' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:18: '"' ( options {greedy=false; } : . )* '"'
                     {
                     match('"'); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:22: ( options {greedy=false; } : . )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:22: ( options {greedy=false; } : . )*
                     loop8:
                     do {
                         int alt8=2;
@@ -2332,7 +2444,7 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:49: .
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:49: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2352,13 +2464,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
                     {
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:62: '\'' ( options {greedy=false; } : . )* '\''
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:61: ( '\'' ( options {greedy=false; } : . )* '\'' )
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:62: '\'' ( options {greedy=false; } : . )* '\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:67: ( options {greedy=false; } : . )*
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:67: ( options {greedy=false; } : . )*
                     loop9:
                     do {
                         int alt9=2;
@@ -2373,7 +2485,7 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1342:94: .
+                    	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1372:94: .
                     	    {
                     	    matchAny(); if (failed) return ;
 
@@ -2397,7 +2509,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 59, STRING_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 63, STRING_StartIndex); }
         }
     }
     // $ANTLR end STRING
@@ -2412,11 +2524,11 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1346:17: ( ( 'true' | 'false' ) )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1346:17: ( 'true' | 'false' )
+            if ( backtracking>0 && alreadyParsedRule(input, 64) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1376:17: ( ( 'true' | 'false' ) )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1376:17: ( 'true' | 'false' )
             {
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1346:17: ( 'true' | 'false' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1376:17: ( 'true' | 'false' )
             int alt11=2;
             int LA11_0 = input.LA(1);
             if ( LA11_0=='t' ) {
@@ -2428,13 +2540,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1346:17: ( \'true\' | \'false\' )", 11, 0, input);
+                    new NoViableAltException("1376: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:1346:18: 'true'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1376:18: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -2442,7 +2554,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1346:25: 'false'
+                    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1376:25: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -2458,7 +2570,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 60, BOOL_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 64, BOOL_StartIndex); }
         }
     }
     // $ANTLR end BOOL
@@ -2473,9 +2585,9 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 61) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1350: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:1350:17: ('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff') ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            if ( backtracking>0 && alreadyParsedRule(input, 65) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1380:17: ( ('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff') ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))* )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1380: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();
@@ -2488,7 +2600,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1350:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1380:65: ( ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff'))*
             loop12:
             do {
                 int alt12=2;
@@ -2500,7 +2612,7 @@
 
                 switch (alt12) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1350:66: ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1380: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();
@@ -2528,7 +2640,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 61, ID_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 65, ID_StartIndex); }
         }
     }
     // $ANTLR end ID
@@ -2543,12 +2655,12 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1356:17: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1356:17: '#' ( options {greedy=false; } : . )* EOL
+            if ( backtracking>0 && alreadyParsedRule(input, 66) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1386:17: ( '#' ( options {greedy=false; } : . )* EOL )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1386:17: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1356:21: ( options {greedy=false; } : . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1386:21: ( options {greedy=false; } : . )*
             loop13:
             do {
                 int alt13=2;
@@ -2566,7 +2678,7 @@
 
                 switch (alt13) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1356:48: .
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1386:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2588,7 +2700,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 62, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 66, SH_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end SH_STYLE_SINGLE_LINE_COMMENT
@@ -2603,13 +2715,13 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 63) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1362:17: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1362:17: '//' ( options {greedy=false; } : . )* EOL
+            if ( backtracking>0 && alreadyParsedRule(input, 67) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1392:17: ( '//' ( options {greedy=false; } : . )* EOL )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1392:17: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1362:22: ( options {greedy=false; } : . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1392:22: ( options {greedy=false; } : . )*
             loop14:
             do {
                 int alt14=2;
@@ -2627,7 +2739,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1362:49: .
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1392:49: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2649,7 +2761,7 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 63, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 67, C_STYLE_SINGLE_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
@@ -2664,13 +2776,13 @@
             int line = getLine();
             int charPosition = getCharPositionInLine();
             int channel = Token.DEFAULT_CHANNEL;
-            if ( backtracking>0 && alreadyParsedRule(input, 64) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1367:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1367:17: '/*' ( options {greedy=false; } : . )* '*/'
+            if ( backtracking>0 && alreadyParsedRule(input, 68) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1397:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1397:17: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1367:22: ( options {greedy=false; } : . )*
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1397:22: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2693,7 +2805,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1367:48: .
+            	    // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1397:48: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2716,460 +2828,488 @@
             if ( token==null ) {emit(type,line,charPosition,channel,start,getCharIndex()-1);}
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 64, MULTI_LINE_COMMENT_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 68, MULTI_LINE_COMMENT_StartIndex); }
         }
     }
     // $ANTLR end MULTI_LINE_COMMENT
 
     public void mTokens() throws RecognitionException {
-        // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:10: ( T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | MISC | WS | EOL | INT | FLOAT | STRING | BOOL | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT )
-        int alt16=64;
+        // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:10: ( T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | MISC | WS | EOL | INT | FLOAT | STRING | BOOL | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT )
+        int alt16=68;
         alt16 = dfa16.predict(input); if (failed) return ;
         switch (alt16) {
             case 1 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:10: T15
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:10: T15
                 {
                 mT15(); if (failed) return ;
 
                 }
                 break;
             case 2 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:14: T16
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:14: T16
                 {
                 mT16(); if (failed) return ;
 
                 }
                 break;
             case 3 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:18: T17
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:18: T17
                 {
                 mT17(); if (failed) return ;
 
                 }
                 break;
             case 4 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:22: T18
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:22: T18
                 {
                 mT18(); if (failed) return ;
 
                 }
                 break;
             case 5 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:26: T19
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:26: T19
                 {
                 mT19(); if (failed) return ;
 
                 }
                 break;
             case 6 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:30: T20
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:30: T20
                 {
                 mT20(); if (failed) return ;
 
                 }
                 break;
             case 7 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:34: T21
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:34: T21
                 {
                 mT21(); if (failed) return ;
 
                 }
                 break;
             case 8 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:38: T22
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:38: T22
                 {
                 mT22(); if (failed) return ;
 
                 }
                 break;
             case 9 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:42: T23
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:42: T23
                 {
                 mT23(); if (failed) return ;
 
                 }
                 break;
             case 10 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:46: T24
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:46: T24
                 {
                 mT24(); if (failed) return ;
 
                 }
                 break;
             case 11 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:50: T25
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:50: T25
                 {
                 mT25(); if (failed) return ;
 
                 }
                 break;
             case 12 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:54: T26
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:54: T26
                 {
                 mT26(); if (failed) return ;
 
                 }
                 break;
             case 13 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:58: T27
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:58: T27
                 {
                 mT27(); if (failed) return ;
 
                 }
                 break;
             case 14 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:62: T28
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:62: T28
                 {
                 mT28(); if (failed) return ;
 
                 }
                 break;
             case 15 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:66: T29
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:66: T29
                 {
                 mT29(); if (failed) return ;
 
                 }
                 break;
             case 16 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:70: T30
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:70: T30
                 {
                 mT30(); if (failed) return ;
 
                 }
                 break;
             case 17 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:74: T31
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:74: T31
                 {
                 mT31(); if (failed) return ;
 
                 }
                 break;
             case 18 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:78: T32
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:78: T32
                 {
                 mT32(); if (failed) return ;
 
                 }
                 break;
             case 19 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:82: T33
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:82: T33
                 {
                 mT33(); if (failed) return ;
 
                 }
                 break;
             case 20 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:86: T34
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:86: T34
                 {
                 mT34(); if (failed) return ;
 
                 }
                 break;
             case 21 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:90: T35
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:90: T35
                 {
                 mT35(); if (failed) return ;
 
                 }
                 break;
             case 22 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:94: T36
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:94: T36
                 {
                 mT36(); if (failed) return ;
 
                 }
                 break;
             case 23 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:98: T37
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:98: T37
                 {
                 mT37(); if (failed) return ;
 
                 }
                 break;
             case 24 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:102: T38
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:102: T38
                 {
                 mT38(); if (failed) return ;
 
                 }
                 break;
             case 25 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:106: T39
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:106: T39
                 {
                 mT39(); if (failed) return ;
 
                 }
                 break;
             case 26 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:110: T40
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:110: T40
                 {
                 mT40(); if (failed) return ;
 
                 }
                 break;
             case 27 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:114: T41
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:114: T41
                 {
                 mT41(); if (failed) return ;
 
                 }
                 break;
             case 28 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:118: T42
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:118: T42
                 {
                 mT42(); if (failed) return ;
 
                 }
                 break;
             case 29 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:122: T43
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:122: T43
                 {
                 mT43(); if (failed) return ;
 
                 }
                 break;
             case 30 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:126: T44
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:126: T44
                 {
                 mT44(); if (failed) return ;
 
                 }
                 break;
             case 31 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:130: T45
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:130: T45
                 {
                 mT45(); if (failed) return ;
 
                 }
                 break;
             case 32 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:134: T46
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:134: T46
                 {
                 mT46(); if (failed) return ;
 
                 }
                 break;
             case 33 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:138: T47
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:138: T47
                 {
                 mT47(); if (failed) return ;
 
                 }
                 break;
             case 34 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:142: T48
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:142: T48
                 {
                 mT48(); if (failed) return ;
 
                 }
                 break;
             case 35 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:146: T49
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:146: T49
                 {
                 mT49(); if (failed) return ;
 
                 }
                 break;
             case 36 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:150: T50
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:150: T50
                 {
                 mT50(); if (failed) return ;
 
                 }
                 break;
             case 37 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:154: T51
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:154: T51
                 {
                 mT51(); if (failed) return ;
 
                 }
                 break;
             case 38 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:158: T52
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:158: T52
                 {
                 mT52(); if (failed) return ;
 
                 }
                 break;
             case 39 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:162: T53
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:162: T53
                 {
                 mT53(); if (failed) return ;
 
                 }
                 break;
             case 40 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:166: T54
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:166: T54
                 {
                 mT54(); if (failed) return ;
 
                 }
                 break;
             case 41 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:170: T55
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:170: T55
                 {
                 mT55(); if (failed) return ;
 
                 }
                 break;
             case 42 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:174: T56
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:174: T56
                 {
                 mT56(); if (failed) return ;
 
                 }
                 break;
             case 43 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:178: T57
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:178: T57
                 {
                 mT57(); if (failed) return ;
 
                 }
                 break;
             case 44 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:182: T58
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:182: T58
                 {
                 mT58(); if (failed) return ;
 
                 }
                 break;
             case 45 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:186: T59
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:186: T59
                 {
                 mT59(); if (failed) return ;
 
                 }
                 break;
             case 46 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:190: T60
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:190: T60
                 {
                 mT60(); if (failed) return ;
 
                 }
                 break;
             case 47 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:194: T61
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:194: T61
                 {
                 mT61(); if (failed) return ;
 
                 }
                 break;
             case 48 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:198: T62
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:198: T62
                 {
                 mT62(); if (failed) return ;
 
                 }
                 break;
             case 49 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:202: T63
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:202: T63
                 {
                 mT63(); if (failed) return ;
 
                 }
                 break;
             case 50 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:206: T64
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:206: T64
                 {
                 mT64(); if (failed) return ;
 
                 }
                 break;
             case 51 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:210: T65
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:210: T65
                 {
                 mT65(); if (failed) return ;
 
                 }
                 break;
             case 52 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:214: T66
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:214: T66
                 {
                 mT66(); if (failed) return ;
 
                 }
                 break;
             case 53 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:218: T67
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:218: T67
                 {
                 mT67(); if (failed) return ;
 
                 }
                 break;
             case 54 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:222: MISC
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:222: T68
                 {
-                mMISC(); if (failed) return ;
+                mT68(); if (failed) return ;
 
                 }
                 break;
             case 55 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:227: WS
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:226: T69
                 {
-                mWS(); if (failed) return ;
+                mT69(); if (failed) return ;
 
                 }
                 break;
             case 56 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:230: EOL
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:230: T70
                 {
-                mEOL(); if (failed) return ;
+                mT70(); if (failed) return ;
 
                 }
                 break;
             case 57 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:234: INT
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:234: T71
                 {
-                mINT(); if (failed) return ;
+                mT71(); if (failed) return ;
 
                 }
                 break;
             case 58 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:238: FLOAT
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:238: MISC
                 {
-                mFLOAT(); if (failed) return ;
+                mMISC(); if (failed) return ;
 
                 }
                 break;
             case 59 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:244: STRING
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:243: WS
                 {
-                mSTRING(); if (failed) return ;
+                mWS(); if (failed) return ;
 
                 }
                 break;
             case 60 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:251: BOOL
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:246: EOL
                 {
-                mBOOL(); if (failed) return ;
+                mEOL(); if (failed) return ;
 
                 }
                 break;
             case 61 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:256: ID
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:250: INT
                 {
-                mID(); if (failed) return ;
+                mINT(); if (failed) return ;
 
                 }
                 break;
             case 62 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:259: SH_STYLE_SINGLE_LINE_COMMENT
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:254: FLOAT
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 63 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:288: C_STYLE_SINGLE_LINE_COMMENT
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:260: STRING
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 64 :
-                // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1:316: MULTI_LINE_COMMENT
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:267: BOOL
                 {
+                mBOOL(); if (failed) return ;
+
+                }
+                break;
+            case 65 :
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:272: ID
+                {
+                mID(); if (failed) return ;
+
+                }
+                break;
+            case 66 :
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:275: SH_STYLE_SINGLE_LINE_COMMENT
+                {
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 67 :
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:304: C_STYLE_SINGLE_LINE_COMMENT
+                {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 68 :
+                // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1:332: MULTI_LINE_COMMENT
+                {
                 mMULTI_LINE_COMMENT(); if (failed) return ;
 
                 }
@@ -3184,9 +3324,9 @@
     public void mSynpred1_fragment() throws RecognitionException {
         int Synpred1_fragment_StartIndex = input.index();
         try {
-            if ( backtracking>0 && alreadyParsedRule(input, 66) ) { return ; }
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1327:25: ( '\r\n' )
-            // /home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/drl.g:1327:27: '\r\n'
+            if ( backtracking>0 && alreadyParsedRule(input, 70) ) { return ; }
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1357:25: ( '\r\n' )
+            // D:\workspace\jboss\jbossrules\drools-compiler\src\main\resources\org\drools\lang\drl.g:1357:27: '\r\n'
             {
             match("\r\n"); if (failed) return ;
 
@@ -3195,7 +3335,7 @@
 
         }
         finally {
-            if ( backtracking>0 ) { memoize(input, 66, Synpred1_fragment_StartIndex); }
+            if ( backtracking>0 ) { memoize(input, 70, Synpred1_fragment_StartIndex); }
         }
     }
     // $ANTLR end Synpred1_fragment
@@ -3212,44 +3352,44 @@
             return predict(input, s0);
         }
         DFA.State s1 = new DFA.State() {{alt=1;}};
-        DFA.State s493 = new DFA.State() {{alt=2;}};
-        DFA.State s51 = new DFA.State() {{alt=61;}};
-        DFA.State s451 = new DFA.State() {
+        DFA.State s536 = new DFA.State() {{alt=2;}};
+        DFA.State s51 = new DFA.State() {{alt=65;}};
+        DFA.State s487 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_451 = input.LA(1);
-                if ( (LA16_451>='0' && LA16_451<='9')||(LA16_451>='A' && LA16_451<='Z')||LA16_451=='_'||(LA16_451>='a' && LA16_451<='z')||(LA16_451>='\u00C0' && LA16_451<='\u00FF') ) {return s51;}
-                return s493;
+                int LA16_487 = input.LA(1);
+                if ( (LA16_487>='0' && LA16_487<='9')||(LA16_487>='A' && LA16_487<='Z')||LA16_487=='_'||(LA16_487>='a' && LA16_487<='z')||(LA16_487>='\u00C0' && LA16_487<='\u00FF') ) {return s51;}
+                return s536;
 
             }
         };
-        DFA.State s402 = new DFA.State() {
+        DFA.State s429 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_402 = input.LA(1);
-                if ( LA16_402=='e' ) {return s451;}
+                int LA16_429 = input.LA(1);
+                if ( LA16_429=='e' ) {return s487;}
                 return s51;
 
             }
         };
-        DFA.State s334 = new DFA.State() {
+        DFA.State s352 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_334 = input.LA(1);
-                if ( LA16_334=='g' ) {return s402;}
+                int LA16_352 = input.LA(1);
+                if ( LA16_352=='g' ) {return s429;}
                 return s51;
 
             }
         };
-        DFA.State s251 = new DFA.State() {
+        DFA.State s260 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_251 = input.LA(1);
-                if ( LA16_251=='a' ) {return s334;}
+                int LA16_260 = input.LA(1);
+                if ( LA16_260=='a' ) {return s352;}
                 return s51;
 
             }
         };
-        DFA.State s162 = new DFA.State() {
+        DFA.State s164 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_162 = input.LA(1);
-                if ( LA16_162=='k' ) {return s251;}
+                int LA16_164 = input.LA(1);
+                if ( LA16_164=='k' ) {return s260;}
                 return s51;
 
             }
@@ -3257,7 +3397,7 @@
         DFA.State s53 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_53 = input.LA(1);
-                if ( LA16_53=='c' ) {return s162;}
+                if ( LA16_53=='c' ) {return s164;}
                 return s51;
 
             }
@@ -3270,35 +3410,35 @@
 
             }
         };
-        DFA.State s454 = new DFA.State() {{alt=3;}};
-        DFA.State s405 = new DFA.State() {
+        DFA.State s490 = new DFA.State() {{alt=3;}};
+        DFA.State s432 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_405 = input.LA(1);
-                if ( (LA16_405>='0' && LA16_405<='9')||(LA16_405>='A' && LA16_405<='Z')||LA16_405=='_'||(LA16_405>='a' && LA16_405<='z')||(LA16_405>='\u00C0' && LA16_405<='\u00FF') ) {return s51;}
-                return s454;
+                int LA16_432 = input.LA(1);
+                if ( (LA16_432>='0' && LA16_432<='9')||(LA16_432>='A' && LA16_432<='Z')||LA16_432=='_'||(LA16_432>='a' && LA16_432<='z')||(LA16_432>='\u00C0' && LA16_432<='\u00FF') ) {return s51;}
+                return s490;
 
             }
         };
-        DFA.State s337 = new DFA.State() {
+        DFA.State s355 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_337 = input.LA(1);
-                if ( LA16_337=='t' ) {return s405;}
+                int LA16_355 = input.LA(1);
+                if ( LA16_355=='t' ) {return s432;}
                 return s51;
 
             }
         };
-        DFA.State s254 = new DFA.State() {
+        DFA.State s263 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_254 = input.LA(1);
-                if ( LA16_254=='r' ) {return s337;}
+                int LA16_263 = input.LA(1);
+                if ( LA16_263=='r' ) {return s355;}
                 return s51;
 
             }
         };
-        DFA.State s165 = new DFA.State() {
+        DFA.State s167 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_165 = input.LA(1);
-                if ( LA16_165=='o' ) {return s254;}
+                int LA16_167 = input.LA(1);
+                if ( LA16_167=='o' ) {return s263;}
                 return s51;
 
             }
@@ -3306,130 +3446,161 @@
         DFA.State s56 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_56 = input.LA(1);
-                if ( LA16_56=='p' ) {return s165;}
+                if ( LA16_56=='p' ) {return s167;}
                 return s51;
 
             }
         };
-        DFA.State s3 = new DFA.State() {
+        DFA.State s358 = new DFA.State() {{alt=30;}};
+        DFA.State s266 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_3 = input.LA(1);
-                if ( LA16_3=='m' ) {return s56;}
-                return s51;
+                int LA16_266 = input.LA(1);
+                if ( (LA16_266>='0' && LA16_266<='9')||(LA16_266>='A' && LA16_266<='Z')||LA16_266=='_'||(LA16_266>='a' && LA16_266<='z')||(LA16_266>='\u00C0' && LA16_266<='\u00FF') ) {return s51;}
+                return s358;
 
             }
         };
-        DFA.State s365 = new DFA.State() {{alt=60;}};
-        DFA.State s340 = new DFA.State() {
+        DFA.State s170 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_340 = input.LA(1);
-                if ( (LA16_340>='0' && LA16_340<='9')||(LA16_340>='A' && LA16_340<='Z')||LA16_340=='_'||(LA16_340>='a' && LA16_340<='z')||(LA16_340>='\u00C0' && LA16_340<='\u00FF') ) {return s51;}
-                return s365;
+                int LA16_170 = input.LA(1);
+                if ( LA16_170=='t' ) {return s266;}
+                return s51;
 
             }
         };
-        DFA.State s257 = new DFA.State() {
+        DFA.State s57 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_257 = input.LA(1);
-                if ( LA16_257=='e' ) {return s340;}
+                int LA16_57 = input.LA(1);
+                if ( LA16_57=='i' ) {return s170;}
                 return s51;
 
             }
         };
-        DFA.State s168 = new DFA.State() {
+        DFA.State s3 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_168 = input.LA(1);
-                if ( LA16_168=='s' ) {return s257;}
+                switch ( input.LA(1) ) {
+                case 'm':
+                    return s56;
+
+                case 'n':
+                    return s57;
+
+                default:
+                    return s51;
+        	        }
+            }
+        };
+        DFA.State s360 = new DFA.State() {{alt=28;}};
+        DFA.State s269 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_269 = input.LA(1);
+                if ( (LA16_269>='0' && LA16_269<='9')||(LA16_269>='A' && LA16_269<='Z')||LA16_269=='_'||(LA16_269>='a' && LA16_269<='z')||(LA16_269>='\u00C0' && LA16_269<='\u00FF') ) {return s51;}
+                return s360;
+
+            }
+        };
+        DFA.State s173 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_173 = input.LA(1);
+                if ( LA16_173=='m' ) {return s269;}
                 return s51;
 
             }
         };
-        DFA.State s59 = new DFA.State() {
+        DFA.State s60 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_59 = input.LA(1);
-                if ( LA16_59=='l' ) {return s168;}
+                int LA16_60 = input.LA(1);
+                if ( LA16_60=='o' ) {return s173;}
                 return s51;
 
             }
         };
-        DFA.State s343 = new DFA.State() {{alt=28;}};
-        DFA.State s260 = new DFA.State() {
+        DFA.State s385 = new DFA.State() {{alt=64;}};
+        DFA.State s362 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_260 = input.LA(1);
-                if ( (LA16_260>='0' && LA16_260<='9')||(LA16_260>='A' && LA16_260<='Z')||LA16_260=='_'||(LA16_260>='a' && LA16_260<='z')||(LA16_260>='\u00C0' && LA16_260<='\u00FF') ) {return s51;}
-                return s343;
+                int LA16_362 = input.LA(1);
+                if ( (LA16_362>='0' && LA16_362<='9')||(LA16_362>='A' && LA16_362<='Z')||LA16_362=='_'||(LA16_362>='a' && LA16_362<='z')||(LA16_362>='\u00C0' && LA16_362<='\u00FF') ) {return s51;}
+                return s385;
 
             }
         };
-        DFA.State s171 = new DFA.State() {
+        DFA.State s272 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_171 = input.LA(1);
-                if ( LA16_171=='m' ) {return s260;}
+                int LA16_272 = input.LA(1);
+                if ( LA16_272=='e' ) {return s362;}
                 return s51;
 
             }
         };
-        DFA.State s60 = new DFA.State() {
+        DFA.State s176 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_60 = input.LA(1);
-                if ( LA16_60=='o' ) {return s171;}
+                int LA16_176 = input.LA(1);
+                if ( LA16_176=='s' ) {return s272;}
                 return s51;
 
             }
         };
-        DFA.State s524 = new DFA.State() {{alt=4;}};
-        DFA.State s495 = new DFA.State() {
+        DFA.State s61 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_495 = input.LA(1);
-                if ( (LA16_495>='0' && LA16_495<='9')||(LA16_495>='A' && LA16_495<='Z')||LA16_495=='_'||(LA16_495>='a' && LA16_495<='z')||(LA16_495>='\u00C0' && LA16_495<='\u00FF') ) {return s51;}
-                return s524;
+                int LA16_61 = input.LA(1);
+                if ( LA16_61=='l' ) {return s176;}
+                return s51;
 
             }
         };
-        DFA.State s456 = new DFA.State() {
+        DFA.State s570 = new DFA.State() {{alt=4;}};
+        DFA.State s538 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_456 = input.LA(1);
-                if ( LA16_456=='n' ) {return s495;}
+                int LA16_538 = input.LA(1);
+                if ( (LA16_538>='0' && LA16_538<='9')||(LA16_538>='A' && LA16_538<='Z')||LA16_538=='_'||(LA16_538>='a' && LA16_538<='z')||(LA16_538>='\u00C0' && LA16_538<='\u00FF') ) {return s51;}
+                return s570;
+
+            }
+        };
+        DFA.State s492 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_492 = input.LA(1);
+                if ( LA16_492=='n' ) {return s538;}
                 return s51;
 
             }
         };
-        DFA.State s410 = new DFA.State() {
+        DFA.State s437 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_410 = input.LA(1);
-                if ( LA16_410=='o' ) {return s456;}
+                int LA16_437 = input.LA(1);
+                if ( LA16_437=='o' ) {return s492;}
                 return s51;
 
             }
         };
-        DFA.State s345 = new DFA.State() {
+        DFA.State s365 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_345 = input.LA(1);
-                if ( LA16_345=='i' ) {return s410;}
+                int LA16_365 = input.LA(1);
+                if ( LA16_365=='i' ) {return s437;}
                 return s51;
 
             }
         };
-        DFA.State s263 = new DFA.State() {
+        DFA.State s275 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_263 = input.LA(1);
-                if ( LA16_263=='t' ) {return s345;}
+                int LA16_275 = input.LA(1);
+                if ( LA16_275=='t' ) {return s365;}
                 return s51;
 
             }
         };
-        DFA.State s174 = new DFA.State() {
+        DFA.State s179 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_174 = input.LA(1);
-                if ( LA16_174=='c' ) {return s263;}
+                int LA16_179 = input.LA(1);
+                if ( LA16_179=='c' ) {return s275;}
                 return s51;
 
             }
         };
-        DFA.State s61 = new DFA.State() {
+        DFA.State s62 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_61 = input.LA(1);
-                if ( LA16_61=='n' ) {return s174;}
+                int LA16_62 = input.LA(1);
+                if ( LA16_62=='n' ) {return s179;}
                 return s51;
 
             }
@@ -3437,216 +3608,216 @@
         DFA.State s4 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'a':
-                    return s59;
-
                 case 'r':
                     return s60;
 
-                case 'u':
+                case 'a':
                     return s61;
 
+                case 'u':
+                    return s62;
+
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s64 = new DFA.State() {{alt=6;}};
-        DFA.State s65 = new DFA.State() {{alt=5;}};
+        DFA.State s65 = new DFA.State() {{alt=6;}};
+        DFA.State s66 = new DFA.State() {{alt=5;}};
         DFA.State s5 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_5 = input.LA(1);
-                if ( LA16_5=='*' ) {return s64;}
-                return s65;
+                if ( LA16_5=='*' ) {return s65;}
+                return s66;
 
             }
         };
-        DFA.State s459 = new DFA.State() {{alt=40;}};
-        DFA.State s413 = new DFA.State() {
+        DFA.State s368 = new DFA.State() {{alt=46;}};
+        DFA.State s278 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_413 = input.LA(1);
-                if ( (LA16_413>='0' && LA16_413<='9')||(LA16_413>='A' && LA16_413<='Z')||LA16_413=='_'||(LA16_413>='a' && LA16_413<='z')||(LA16_413>='\u00C0' && LA16_413<='\u00FF') ) {return s51;}
-                return s459;
+                int LA16_278 = input.LA(1);
+                if ( (LA16_278>='0' && LA16_278<='9')||(LA16_278>='A' && LA16_278<='Z')||LA16_278=='_'||(LA16_278>='a' && LA16_278<='z')||(LA16_278>='\u00C0' && LA16_278<='\u00FF') ) {return s51;}
+                return s368;
 
             }
         };
-        DFA.State s348 = new DFA.State() {
+        DFA.State s182 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_348 = input.LA(1);
-                if ( LA16_348=='s' ) {return s413;}
+                int LA16_182 = input.LA(1);
+                if ( LA16_182=='l' ) {return s278;}
                 return s51;
 
             }
         };
-        DFA.State s266 = new DFA.State() {
+        DFA.State s67 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_266 = input.LA(1);
-                if ( LA16_266=='t' ) {return s348;}
+                int LA16_67 = input.LA(1);
+                if ( LA16_67=='a' ) {return s182;}
                 return s51;
 
             }
         };
-        DFA.State s177 = new DFA.State() {
+        DFA.State s495 = new DFA.State() {{alt=44;}};
+        DFA.State s440 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_177 = input.LA(1);
-                if ( LA16_177=='s' ) {return s266;}
-                return s51;
+                int LA16_440 = input.LA(1);
+                if ( (LA16_440>='0' && LA16_440<='9')||(LA16_440>='A' && LA16_440<='Z')||LA16_440=='_'||(LA16_440>='a' && LA16_440<='z')||(LA16_440>='\u00C0' && LA16_440<='\u00FF') ) {return s51;}
+                return s495;
 
             }
         };
-        DFA.State s526 = new DFA.State() {{alt=53;}};
-        DFA.State s498 = new DFA.State() {
+        DFA.State s370 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_498 = input.LA(1);
-                if ( (LA16_498>='0' && LA16_498<='9')||(LA16_498>='A' && LA16_498<='Z')||LA16_498=='_'||(LA16_498>='a' && LA16_498<='z')||(LA16_498>='\u00C0' && LA16_498<='\u00FF') ) {return s51;}
-                return s526;
+                int LA16_370 = input.LA(1);
+                if ( LA16_370=='s' ) {return s440;}
+                return s51;
 
             }
         };
-        DFA.State s461 = new DFA.State() {
+        DFA.State s281 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_461 = input.LA(1);
-                if ( LA16_461=='s' ) {return s498;}
+                int LA16_281 = input.LA(1);
+                if ( LA16_281=='t' ) {return s370;}
                 return s51;
 
             }
         };
-        DFA.State s416 = new DFA.State() {
+        DFA.State s185 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_416 = input.LA(1);
-                if ( LA16_416=='e' ) {return s461;}
+                int LA16_185 = input.LA(1);
+                if ( LA16_185=='s' ) {return s281;}
                 return s51;
 
             }
         };
-        DFA.State s351 = new DFA.State() {
+        DFA.State s572 = new DFA.State() {{alt=57;}};
+        DFA.State s541 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_351 = input.LA(1);
-                if ( LA16_351=='d' ) {return s416;}
-                return s51;
+                int LA16_541 = input.LA(1);
+                if ( (LA16_541>='0' && LA16_541<='9')||(LA16_541>='A' && LA16_541<='Z')||LA16_541=='_'||(LA16_541>='a' && LA16_541<='z')||(LA16_541>='\u00C0' && LA16_541<='\u00FF') ) {return s51;}
+                return s572;
 
             }
         };
-        DFA.State s269 = new DFA.State() {
+        DFA.State s497 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_269 = input.LA(1);
-                if ( LA16_269=='u' ) {return s351;}
+                int LA16_497 = input.LA(1);
+                if ( LA16_497=='s' ) {return s541;}
                 return s51;
 
             }
         };
-        DFA.State s178 = new DFA.State() {
+        DFA.State s443 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_178 = input.LA(1);
-                if ( LA16_178=='l' ) {return s269;}
+                int LA16_443 = input.LA(1);
+                if ( LA16_443=='e' ) {return s497;}
                 return s51;
 
             }
         };
-        DFA.State s528 = new DFA.State() {{alt=7;}};
-        DFA.State s501 = new DFA.State() {
+        DFA.State s373 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_501 = input.LA(1);
-                if ( (LA16_501>='0' && LA16_501<='9')||(LA16_501>='A' && LA16_501<='Z')||LA16_501=='_'||(LA16_501>='a' && LA16_501<='z')||(LA16_501>='\u00C0' && LA16_501<='\u00FF') ) {return s51;}
-                return s528;
+                int LA16_373 = input.LA(1);
+                if ( LA16_373=='d' ) {return s443;}
+                return s51;
 
             }
         };
-        DFA.State s464 = new DFA.State() {
+        DFA.State s284 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_464 = input.LA(1);
-                if ( LA16_464=='r' ) {return s501;}
+                int LA16_284 = input.LA(1);
+                if ( LA16_284=='u' ) {return s373;}
                 return s51;
 
             }
         };
-        DFA.State s419 = new DFA.State() {
+        DFA.State s186 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_419 = input.LA(1);
-                if ( LA16_419=='e' ) {return s464;}
+                int LA16_186 = input.LA(1);
+                if ( LA16_186=='l' ) {return s284;}
                 return s51;
 
             }
         };
-        DFA.State s354 = new DFA.State() {
+        DFA.State s574 = new DFA.State() {{alt=7;}};
+        DFA.State s544 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_354 = input.LA(1);
-                if ( LA16_354=='d' ) {return s419;}
-                return s51;
+                int LA16_544 = input.LA(1);
+                if ( (LA16_544>='0' && LA16_544<='9')||(LA16_544>='A' && LA16_544<='Z')||LA16_544=='_'||(LA16_544>='a' && LA16_544<='z')||(LA16_544>='\u00C0' && LA16_544<='\u00FF') ) {return s51;}
+                return s574;
 
             }
         };
-        DFA.State s272 = new DFA.State() {
+        DFA.State s500 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_272 = input.LA(1);
-                if ( LA16_272=='n' ) {return s354;}
+                int LA16_500 = input.LA(1);
+                if ( LA16_500=='r' ) {return s544;}
                 return s51;
 
             }
         };
-        DFA.State s179 = new DFA.State() {
+        DFA.State s446 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_179 = input.LA(1);
-                if ( LA16_179=='a' ) {return s272;}
+                int LA16_446 = input.LA(1);
+                if ( LA16_446=='e' ) {return s500;}
                 return s51;
 
             }
         };
-        DFA.State s66 = new DFA.State() {
+        DFA.State s376 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                switch ( input.LA(1) ) {
-                case 'i':
-                    return s177;
+                int LA16_376 = input.LA(1);
+                if ( LA16_376=='d' ) {return s446;}
+                return s51;
 
-                case 'c':
-                    return s178;
-
-                case 'p':
-                    return s179;
-
-                default:
-                    return s51;
-        	        }
             }
         };
-        DFA.State s357 = new DFA.State() {{alt=42;}};
-        DFA.State s275 = new DFA.State() {
+        DFA.State s287 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_275 = input.LA(1);
-                if ( (LA16_275>='0' && LA16_275<='9')||(LA16_275>='A' && LA16_275<='Z')||LA16_275=='_'||(LA16_275>='a' && LA16_275<='z')||(LA16_275>='\u00C0' && LA16_275<='\u00FF') ) {return s51;}
-                return s357;
+                int LA16_287 = input.LA(1);
+                if ( LA16_287=='n' ) {return s376;}
+                return s51;
 
             }
         };
-        DFA.State s182 = new DFA.State() {
+        DFA.State s187 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_182 = input.LA(1);
-                if ( LA16_182=='l' ) {return s275;}
+                int LA16_187 = input.LA(1);
+                if ( LA16_187=='a' ) {return s287;}
                 return s51;
 
             }
         };
-        DFA.State s67 = new DFA.State() {
+        DFA.State s68 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_67 = input.LA(1);
-                if ( LA16_67=='a' ) {return s182;}
-                return s51;
+                switch ( input.LA(1) ) {
+                case 'i':
+                    return s185;
 
+                case 'c':
+                    return s186;
+
+                case 'p':
+                    return s187;
+
+                default:
+                    return s51;
+        	        }
             }
         };
-        DFA.State s278 = new DFA.State() {{alt=15;}};
-        DFA.State s185 = new DFA.State() {
+        DFA.State s290 = new DFA.State() {{alt=15;}};
+        DFA.State s190 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_185 = input.LA(1);
-                if ( (LA16_185>='0' && LA16_185<='9')||(LA16_185>='A' && LA16_185<='Z')||LA16_185=='_'||(LA16_185>='a' && LA16_185<='z')||(LA16_185>='\u00C0' && LA16_185<='\u00FF') ) {return s51;}
-                return s278;
+                int LA16_190 = input.LA(1);
+                if ( (LA16_190>='0' && LA16_190<='9')||(LA16_190>='A' && LA16_190<='Z')||LA16_190=='_'||(LA16_190>='a' && LA16_190<='z')||(LA16_190>='\u00C0' && LA16_190<='\u00FF') ) {return s51;}
+                return s290;
 
             }
         };
-        DFA.State s68 = new DFA.State() {
+        DFA.State s69 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_68 = input.LA(1);
-                if ( LA16_68=='d' ) {return s185;}
+                int LA16_69 = input.LA(1);
+                if ( LA16_69=='d' ) {return s190;}
                 return s51;
 
             }
@@ -3654,57 +3825,57 @@
         DFA.State s6 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'x':
-                    return s66;
-
                 case 'v':
                     return s67;
 
-                case 'n':
+                case 'x':
                     return s68;
 
+                case 'n':
+                    return s69;
+
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s467 = new DFA.State() {{alt=8;}};
-        DFA.State s422 = new DFA.State() {
+        DFA.State s503 = new DFA.State() {{alt=8;}};
+        DFA.State s449 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_422 = input.LA(1);
-                if ( (LA16_422>='0' && LA16_422<='9')||(LA16_422>='A' && LA16_422<='Z')||LA16_422=='_'||(LA16_422>='a' && LA16_422<='z')||(LA16_422>='\u00C0' && LA16_422<='\u00FF') ) {return s51;}
-                return s467;
+                int LA16_449 = input.LA(1);
+                if ( (LA16_449>='0' && LA16_449<='9')||(LA16_449>='A' && LA16_449<='Z')||LA16_449=='_'||(LA16_449>='a' && LA16_449<='z')||(LA16_449>='\u00C0' && LA16_449<='\u00FF') ) {return s51;}
+                return s503;
 
             }
         };
-        DFA.State s359 = new DFA.State() {
+        DFA.State s379 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_359 = input.LA(1);
-                if ( LA16_359=='l' ) {return s422;}
+                int LA16_379 = input.LA(1);
+                if ( LA16_379=='l' ) {return s449;}
                 return s51;
 
             }
         };
-        DFA.State s280 = new DFA.State() {
+        DFA.State s292 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_280 = input.LA(1);
-                if ( LA16_280=='a' ) {return s359;}
+                int LA16_292 = input.LA(1);
+                if ( LA16_292=='a' ) {return s379;}
                 return s51;
 
             }
         };
-        DFA.State s188 = new DFA.State() {
+        DFA.State s193 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_188 = input.LA(1);
-                if ( LA16_188=='b' ) {return s280;}
+                int LA16_193 = input.LA(1);
+                if ( LA16_193=='b' ) {return s292;}
                 return s51;
 
             }
         };
-        DFA.State s71 = new DFA.State() {
+        DFA.State s72 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_71 = input.LA(1);
-                if ( LA16_71=='o' ) {return s188;}
+                int LA16_72 = input.LA(1);
+                if ( LA16_72=='o' ) {return s193;}
                 return s51;
 
             }
@@ -3712,80 +3883,80 @@
         DFA.State s7 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_7 = input.LA(1);
-                if ( LA16_7=='l' ) {return s71;}
+                if ( LA16_7=='l' ) {return s72;}
                 return s51;
 
             }
         };
-        DFA.State s74 = new DFA.State() {{alt=9;}};
+        DFA.State s75 = new DFA.State() {{alt=9;}};
         DFA.State s8 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_8 = input.LA(1);
-                return s74;
+                return s75;
 
             }
         };
-        DFA.State s75 = new DFA.State() {{alt=10;}};
+        DFA.State s76 = new DFA.State() {{alt=10;}};
         DFA.State s9 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_9 = input.LA(1);
-                return s75;
+                return s76;
 
             }
         };
-        DFA.State s76 = new DFA.State() {{alt=11;}};
+        DFA.State s77 = new DFA.State() {{alt=11;}};
         DFA.State s10 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_10 = input.LA(1);
-                return s76;
+                return s77;
 
             }
         };
-        DFA.State s77 = new DFA.State() {{alt=12;}};
+        DFA.State s78 = new DFA.State() {{alt=12;}};
         DFA.State s11 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_11 = input.LA(1);
-                return s77;
+                return s78;
 
             }
         };
-        DFA.State s78 = new DFA.State() {{alt=13;}};
+        DFA.State s79 = new DFA.State() {{alt=13;}};
         DFA.State s12 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_12 = input.LA(1);
-                return s78;
+                return s79;
 
             }
         };
-        DFA.State s425 = new DFA.State() {{alt=14;}};
-        DFA.State s362 = new DFA.State() {
+        DFA.State s452 = new DFA.State() {{alt=14;}};
+        DFA.State s382 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_362 = input.LA(1);
-                if ( (LA16_362>='0' && LA16_362<='9')||(LA16_362>='A' && LA16_362<='Z')||LA16_362=='_'||(LA16_362>='a' && LA16_362<='z')||(LA16_362>='\u00C0' && LA16_362<='\u00FF') ) {return s51;}
-                return s425;
+                int LA16_382 = input.LA(1);
+                if ( (LA16_382>='0' && LA16_382<='9')||(LA16_382>='A' && LA16_382<='Z')||LA16_382=='_'||(LA16_382>='a' && LA16_382<='z')||(LA16_382>='\u00C0' && LA16_382<='\u00FF') ) {return s51;}
+                return s452;
 
             }
         };
-        DFA.State s283 = new DFA.State() {
+        DFA.State s295 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_283 = input.LA(1);
-                if ( LA16_283=='y' ) {return s362;}
+                int LA16_295 = input.LA(1);
+                if ( LA16_295=='y' ) {return s382;}
                 return s51;
 
             }
         };
-        DFA.State s191 = new DFA.State() {
+        DFA.State s196 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_191 = input.LA(1);
-                if ( LA16_191=='r' ) {return s283;}
+                int LA16_196 = input.LA(1);
+                if ( LA16_196=='r' ) {return s295;}
                 return s51;
 
             }
         };
-        DFA.State s79 = new DFA.State() {
+        DFA.State s80 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_79 = input.LA(1);
-                if ( LA16_79=='e' ) {return s191;}
+                int LA16_80 = input.LA(1);
+                if ( LA16_80=='e' ) {return s196;}
                 return s51;
 
             }
@@ -3793,113 +3964,113 @@
         DFA.State s13 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_13 = input.LA(1);
-                if ( LA16_13=='u' ) {return s79;}
+                if ( LA16_13=='u' ) {return s80;}
                 return s51;
 
             }
         };
-        DFA.State s286 = new DFA.State() {
+        DFA.State s298 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_286 = input.LA(1);
-                if ( (LA16_286>='0' && LA16_286<='9')||(LA16_286>='A' && LA16_286<='Z')||LA16_286=='_'||(LA16_286>='a' && LA16_286<='z')||(LA16_286>='\u00C0' && LA16_286<='\u00FF') ) {return s51;}
-                return s365;
+                int LA16_298 = input.LA(1);
+                if ( (LA16_298>='0' && LA16_298<='9')||(LA16_298>='A' && LA16_298<='Z')||LA16_298=='_'||(LA16_298>='a' && LA16_298<='z')||(LA16_298>='\u00C0' && LA16_298<='\u00FF') ) {return s51;}
+                return s385;
 
             }
         };
-        DFA.State s194 = new DFA.State() {
+        DFA.State s199 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_194 = input.LA(1);
-                if ( LA16_194=='e' ) {return s286;}
+                int LA16_199 = input.LA(1);
+                if ( LA16_199=='e' ) {return s298;}
                 return s51;
 
             }
         };
-        DFA.State s82 = new DFA.State() {
+        DFA.State s83 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_82 = input.LA(1);
-                if ( LA16_82=='u' ) {return s194;}
+                int LA16_83 = input.LA(1);
+                if ( LA16_83=='u' ) {return s199;}
                 return s51;
 
             }
         };
-        DFA.State s367 = new DFA.State() {{alt=20;}};
-        DFA.State s289 = new DFA.State() {
+        DFA.State s576 = new DFA.State() {{alt=16;}};
+        DFA.State s547 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_289 = input.LA(1);
-                if ( (LA16_289>='0' && LA16_289<='9')||(LA16_289>='A' && LA16_289<='Z')||LA16_289=='_'||(LA16_289>='a' && LA16_289<='z')||(LA16_289>='\u00C0' && LA16_289<='\u00FF') ) {return s51;}
-                return s367;
+                int LA16_547 = input.LA(1);
+                if ( (LA16_547>='0' && LA16_547<='9')||(LA16_547>='A' && LA16_547<='Z')||LA16_547=='_'||(LA16_547>='a' && LA16_547<='z')||(LA16_547>='\u00C0' && LA16_547<='\u00FF') ) {return s51;}
+                return s576;
 
             }
         };
-        DFA.State s197 = new DFA.State() {
+        DFA.State s505 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_197 = input.LA(1);
-                if ( LA16_197=='n' ) {return s289;}
+                int LA16_505 = input.LA(1);
+                if ( LA16_505=='e' ) {return s547;}
                 return s51;
 
             }
         };
-        DFA.State s83 = new DFA.State() {
+        DFA.State s454 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_83 = input.LA(1);
-                if ( LA16_83=='e' ) {return s197;}
+                int LA16_454 = input.LA(1);
+                if ( LA16_454=='t' ) {return s505;}
                 return s51;
 
             }
         };
-        DFA.State s530 = new DFA.State() {{alt=16;}};
-        DFA.State s504 = new DFA.State() {
+        DFA.State s387 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_504 = input.LA(1);
-                if ( (LA16_504>='0' && LA16_504<='9')||(LA16_504>='A' && LA16_504<='Z')||LA16_504=='_'||(LA16_504>='a' && LA16_504<='z')||(LA16_504>='\u00C0' && LA16_504<='\u00FF') ) {return s51;}
-                return s530;
+                int LA16_387 = input.LA(1);
+                if ( LA16_387=='a' ) {return s454;}
+                return s51;
 
             }
         };
-        DFA.State s469 = new DFA.State() {
+        DFA.State s301 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_469 = input.LA(1);
-                if ( LA16_469=='e' ) {return s504;}
+                int LA16_301 = input.LA(1);
+                if ( LA16_301=='l' ) {return s387;}
                 return s51;
 
             }
         };
-        DFA.State s427 = new DFA.State() {
+        DFA.State s202 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_427 = input.LA(1);
-                if ( LA16_427=='t' ) {return s469;}
+                int LA16_202 = input.LA(1);
+                if ( LA16_202=='p' ) {return s301;}
                 return s51;
 
             }
         };
-        DFA.State s369 = new DFA.State() {
+        DFA.State s84 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_369 = input.LA(1);
-                if ( LA16_369=='a' ) {return s427;}
+                int LA16_84 = input.LA(1);
+                if ( LA16_84=='m' ) {return s202;}
                 return s51;
 
             }
         };
-        DFA.State s292 = new DFA.State() {
+        DFA.State s390 = new DFA.State() {{alt=20;}};
+        DFA.State s304 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_292 = input.LA(1);
-                if ( LA16_292=='l' ) {return s369;}
-                return s51;
+                int LA16_304 = input.LA(1);
+                if ( (LA16_304>='0' && LA16_304<='9')||(LA16_304>='A' && LA16_304<='Z')||LA16_304=='_'||(LA16_304>='a' && LA16_304<='z')||(LA16_304>='\u00C0' && LA16_304<='\u00FF') ) {return s51;}
+                return s390;
 
             }
         };
-        DFA.State s200 = new DFA.State() {
+        DFA.State s205 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_200 = input.LA(1);
-                if ( LA16_200=='p' ) {return s292;}
+                int LA16_205 = input.LA(1);
+                if ( LA16_205=='n' ) {return s304;}
                 return s51;
 
             }
         };
-        DFA.State s84 = new DFA.State() {
+        DFA.State s85 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_84 = input.LA(1);
-                if ( LA16_84=='m' ) {return s200;}
+                int LA16_85 = input.LA(1);
+                if ( LA16_85=='e' ) {return s205;}
                 return s51;
 
             }
@@ -3908,391 +4079,532 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 'r':
-                    return s82;
-
-                case 'h':
                     return s83;
 
                 case 'e':
                     return s84;
 
+                case 'h':
+                    return s85;
+
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s372 = new DFA.State() {{alt=17;}};
-        DFA.State s295 = new DFA.State() {
+        DFA.State s392 = new DFA.State() {{alt=17;}};
+        DFA.State s307 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_295 = input.LA(1);
-                if ( (LA16_295>='0' && LA16_295<='9')||(LA16_295>='A' && LA16_295<='Z')||LA16_295=='_'||(LA16_295>='a' && LA16_295<='z')||(LA16_295>='\u00C0' && LA16_295<='\u00FF') ) {return s51;}
-                return s372;
+                int LA16_307 = input.LA(1);
+                if ( (LA16_307>='0' && LA16_307<='9')||(LA16_307>='A' && LA16_307<='Z')||LA16_307=='_'||(LA16_307>='a' && LA16_307<='z')||(LA16_307>='\u00C0' && LA16_307<='\u00FF') ) {return s51;}
+                return s392;
 
             }
         };
-        DFA.State s203 = new DFA.State() {
+        DFA.State s208 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_203 = input.LA(1);
-                if ( LA16_203=='e' ) {return s295;}
+                int LA16_208 = input.LA(1);
+                if ( LA16_208=='e' ) {return s307;}
                 return s51;
 
             }
         };
-        DFA.State s87 = new DFA.State() {
+        DFA.State s88 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_87 = input.LA(1);
-                if ( LA16_87=='l' ) {return s203;}
+                int LA16_88 = input.LA(1);
+                if ( LA16_88=='l' ) {return s208;}
                 return s51;
 
             }
         };
-        DFA.State s15 = new DFA.State() {
+        DFA.State s508 = new DFA.State() {{alt=32;}};
+        DFA.State s457 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_15 = input.LA(1);
-                if ( LA16_15=='u' ) {return s87;}
+                int LA16_457 = input.LA(1);
+                if ( (LA16_457>='0' && LA16_457<='9')||(LA16_457>='A' && LA16_457<='Z')||LA16_457=='_'||(LA16_457>='a' && LA16_457<='z')||(LA16_457>='\u00C0' && LA16_457<='\u00FF') ) {return s51;}
+                return s508;
+
+            }
+        };
+        DFA.State s394 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_394 = input.LA(1);
+                if ( LA16_394=='t' ) {return s457;}
                 return s51;
 
             }
         };
-        DFA.State s374 = new DFA.State() {{alt=18;}};
-        DFA.State s298 = new DFA.State() {
+        DFA.State s310 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_298 = input.LA(1);
-                if ( (LA16_298>='0' && LA16_298<='9')||(LA16_298>='A' && LA16_298<='Z')||LA16_298=='_'||(LA16_298>='a' && LA16_298<='z')||(LA16_298>='\u00C0' && LA16_298<='\u00FF') ) {return s51;}
-                return s374;
+                int LA16_310 = input.LA(1);
+                if ( LA16_310=='l' ) {return s394;}
+                return s51;
 
             }
         };
-        DFA.State s206 = new DFA.State() {
+        DFA.State s211 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_206 = input.LA(1);
-                if ( LA16_206=='n' ) {return s298;}
+                int LA16_211 = input.LA(1);
+                if ( LA16_211=='u' ) {return s310;}
                 return s51;
 
             }
         };
-        DFA.State s90 = new DFA.State() {
+        DFA.State s89 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_90 = input.LA(1);
-                if ( LA16_90=='e' ) {return s206;}
+                int LA16_89 = input.LA(1);
+                if ( LA16_89=='s' ) {return s211;}
                 return s51;
 
             }
         };
+        DFA.State s15 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                switch ( input.LA(1) ) {
+                case 'u':
+                    return s88;
+
+                case 'e':
+                    return s89;
+
+                default:
+                    return s51;
+        	        }
+            }
+        };
+        DFA.State s397 = new DFA.State() {{alt=18;}};
+        DFA.State s313 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_313 = input.LA(1);
+                if ( (LA16_313>='0' && LA16_313<='9')||(LA16_313>='A' && LA16_313<='Z')||LA16_313=='_'||(LA16_313>='a' && LA16_313<='z')||(LA16_313>='\u00C0' && LA16_313<='\u00FF') ) {return s51;}
+                return s397;
+
+            }
+        };
+        DFA.State s214 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_214 = input.LA(1);
+                if ( LA16_214=='n' ) {return s313;}
+                return s51;
+
+            }
+        };
+        DFA.State s92 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_92 = input.LA(1);
+                if ( LA16_92=='e' ) {return s214;}
+                return s51;
+
+            }
+        };
         DFA.State s16 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_16 = input.LA(1);
-                if ( LA16_16=='h' ) {return s90;}
+                if ( LA16_16=='h' ) {return s92;}
                 return s51;
 
             }
         };
         DFA.State s17 = new DFA.State() {{alt=19;}};
-        DFA.State s472 = new DFA.State() {{alt=26;}};
-        DFA.State s430 = new DFA.State() {
+        DFA.State s399 = new DFA.State() {{alt=24;}};
+        DFA.State s316 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_430 = input.LA(1);
-                if ( LA16_430=='-' ) {return s472;}
+                int LA16_316 = input.LA(1);
+                if ( LA16_316=='-' ) {return s399;}
                 return s51;
 
             }
         };
-        DFA.State s376 = new DFA.State() {
+        DFA.State s217 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_376 = input.LA(1);
-                if ( LA16_376=='a' ) {return s430;}
+                int LA16_217 = input.LA(1);
+                if ( LA16_217=='o' ) {return s316;}
                 return s51;
 
             }
         };
-        DFA.State s301 = new DFA.State() {
+        DFA.State s95 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_301 = input.LA(1);
-                if ( LA16_301=='d' ) {return s376;}
+                int LA16_95 = input.LA(1);
+                if ( LA16_95=='t' ) {return s217;}
                 return s51;
 
             }
         };
-        DFA.State s209 = new DFA.State() {
+        DFA.State s602 = new DFA.State() {{alt=25;}};
+        DFA.State s593 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_209 = input.LA(1);
-                if ( LA16_209=='n' ) {return s301;}
+                int LA16_593 = input.LA(1);
+                if ( LA16_593=='-' ) {return s602;}
                 return s51;
 
             }
         };
-        DFA.State s93 = new DFA.State() {
+        DFA.State s578 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_93 = input.LA(1);
-                if ( LA16_93=='e' ) {return s209;}
+                int LA16_578 = input.LA(1);
+                if ( LA16_578=='n' ) {return s593;}
                 return s51;
 
             }
         };
-        DFA.State s550 = new DFA.State() {{alt=25;}};
-        DFA.State s544 = new DFA.State() {
+        DFA.State s550 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_544 = input.LA(1);
-                if ( LA16_544=='-' ) {return s550;}
+                int LA16_550 = input.LA(1);
+                if ( LA16_550=='o' ) {return s578;}
                 return s51;
 
             }
         };
-        DFA.State s532 = new DFA.State() {
+        DFA.State s510 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_532 = input.LA(1);
-                if ( LA16_532=='n' ) {return s544;}
+                int LA16_510 = input.LA(1);
+                if ( LA16_510=='i' ) {return s550;}
                 return s51;
 
             }
         };
-        DFA.State s507 = new DFA.State() {
+        DFA.State s460 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_507 = input.LA(1);
-                if ( LA16_507=='o' ) {return s532;}
+                int LA16_460 = input.LA(1);
+                if ( LA16_460=='t' ) {return s510;}
                 return s51;
 
             }
         };
-        DFA.State s475 = new DFA.State() {
+        DFA.State s402 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_475 = input.LA(1);
-                if ( LA16_475=='i' ) {return s507;}
+                int LA16_402 = input.LA(1);
+                if ( LA16_402=='a' ) {return s460;}
                 return s51;
 
             }
         };
-        DFA.State s433 = new DFA.State() {
+        DFA.State s513 = new DFA.State() {{alt=31;}};
+        DFA.State s463 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_433 = input.LA(1);
-                if ( LA16_433=='t' ) {return s475;}
+                int LA16_463 = input.LA(1);
+                if ( (LA16_463>='0' && LA16_463<='9')||(LA16_463>='A' && LA16_463<='Z')||LA16_463=='_'||(LA16_463>='a' && LA16_463<='z')||(LA16_463>='\u00C0' && LA16_463<='\u00FF') ) {return s51;}
+                return s513;
+
+            }
+        };
+        DFA.State s403 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_403 = input.LA(1);
+                if ( LA16_403=='n' ) {return s463;}
                 return s51;
 
             }
         };
-        DFA.State s379 = new DFA.State() {
+        DFA.State s319 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_379 = input.LA(1);
-                if ( LA16_379=='a' ) {return s433;}
+                switch ( input.LA(1) ) {
+                case 'v':
+                    return s402;
+
+                case 'o':
+                    return s403;
+
+                default:
+                    return s51;
+        	        }
+            }
+        };
+        DFA.State s220 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_220 = input.LA(1);
+                if ( LA16_220=='i' ) {return s319;}
                 return s51;
 
             }
         };
-        DFA.State s304 = new DFA.State() {
+        DFA.State s605 = new DFA.State() {{alt=29;}};
+        DFA.State s596 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_304 = input.LA(1);
-                if ( LA16_304=='v' ) {return s379;}
+                int LA16_596 = input.LA(1);
+                if ( (LA16_596>='0' && LA16_596<='9')||(LA16_596>='A' && LA16_596<='Z')||LA16_596=='_'||(LA16_596>='a' && LA16_596<='z')||(LA16_596>='\u00C0' && LA16_596<='\u00FF') ) {return s51;}
+                return s605;
+
+            }
+        };
+        DFA.State s581 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_581 = input.LA(1);
+                if ( LA16_581=='e' ) {return s596;}
                 return s51;
 
             }
         };
-        DFA.State s212 = new DFA.State() {
+        DFA.State s553 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_212 = input.LA(1);
-                if ( LA16_212=='i' ) {return s304;}
+                int LA16_553 = input.LA(1);
+                if ( LA16_553=='t' ) {return s581;}
                 return s51;
 
             }
         };
-        DFA.State s94 = new DFA.State() {
+        DFA.State s515 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_94 = input.LA(1);
-                if ( LA16_94=='t' ) {return s212;}
+                int LA16_515 = input.LA(1);
+                if ( LA16_515=='a' ) {return s553;}
                 return s51;
 
             }
         };
-        DFA.State s307 = new DFA.State() {{alt=38;}};
-        DFA.State s215 = new DFA.State() {
+        DFA.State s466 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_215 = input.LA(1);
-                if ( (LA16_215>='0' && LA16_215<='9')||(LA16_215>='A' && LA16_215<='Z')||LA16_215=='_'||(LA16_215>='a' && LA16_215<='z')||(LA16_215>='\u00C0' && LA16_215<='\u00FF') ) {return s51;}
-                return s307;
+                int LA16_466 = input.LA(1);
+                if ( LA16_466=='l' ) {return s515;}
+                return s51;
 
             }
         };
-        DFA.State s95 = new DFA.State() {
+        DFA.State s406 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_95 = input.LA(1);
-                if ( LA16_95=='d' ) {return s215;}
+                int LA16_406 = input.LA(1);
+                if ( LA16_406=='u' ) {return s466;}
                 return s51;
 
             }
         };
-        DFA.State s553 = new DFA.State() {{alt=21;}};
-        DFA.State s547 = new DFA.State() {
+        DFA.State s322 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_547 = input.LA(1);
-                if ( (LA16_547>='0' && LA16_547<='9')||(LA16_547>='A' && LA16_547<='Z')||LA16_547=='_'||(LA16_547>='a' && LA16_547<='z')||(LA16_547>='\u00C0' && LA16_547<='\u00FF') ) {return s51;}
-                return s553;
+                int LA16_322 = input.LA(1);
+                if ( LA16_322=='m' ) {return s406;}
+                return s51;
 
             }
         };
-        DFA.State s535 = new DFA.State() {
+        DFA.State s221 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_535 = input.LA(1);
-                if ( LA16_535=='s' ) {return s547;}
+                int LA16_221 = input.LA(1);
+                if ( LA16_221=='u' ) {return s322;}
                 return s51;
 
             }
         };
-        DFA.State s510 = new DFA.State() {
+        DFA.State s96 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_510 = input.LA(1);
-                if ( LA16_510=='e' ) {return s535;}
+                switch ( input.LA(1) ) {
+                case 't':
+                    return s220;
+
+                case 'c':
+                    return s221;
+
+                default:
+                    return s51;
+        	        }
+            }
+        };
+        DFA.State s325 = new DFA.State() {{alt=42;}};
+        DFA.State s224 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_224 = input.LA(1);
+                if ( (LA16_224>='0' && LA16_224<='9')||(LA16_224>='A' && LA16_224<='Z')||LA16_224=='_'||(LA16_224>='a' && LA16_224<='z')||(LA16_224>='\u00C0' && LA16_224<='\u00FF') ) {return s51;}
+                return s325;
+
+            }
+        };
+        DFA.State s97 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_97 = input.LA(1);
+                if ( LA16_97=='d' ) {return s224;}
                 return s51;
 
             }
         };
-        DFA.State s478 = new DFA.State() {
+        DFA.State s607 = new DFA.State() {{alt=21;}};
+        DFA.State s599 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_478 = input.LA(1);
-                if ( LA16_478=='t' ) {return s510;}
+                int LA16_599 = input.LA(1);
+                if ( (LA16_599>='0' && LA16_599<='9')||(LA16_599>='A' && LA16_599<='Z')||LA16_599=='_'||(LA16_599>='a' && LA16_599<='z')||(LA16_599>='\u00C0' && LA16_599<='\u00FF') ) {return s51;}
+                return s607;
+
+            }
+        };
+        DFA.State s584 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_584 = input.LA(1);
+                if ( LA16_584=='s' ) {return s599;}
                 return s51;
 
             }
         };
-        DFA.State s436 = new DFA.State() {
+        DFA.State s556 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_436 = input.LA(1);
-                if ( LA16_436=='u' ) {return s478;}
+                int LA16_556 = input.LA(1);
+                if ( LA16_556=='e' ) {return s584;}
                 return s51;
 
             }
         };
-        DFA.State s382 = new DFA.State() {
+        DFA.State s518 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_382 = input.LA(1);
-                if ( LA16_382=='b' ) {return s436;}
+                int LA16_518 = input.LA(1);
+                if ( LA16_518=='t' ) {return s556;}
                 return s51;
 
             }
         };
-        DFA.State s309 = new DFA.State() {
+        DFA.State s469 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_309 = input.LA(1);
-                if ( LA16_309=='i' ) {return s382;}
+                int LA16_469 = input.LA(1);
+                if ( LA16_469=='u' ) {return s518;}
                 return s51;
 
             }
         };
-        DFA.State s218 = new DFA.State() {
+        DFA.State s409 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_218 = input.LA(1);
-                if ( LA16_218=='r' ) {return s309;}
+                int LA16_409 = input.LA(1);
+                if ( LA16_409=='b' ) {return s469;}
                 return s51;
 
             }
         };
-        DFA.State s96 = new DFA.State() {
+        DFA.State s327 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_96 = input.LA(1);
-                if ( LA16_96=='t' ) {return s218;}
+                int LA16_327 = input.LA(1);
+                if ( LA16_327=='i' ) {return s409;}
                 return s51;
 
             }
         };
-        DFA.State s385 = new DFA.State() {{alt=24;}};
-        DFA.State s312 = new DFA.State() {
+        DFA.State s227 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_312 = input.LA(1);
-                if ( LA16_312=='-' ) {return s385;}
+                int LA16_227 = input.LA(1);
+                if ( LA16_227=='r' ) {return s327;}
                 return s51;
 
             }
         };
-        DFA.State s221 = new DFA.State() {
+        DFA.State s98 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_221 = input.LA(1);
-                if ( LA16_221=='o' ) {return s312;}
+                int LA16_98 = input.LA(1);
+                if ( LA16_98=='t' ) {return s227;}
                 return s51;
 
             }
         };
-        DFA.State s97 = new DFA.State() {
+        DFA.State s521 = new DFA.State() {{alt=26;}};
+        DFA.State s472 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_97 = input.LA(1);
-                if ( LA16_97=='t' ) {return s221;}
+                int LA16_472 = input.LA(1);
+                if ( LA16_472=='-' ) {return s521;}
                 return s51;
 
             }
         };
+        DFA.State s412 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_412 = input.LA(1);
+                if ( LA16_412=='a' ) {return s472;}
+                return s51;
+
+            }
+        };
+        DFA.State s330 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_330 = input.LA(1);
+                if ( LA16_330=='d' ) {return s412;}
+                return s51;
+
+            }
+        };
+        DFA.State s230 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_230 = input.LA(1);
+                if ( LA16_230=='n' ) {return s330;}
+                return s51;
+
+            }
+        };
+        DFA.State s99 = new DFA.State() {
+            public DFA.State transition(IntStream input) throws RecognitionException {
+                int LA16_99 = input.LA(1);
+                if ( LA16_99=='e' ) {return s230;}
+                return s51;
+
+            }
+        };
         DFA.State s18 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case 'g':
-                    return s93;
+                case 'u':
+                    return s95;
 
                 case 'c':
-                    return s94;
+                    return s96;
 
                 case 'n':
-                    return s95;
+                    return s97;
 
                 case 't':
-                    return s96;
+                    return s98;
 
-                case 'u':
-                    return s97;
+                case 'g':
+                    return s99;
 
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s538 = new DFA.State() {{alt=22;}};
-        DFA.State s513 = new DFA.State() {
+        DFA.State s587 = new DFA.State() {{alt=22;}};
+        DFA.State s559 = 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 s538;
+                int LA16_559 = input.LA(1);
+                if ( (LA16_559>='0' && LA16_559<='9')||(LA16_559>='A' && LA16_559<='Z')||LA16_559=='_'||(LA16_559>='a' && LA16_559<='z')||(LA16_559>='\u00C0' && LA16_559<='\u00FF') ) {return s51;}
+                return s587;
 
             }
         };
-        DFA.State s481 = new DFA.State() {
+        DFA.State s524 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_481 = input.LA(1);
-                if ( LA16_481=='e' ) {return s513;}
+                int LA16_524 = input.LA(1);
+                if ( LA16_524=='e' ) {return s559;}
                 return s51;
 
             }
         };
-        DFA.State s439 = new DFA.State() {
+        DFA.State s475 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_439 = input.LA(1);
-                if ( LA16_439=='c' ) {return s481;}
+                int LA16_475 = input.LA(1);
+                if ( LA16_475=='c' ) {return s524;}
                 return s51;
 
             }
         };
-        DFA.State s388 = new DFA.State() {
+        DFA.State s415 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_388 = input.LA(1);
-                if ( LA16_388=='n' ) {return s439;}
+                int LA16_415 = input.LA(1);
+                if ( LA16_415=='n' ) {return s475;}
                 return s51;
 
             }
         };
-        DFA.State s315 = new DFA.State() {
+        DFA.State s333 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_315 = input.LA(1);
-                if ( LA16_315=='e' ) {return s388;}
+                int LA16_333 = input.LA(1);
+                if ( LA16_333=='e' ) {return s415;}
                 return s51;
 
             }
         };
-        DFA.State s224 = new DFA.State() {
+        DFA.State s233 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_224 = input.LA(1);
-                if ( LA16_224=='i' ) {return s315;}
+                int LA16_233 = input.LA(1);
+                if ( LA16_233=='i' ) {return s333;}
                 return s51;
 
             }
         };
-        DFA.State s100 = new DFA.State() {
+        DFA.State s102 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_100 = input.LA(1);
-                if ( LA16_100=='l' ) {return s224;}
+                int LA16_102 = input.LA(1);
+                if ( LA16_102=='l' ) {return s233;}
                 return s51;
 
             }
@@ -4300,56 +4612,56 @@
         DFA.State s19 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_19 = input.LA(1);
-                if ( LA16_19=='a' ) {return s100;}
+                if ( LA16_19=='a' ) {return s102;}
                 return s51;
 
             }
         };
-        DFA.State s318 = new DFA.State() {{alt=41;}};
-        DFA.State s227 = new DFA.State() {
+        DFA.State s236 = new DFA.State() {{alt=23;}};
+        DFA.State s336 = new DFA.State() {{alt=45;}};
+        DFA.State s237 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_227 = input.LA(1);
-                if ( (LA16_227>='0' && LA16_227<='9')||(LA16_227>='A' && LA16_227<='Z')||LA16_227=='_'||(LA16_227>='a' && LA16_227<='z')||(LA16_227>='\u00C0' && LA16_227<='\u00FF') ) {return s51;}
-                return s318;
+                int LA16_237 = input.LA(1);
+                if ( (LA16_237>='0' && LA16_237<='9')||(LA16_237>='A' && LA16_237<='Z')||LA16_237=='_'||(LA16_237>='a' && LA16_237<='z')||(LA16_237>='\u00C0' && LA16_237<='\u00FF') ) {return s51;}
+                return s336;
 
             }
         };
-        DFA.State s228 = new DFA.State() {{alt=23;}};
-        DFA.State s103 = new DFA.State() {
+        DFA.State s105 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case '-':
+                    return s236;
+
                 case 't':
-                    return s227;
+                    return s237;
 
-                case '-':
-                    return s228;
-
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s391 = new DFA.State() {{alt=29;}};
-        DFA.State s320 = new DFA.State() {
+        DFA.State s418 = new DFA.State() {{alt=33;}};
+        DFA.State s338 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_320 = input.LA(1);
-                if ( (LA16_320>='0' && LA16_320<='9')||(LA16_320>='A' && LA16_320<='Z')||LA16_320=='_'||(LA16_320>='a' && LA16_320<='z')||(LA16_320>='\u00C0' && LA16_320<='\u00FF') ) {return s51;}
-                return s391;
+                int LA16_338 = input.LA(1);
+                if ( (LA16_338>='0' && LA16_338<='9')||(LA16_338>='A' && LA16_338<='Z')||LA16_338=='_'||(LA16_338>='a' && LA16_338<='z')||(LA16_338>='\u00C0' && LA16_338<='\u00FF') ) {return s51;}
+                return s418;
 
             }
         };
-        DFA.State s231 = new DFA.State() {
+        DFA.State s240 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_231 = input.LA(1);
-                if ( LA16_231=='l' ) {return s320;}
+                int LA16_240 = input.LA(1);
+                if ( LA16_240=='l' ) {return s338;}
                 return s51;
 
             }
         };
-        DFA.State s104 = new DFA.State() {
+        DFA.State s106 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_104 = input.LA(1);
-                if ( LA16_104=='l' ) {return s231;}
+                int LA16_106 = input.LA(1);
+                if ( LA16_106=='l' ) {return s240;}
                 return s51;
 
             }
@@ -4358,69 +4670,69 @@
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case 'o':
-                    return s103;
+                    return s105;
 
                 case 'u':
-                    return s104;
+                    return s106;
 
                 default:
                     return s51;
         	        }
             }
         };
-        DFA.State s540 = new DFA.State() {{alt=27;}};
-        DFA.State s516 = new DFA.State() {
+        DFA.State s589 = new DFA.State() {{alt=27;}};
+        DFA.State s562 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_516 = input.LA(1);
-                if ( (LA16_516>='0' && LA16_516<='9')||(LA16_516>='A' && LA16_516<='Z')||LA16_516=='_'||(LA16_516>='a' && LA16_516<='z')||(LA16_516>='\u00C0' && LA16_516<='\u00FF') ) {return s51;}
-                return s540;
+                int LA16_562 = input.LA(1);
+                if ( (LA16_562>='0' && LA16_562<='9')||(LA16_562>='A' && LA16_562<='Z')||LA16_562=='_'||(LA16_562>='a' && LA16_562<='z')||(LA16_562>='\u00C0' && LA16_562<='\u00FF') ) {return s51;}
+                return s589;
 
             }
         };
-        DFA.State s484 = new DFA.State() {
+        DFA.State s527 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_484 = input.LA(1);
-                if ( LA16_484=='n' ) {return s516;}
+                int LA16_527 = input.LA(1);
+                if ( LA16_527=='n' ) {return s562;}
                 return s51;
 
             }
         };
-        DFA.State s442 = new DFA.State() {
+        DFA.State s478 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_442 = input.LA(1);
-                if ( LA16_442=='o' ) {return s484;}
+                int LA16_478 = input.LA(1);
+                if ( LA16_478=='o' ) {return s527;}
                 return s51;
 
             }
         };
-        DFA.State s393 = new DFA.State() {
+        DFA.State s420 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_393 = input.LA(1);
-                if ( LA16_393=='i' ) {return s442;}
+                int LA16_420 = input.LA(1);
+                if ( LA16_420=='i' ) {return s478;}
                 return s51;
 
             }
         };
-        DFA.State s323 = new DFA.State() {
+        DFA.State s341 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_323 = input.LA(1);
-                if ( LA16_323=='t' ) {return s393;}
+                int LA16_341 = input.LA(1);
+                if ( LA16_341=='t' ) {return s420;}
                 return s51;
 
             }
         };
-        DFA.State s234 = new DFA.State() {
+        DFA.State s243 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_234 = input.LA(1);
-                if ( LA16_234=='a' ) {return s323;}
+                int LA16_243 = input.LA(1);
+                if ( LA16_243=='a' ) {return s341;}
                 return s51;
 
             }
         };
-        DFA.State s107 = new DFA.State() {
+        DFA.State s109 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_107 = input.LA(1);
-                if ( LA16_107=='r' ) {return s234;}
+                int LA16_109 = input.LA(1);
+                if ( LA16_109=='r' ) {return s243;}
                 return s51;
 
             }
@@ -4428,27 +4740,27 @@
         DFA.State s21 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_21 = input.LA(1);
-                if ( LA16_21=='u' ) {return s107;}
+                if ( LA16_21=='u' ) {return s109;}
                 return s51;
 
             }
         };
-        DFA.State s237 = new DFA.State() {{alt=44;}};
-        DFA.State s110 = new DFA.State() {
+        DFA.State s246 = new DFA.State() {{alt=48;}};
+        DFA.State s112 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_110 = input.LA(1);
-                return s237;
+                int LA16_112 = input.LA(1);
+                return s246;
 
             }
         };
-        DFA.State s35 = new DFA.State() {{alt=54;}};
-        DFA.State s114 = new DFA.State() {{alt=30;}};
-        DFA.State s116 = new DFA.State() {{alt=45;}};
+        DFA.State s35 = new DFA.State() {{alt=58;}};
+        DFA.State s117 = new DFA.State() {{alt=34;}};
+        DFA.State s118 = new DFA.State() {{alt=49;}};
         DFA.State s22 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case '=':
-                    return s110;
+                    return s112;
 
                 case '*':
                 case '+':
@@ -4457,83 +4769,83 @@
                     return s35;
 
                 case '>':
-                    return s114;
+                    return s117;
 
                 default:
-                    return s116;
+                    return s118;
         	        }
             }
         };
-        DFA.State s117 = new DFA.State() {{alt=31;}};
+        DFA.State s119 = new DFA.State() {{alt=35;}};
         DFA.State s23 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_23 = input.LA(1);
-                return s117;
+                return s119;
 
             }
         };
-        DFA.State s118 = new DFA.State() {{alt=32;}};
+        DFA.State s120 = new DFA.State() {{alt=36;}};
         DFA.State s24 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_24 = input.LA(1);
-                return s118;
+                return s120;
 
             }
         };
-        DFA.State s238 = new DFA.State() {{alt=33;}};
-        DFA.State s119 = new DFA.State() {
+        DFA.State s247 = new DFA.State() {{alt=37;}};
+        DFA.State s121 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_119 = input.LA(1);
-                if ( (LA16_119>='0' && LA16_119<='9')||(LA16_119>='A' && LA16_119<='Z')||LA16_119=='_'||(LA16_119>='a' && LA16_119<='z')||(LA16_119>='\u00C0' && LA16_119<='\u00FF') ) {return s51;}
-                return s238;
+                int LA16_121 = input.LA(1);
+                if ( (LA16_121>='0' && LA16_121<='9')||(LA16_121>='A' && LA16_121<='Z')||LA16_121=='_'||(LA16_121>='a' && LA16_121<='z')||(LA16_121>='\u00C0' && LA16_121<='\u00FF') ) {return s51;}
+                return s247;
 
             }
         };
         DFA.State s25 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_25 = input.LA(1);
-                if ( LA16_25=='r' ) {return s119;}
+                if ( LA16_25=='r' ) {return s121;}
                 return s51;
 
             }
         };
-        DFA.State s240 = new DFA.State() {{alt=34;}};
-        DFA.State s122 = new DFA.State() {
+        DFA.State s249 = new DFA.State() {{alt=38;}};
+        DFA.State s124 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_122 = input.LA(1);
-                return s240;
+                int LA16_124 = input.LA(1);
+                return s249;
 
             }
         };
-        DFA.State s123 = new DFA.State() {{alt=36;}};
+        DFA.State s125 = new DFA.State() {{alt=40;}};
         DFA.State s26 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_26 = input.LA(1);
-                if ( LA16_26=='|' ) {return s122;}
-                return s123;
+                if ( LA16_26=='|' ) {return s124;}
+                return s125;
 
             }
         };
-        DFA.State s241 = new DFA.State() {{alt=39;}};
-        DFA.State s124 = new DFA.State() {
+        DFA.State s250 = new DFA.State() {{alt=43;}};
+        DFA.State s126 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_124 = input.LA(1);
-                return s241;
+                int LA16_126 = input.LA(1);
+                return s250;
 
             }
         };
-        DFA.State s125 = new DFA.State() {{alt=35;}};
+        DFA.State s127 = new DFA.State() {{alt=39;}};
         DFA.State s27 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_27 = input.LA(1);
-                if ( LA16_27=='&' ) {return s124;}
-                return s125;
+                if ( LA16_27=='&' ) {return s126;}
+                return s127;
 
             }
         };
-        DFA.State s128 = new DFA.State() {{alt=37;}};
-        DFA.State s159 = new DFA.State() {{alt=57;}};
-        DFA.State s161 = new DFA.State() {{alt=58;}};
+        DFA.State s128 = new DFA.State() {{alt=41;}};
+        DFA.State s161 = new DFA.State() {{alt=61;}};
+        DFA.State s163 = new DFA.State() {{alt=62;}};
         DFA.State s49 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
@@ -4550,10 +4862,10 @@
                     return s49;
 
                 case '.':
-                    return s161;
+                    return s163;
 
                 default:
-                    return s159;
+                    return s161;
         	        }
             }
         };
@@ -4580,19 +4892,19 @@
         	        }
             }
         };
-        DFA.State s326 = new DFA.State() {{alt=43;}};
-        DFA.State s242 = new DFA.State() {
+        DFA.State s344 = new DFA.State() {{alt=47;}};
+        DFA.State s251 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_242 = input.LA(1);
-                if ( (LA16_242>='0' && LA16_242<='9')||(LA16_242>='A' && LA16_242<='Z')||LA16_242=='_'||(LA16_242>='a' && LA16_242<='z')||(LA16_242>='\u00C0' && LA16_242<='\u00FF') ) {return s51;}
-                return s326;
+                int LA16_251 = input.LA(1);
+                if ( (LA16_251>='0' && LA16_251<='9')||(LA16_251>='A' && LA16_251<='Z')||LA16_251=='_'||(LA16_251>='a' && LA16_251<='z')||(LA16_251>='\u00C0' && LA16_251<='\u00FF') ) {return s51;}
+                return s344;
 
             }
         };
-        DFA.State s131 = new DFA.State() {
+        DFA.State s133 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_131 = input.LA(1);
-                if ( LA16_131=='e' ) {return s242;}
+                int LA16_133 = input.LA(1);
+                if ( LA16_133=='e' ) {return s251;}
                 return s51;
 
             }
@@ -4600,105 +4912,105 @@
         DFA.State s29 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_29 = input.LA(1);
-                if ( LA16_29=='s' ) {return s131;}
+                if ( LA16_29=='s' ) {return s133;}
                 return s51;
 
             }
         };
-        DFA.State s135 = new DFA.State() {{alt=47;}};
-        DFA.State s136 = new DFA.State() {{alt=46;}};
+        DFA.State s136 = new DFA.State() {{alt=51;}};
+        DFA.State s138 = new DFA.State() {{alt=50;}};
         DFA.State s30 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
+                case '=':
+                    return s136;
+
                 case '>':
                     return s35;
 
-                case '=':
-                    return s135;
-
                 default:
-                    return s136;
+                    return s138;
         	        }
             }
         };
-        DFA.State s137 = new DFA.State() {{alt=49;}};
-        DFA.State s139 = new DFA.State() {{alt=48;}};
+        DFA.State s140 = new DFA.State() {{alt=53;}};
+        DFA.State s141 = new DFA.State() {{alt=52;}};
         DFA.State s31 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
-                case '=':
-                    return s137;
-
                 case '<':
                     return s35;
 
+                case '=':
+                    return s140;
+
                 default:
-                    return s139;
+                    return s141;
         	        }
             }
         };
-        DFA.State s140 = new DFA.State() {{alt=50;}};
+        DFA.State s142 = new DFA.State() {{alt=54;}};
         DFA.State s32 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_32 = input.LA(1);
-                if ( LA16_32=='=' ) {return s140;}
+                if ( LA16_32=='=' ) {return s142;}
                 return s35;
 
             }
         };
-        DFA.State s542 = new DFA.State() {{alt=51;}};
-        DFA.State s519 = new DFA.State() {
+        DFA.State s591 = new DFA.State() {{alt=55;}};
+        DFA.State s565 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_519 = input.LA(1);
-                if ( (LA16_519>='0' && LA16_519<='9')||(LA16_519>='A' && LA16_519<='Z')||LA16_519=='_'||(LA16_519>='a' && LA16_519<='z')||(LA16_519>='\u00C0' && LA16_519<='\u00FF') ) {return s51;}
-                return s542;
+                int LA16_565 = input.LA(1);
+                if ( (LA16_565>='0' && LA16_565<='9')||(LA16_565>='A' && LA16_565<='Z')||LA16_565=='_'||(LA16_565>='a' && LA16_565<='z')||(LA16_565>='\u00C0' && LA16_565<='\u00FF') ) {return s51;}
+                return s591;
 
             }
         };
-        DFA.State s487 = new DFA.State() {
+        DFA.State s530 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_487 = input.LA(1);
-                if ( LA16_487=='s' ) {return s519;}
+                int LA16_530 = input.LA(1);
+                if ( LA16_530=='s' ) {return s565;}
                 return s51;
 
             }
         };
-        DFA.State s445 = new DFA.State() {
+        DFA.State s481 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_445 = input.LA(1);
-                if ( LA16_445=='n' ) {return s487;}
+                int LA16_481 = input.LA(1);
+                if ( LA16_481=='n' ) {return s530;}
                 return s51;
 
             }
         };
-        DFA.State s396 = new DFA.State() {
+        DFA.State s423 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_396 = input.LA(1);
-                if ( LA16_396=='i' ) {return s445;}
+                int LA16_423 = input.LA(1);
+                if ( LA16_423=='i' ) {return s481;}
                 return s51;
 
             }
         };
-        DFA.State s328 = new DFA.State() {
+        DFA.State s346 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_328 = input.LA(1);
-                if ( LA16_328=='a' ) {return s396;}
+                int LA16_346 = input.LA(1);
+                if ( LA16_346=='a' ) {return s423;}
                 return s51;
 
             }
         };
-        DFA.State s245 = new DFA.State() {
+        DFA.State s254 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_245 = input.LA(1);
-                if ( LA16_245=='t' ) {return s328;}
+                int LA16_254 = input.LA(1);
+                if ( LA16_254=='t' ) {return s346;}
                 return s51;
 
             }
         };
-        DFA.State s142 = new DFA.State() {
+        DFA.State s144 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_142 = input.LA(1);
-                if ( LA16_142=='n' ) {return s245;}
+                int LA16_144 = input.LA(1);
+                if ( LA16_144=='n' ) {return s254;}
                 return s51;
 
             }
@@ -4706,56 +5018,56 @@
         DFA.State s33 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_33 = input.LA(1);
-                if ( LA16_33=='o' ) {return s142;}
+                if ( LA16_33=='o' ) {return s144;}
                 return s51;
 
             }
         };
-        DFA.State s522 = new DFA.State() {{alt=52;}};
-        DFA.State s490 = new DFA.State() {
+        DFA.State s568 = new DFA.State() {{alt=56;}};
+        DFA.State s533 = 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 s522;
+                int LA16_533 = input.LA(1);
+                if ( (LA16_533>='0' && LA16_533<='9')||(LA16_533>='A' && LA16_533<='Z')||LA16_533=='_'||(LA16_533>='a' && LA16_533<='z')||(LA16_533>='\u00C0' && LA16_533<='\u00FF') ) {return s51;}
+                return s568;
 
             }
         };
-        DFA.State s448 = new DFA.State() {
+        DFA.State s484 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_448 = input.LA(1);
-                if ( LA16_448=='s' ) {return s490;}
+                int LA16_484 = input.LA(1);
+                if ( LA16_484=='s' ) {return s533;}
                 return s51;
 
             }
         };
-        DFA.State s399 = new DFA.State() {
+        DFA.State s426 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_399 = input.LA(1);
-                if ( LA16_399=='e' ) {return s448;}
+                int LA16_426 = input.LA(1);
+                if ( LA16_426=='e' ) {return s484;}
                 return s51;
 
             }
         };
-        DFA.State s331 = new DFA.State() {
+        DFA.State s349 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_331 = input.LA(1);
-                if ( LA16_331=='h' ) {return s399;}
+                int LA16_349 = input.LA(1);
+                if ( LA16_349=='h' ) {return s426;}
                 return s51;
 
             }
         };
-        DFA.State s248 = new DFA.State() {
+        DFA.State s257 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_248 = input.LA(1);
-                if ( LA16_248=='c' ) {return s331;}
+                int LA16_257 = input.LA(1);
+                if ( LA16_257=='c' ) {return s349;}
                 return s51;
 
             }
         };
-        DFA.State s145 = new DFA.State() {
+        DFA.State s147 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
-                int LA16_145 = input.LA(1);
-                if ( LA16_145=='t' ) {return s248;}
+                int LA16_147 = input.LA(1);
+                if ( LA16_147=='t' ) {return s257;}
                 return s51;
 
             }
@@ -4763,17 +5075,17 @@
         DFA.State s34 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 int LA16_34 = input.LA(1);
-                if ( LA16_34=='a' ) {return s145;}
+                if ( LA16_34=='a' ) {return s147;}
                 return s51;
 
             }
         };
-        DFA.State s148 = new DFA.State() {{alt=54;}};
+        DFA.State s151 = new DFA.State() {{alt=58;}};
         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 s148;
+                return s151;
 
             }
         };
@@ -4781,38 +5093,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 s148;
+                return s151;
 
             }
         };
-        DFA.State s152 = new DFA.State() {{alt=64;}};
-        DFA.State s153 = new DFA.State() {{alt=63;}};
+        DFA.State s155 = new DFA.State() {{alt=68;}};
+        DFA.State s156 = new DFA.State() {{alt=67;}};
         DFA.State s43 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {
                 case '*':
-                    return s152;
+                    return s155;
 
                 case '/':
-                    return s153;
+                    return s156;
 
                 default:
-                    return s148;
+                    return s151;
         	        }
             }
         };
-        DFA.State s50 = new DFA.State() {{alt=59;}};
+        DFA.State s50 = new DFA.State() {{alt=63;}};
         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 s148;
+                return s151;
 
             }
         };
-        DFA.State s46 = new DFA.State() {{alt=55;}};
-        DFA.State s47 = new DFA.State() {{alt=56;}};
-        DFA.State s52 = new DFA.State() {{alt=62;}};
+        DFA.State s46 = new DFA.State() {{alt=59;}};
+        DFA.State s47 = new DFA.State() {{alt=60;}};
+        DFA.State s52 = new DFA.State() {{alt=66;}};
         DFA.State s0 = new DFA.State() {
             public DFA.State transition(IntStream input) throws RecognitionException {
                 switch ( input.LA(1) ) {

Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.lang.descr;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A descr class for accumulate node
+ */
+public class AccumulateDescr extends PatternDescr 
+    implements ConditionalElementDescr {
+
+    private static final long serialVersionUID = 2831283873824863255L;
+
+    private ColumnDescr       sourceColumn;
+    private ColumnDescr       resultColumn;
+    private String            initCode;
+    private String            actionCode;
+    private String            resultCode;
+    private String[]          declarations;
+    private String            classMethodName;
+
+    AccumulateDescr() {
+        super();
+    }
+
+    public int getLine() {
+        return sourceColumn.getLine();
+    }
+
+    public void setSourceColumn(ColumnDescr sourceColumn) {
+        this.sourceColumn = sourceColumn;
+    }
+
+    public ColumnDescr getSourceColumn() {
+        return sourceColumn;
+    }
+
+    public String getClassMethodName() {
+        return classMethodName;
+    }
+
+    public void setClassMethodName(String classMethodName) {
+        this.classMethodName = classMethodName;
+    }
+
+    public String[] getDeclarations() {
+        return declarations;
+    }
+
+    public void setDeclarations(String[] declarations) {
+        this.declarations = declarations;
+    }
+
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    public void setActionCode(String actionCode) {
+        this.actionCode = actionCode;
+    }
+
+    public String getInitCode() {
+        return initCode;
+    }
+
+    public void setInitCode(String initCode) {
+        this.initCode = initCode;
+    }
+
+    public String getResultCode() {
+        return resultCode;
+    }
+
+    public void setResultCode(String resultCode) {
+        this.resultCode = resultCode;
+    }
+    
+    public void setResultColumn(ColumnDescr resultColumn) {
+        this.resultColumn = resultColumn;
+    }
+    
+    public ColumnDescr getResultColumn() {
+        return this.resultColumn;
+    }
+
+    public String toString() {
+        return "[Accumulate: id=" + resultColumn.getIdentifier() + "; objectType=" + resultColumn.getObjectType() + "]";
+    }
+
+    public void addDescr(PatternDescr patternDescr) {
+        // Nothing to do
+    }
+
+    public List getDescrs() {
+        // nothing to do
+        return Collections.EMPTY_LIST;
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ColumnDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ColumnDescr.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ColumnDescr.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -29,6 +29,10 @@
     private String identifier;
     private List   descrs = Collections.EMPTY_LIST;
 
+    public ColumnDescr() {
+        this(null, null);
+    }
+    
     public ColumnDescr(final String objectType) {
         this( objectType,
               null );
@@ -51,6 +55,10 @@
         this.identifier = identifier;
     }
 
+    public void setObjectType(final String objectType) {
+        this.objectType = objectType;    
+    }
+    
     public String getObjectType() {
         return this.objectType;
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -10,9 +10,11 @@
  */
 public class DescrFactory {
 
-	public FromDescr createFrom() {
-		return new FromDescr();		
-	}
-	
-	
+    public FromDescr createFrom() {
+        return new FromDescr();
+    }
+
+    public AccumulateDescr createAccumulate() {
+        return new AccumulateDescr();
+    }
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/FunctionBuilder.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -19,7 +19,6 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.Reader;
 import java.io.StringReader;
 import java.util.Map;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/semantics/java/RuleBuilder.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -47,6 +47,7 @@
 import org.drools.facttemplates.FactTemplate;
 import org.drools.facttemplates.FactTemplateFieldExtractor;
 import org.drools.facttemplates.FactTemplateObjectType;
+import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.ArgumentValueDescr;
 import org.drools.lang.descr.AttributeDescr;
@@ -70,6 +71,7 @@
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.RuleDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.rule.Accumulate;
 import org.drools.rule.And;
 import org.drools.rule.AndCompositeRestriction;
 import org.drools.rule.Column;
@@ -313,6 +315,9 @@
                 } else if ( object.getClass() == FromDescr.class ) {
                     final From from = build( (FromDescr) object );
                     this.rule.addPattern( from );
+                } else if ( object.getClass() == AccumulateDescr.class ) {
+                    final Accumulate accumulate = build( (AccumulateDescr) object );
+                    this.rule.addPattern( accumulate );
                 }
             } else if ( object.getClass() == ColumnDescr.class ) {
                 final Column column = build( (ColumnDescr) object );
@@ -383,6 +388,9 @@
                 } else if ( object.getClass() == FromDescr.class ) {
                     final From from = build( (FromDescr) object );
                     this.rule.addPattern( from );
+                } else if ( object.getClass() == AccumulateDescr.class ) {
+                    final Accumulate accumulate = build( (AccumulateDescr) object );
+                    this.rule.addPattern( accumulate );
                 }
             } else if ( object.getClass() == ColumnDescr.class ) {
                 if ( decrementOffset && decrementFirst ) {
@@ -431,7 +439,7 @@
             column = new Column( this.columnCounter.getNext(),
                                  this.columnOffset,
                                  objectType,
-                                 columnDescr.getIdentifier() );;
+                                 columnDescr.getIdentifier() );
             this.declarations.put( column.getDeclaration().getIdentifier(),
                                    column.getDeclaration() );
 
@@ -1031,6 +1039,109 @@
         return eval;
     }
 
+    private Accumulate build(final AccumulateDescr accumDescr) {
+        Column sourceColumn = build( accumDescr.getSourceColumn() );
+        // decrementing offset as accumulate fills only one column
+        this.columnOffset--;
+        Column resultColumn = build( accumDescr.getResultColumn() );
+
+        final String className = "accumulate" + this.counter++;
+        accumDescr.setClassMethodName( className );
+
+        final List[] usedIdentifiers1 = getUsedIdentifiers( accumDescr,
+                                                            accumDescr.getInitCode() );
+        final List[] usedIdentifiers2 = getUsedIdentifiers( accumDescr,
+                                                            accumDescr.getActionCode() );
+        final List[] usedIdentifiers3 = getUsedIdentifiers( accumDescr,
+                                                            accumDescr.getResultCode() );
+
+        final List requiredDeclarations = new ArrayList( usedIdentifiers1[0] );
+        requiredDeclarations.addAll( usedIdentifiers2[0] );
+        requiredDeclarations.addAll( usedIdentifiers3[0] );
+        final List requiredGlobals = new ArrayList( usedIdentifiers1[1] );
+        requiredGlobals.addAll( usedIdentifiers2[1] );
+        requiredGlobals.addAll( usedIdentifiers3[1] );
+
+        final Declaration[] declarations = (Declaration[]) requiredDeclarations.toArray( new Declaration[requiredDeclarations.size()] );
+        final String[] globals = (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] );
+
+        StringTemplate st = RuleBuilder.ruleGroup.getInstanceOf( "accumulateMethod" );
+
+        setStringTemplateAttributes( st,
+                                     declarations,
+                                     globals,
+                                     null );
+
+        st.setAttribute( "methodName",
+                         className );
+
+        final String initCode = this.functionFixer.fix( accumDescr.getInitCode() );
+        final String actionCode = this.functionFixer.fix( accumDescr.getActionCode() );
+        final String resultCode = this.functionFixer.fix( accumDescr.getResultCode() );
+        st.setAttribute( "initCode",
+                         initCode );
+        st.setAttribute( "actionCode",
+                         actionCode );
+        st.setAttribute( "resultCode",
+                         resultCode );
+
+        String columnType = null;
+        // TODO: Need to change this... 
+        if ( sourceColumn.getObjectType() instanceof ClassObjectType ) {
+            columnType = ((ClassObjectType) sourceColumn.getObjectType()).getClassType().getName();
+        } else {
+            columnType = sourceColumn.getObjectType().getValueType().getClassType().getName();
+        }
+        
+        String resultType = null;
+        // TODO: Need to change this... 
+        if ( resultColumn.getObjectType() instanceof ClassObjectType ) {
+            resultType = ((ClassObjectType) resultColumn.getObjectType()).getClassType().getName();
+        } else {
+            resultType = resultColumn.getObjectType().getValueType().getClassType().getName();
+        }
+        
+        st.setAttribute( "columnType",
+                         columnType );
+        st.setAttribute( "columnDeclaration",
+                         sourceColumn.getDeclaration() );
+        st.setAttribute( "resultType",
+                         resultType );
+
+        this.methods.add( st.toString() );
+
+        st = RuleBuilder.invokerGroup.getInstanceOf( "accumulateInvoker" );
+
+        st.setAttribute( "package",
+                         this.pkg.getName() );
+        st.setAttribute( "ruleClassName",
+                         ucFirst( this.ruleDescr.getClassName() ) );
+        st.setAttribute( "invokerClassName",
+                         this.ruleDescr.getClassName() + ucFirst( className ) + "Invoker" );
+        st.setAttribute( "methodName",
+                         className );
+
+        setStringTemplateAttributes( st,
+                                     declarations,
+                                     (String[]) requiredGlobals.toArray( new String[requiredGlobals.size()] ),
+                                     null );
+
+        st.setAttribute( "hashCode",
+                         actionCode.hashCode() );
+
+        Accumulate accumulate = new Accumulate( sourceColumn,
+                                                resultColumn,
+                                                declarations);
+        final String invokerClassName = this.pkg.getName() + "." + this.ruleDescr.getClassName() + ucFirst( className ) + "Invoker";
+        this.invokers.put( invokerClassName,
+                           st.toString() );
+        this.invokerLookups.put( invokerClassName,
+                                 accumulate );
+        this.descrLookups.put( invokerClassName,
+                               accumDescr );
+        return accumulate;
+    }
+
     private void buildConsequence(final RuleDescr ruleDescr) {
         // generate 
         // generate Invoker
@@ -1126,7 +1237,7 @@
         final String[] lines = buffer.toString().split( lineSeparator );
 
         this.ruleDescr.setConsequenceOffset( lines.length + 1 );
-        
+
         buffer.append( this.methods.get( this.methods.size() - 1 ) + lineSeparator );
         buffer.append( "}" );
 

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-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/drl.g	2006-09-07 13:44:19 UTC (rev 6107)
@@ -1,1369 +1,1399 @@
-grammar RuleParser; 
-
- at parser::header {
-	package org.drools.lang;
-	import java.util.List;
-	import java.util.ArrayList;
-	import java.util.Iterator;
-	import java.util.Map;	
-	import java.util.HashMap;	
-	import java.util.StringTokenizer;
-	import org.drools.lang.descr.*;
-}
-
- at parser::members {
-	private ExpanderResolver expanderResolver;
-	private Expander expander;
-	private boolean expanderDebug = false;
-	private PackageDescr packageDescr;
-	private List errors = new ArrayList();
-	private String source = "unknown";
-	private int lineOffset = 0;
-	private DescrFactory factory = new DescrFactory();
-	
-	
-	private boolean parserDebug = false;
-	
-	public void setParserDebug(boolean parserDebug) {
-		this.parserDebug = parserDebug;
-	}
-	
-	public void debug(String message) {
-		if ( parserDebug ) 
-			System.err.println( "drl parser: " + message );
-	}
-	
-	public void setSource(String source) {
-		this.source = source;
-	}
-	
-	public DescrFactory getFactory() {
-		return factory;
-	}	
-
-	/**
-	 * This may be set to enable debuggin of DSLs/expanders.
-	 * If set to true, expander stuff will be sent to the Std out.
-	 */	
-	public void setExpanderDebug(boolean status) {
-		expanderDebug = status;
-	}
-	public String getSource() {
-		return this.source;
-	}
-	
-	public PackageDescr getPackageDescr() {
-		return packageDescr;
-	}
-	
-	private int offset(int line) {
-		return line + lineOffset;
-	}
-	
-	/**
-	 * This will set the offset to record when reparsing. Normally is zero of course 
-	 */
-	public void setLineOffset(int i) {
-	 	this.lineOffset = i;
-	}
-	
-	public void setExpanderResolver(ExpanderResolver expanderResolver) {
-		this.expanderResolver = expanderResolver;
-	}
-	
-	public ExpanderResolver getExpanderResolver() {
-		return expanderResolver;
-	}
-	
-	/** Expand the LHS */
-	private String runWhenExpander(String text, int line) throws RecognitionException {
-		String expanded = text.trim();
-		if (expanded.startsWith(">")) {
-			expanded = expanded.substring(1);  //escape !!
-		} else {
-			try {
-				expanded = expander.expand( "when", text );			
-			} catch (Exception e) {
-				this.errors.add(new ExpanderException("Unable to expand: " + text + ". Due to " + e.getMessage(), line));
-				return "";
-			}
-		}
-		if (expanderDebug) {
-			System.out.println("Expanding LHS: " + text + " ----> " + expanded + " --> from line: " + line);
-		}
-		return expanded;			
-	}
-	
-    	/** This will apply a list of constraints to an LHS block */
-    	private String applyConstraints(List constraints, String block) {
-    		//apply the constraints as a comma seperated list inside the previous block
-    		//the block will end in something like "foo()" and the constraint patterns will be put in the ()
-    		if (constraints == null) {
-    			return block;
-    		}
-    		StringBuffer list = new StringBuffer();    		
-    		for (Iterator iter = constraints.iterator(); iter.hasNext();) {
-				String con = (String) iter.next();
-				list.append("\n\t\t");
-				list.append(con);
-				if (iter.hasNext()) {
-					list.append(",");					
-				}			
-			}
-    		if (block.endsWith("()")) {
-    			return block.substring(0, block.length() - 2) + "(" + list.toString() + ")";
-    		} else {
-    			return block + "(" + list.toString() + ")";
-    		}
-    	}  
-    	
-        	/** Reparse the results of the expansion */
-    	private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
-    		CharStream charStream = new ANTLRStringStream( text  + " \n  then"); //need to then so it knows when to end... werd...
-    		RuleParserLexer lexer = new RuleParserLexer( charStream );
-    		TokenStream tokenStream = new CommonTokenStream( lexer );
-    		RuleParser parser = new RuleParser( tokenStream );
-    		parser.setLineOffset( descrs.getLine() );
-    		parser.normal_lhs_block(descrs);
-            
-                if (parser.hasErrors()) {
-    			this.errors.addAll(parser.getErrors());
-    		}
-		if (expanderDebug) {
-			System.out.println("Reparsing LHS: " + text + " --> successful:" + !parser.hasErrors());
-		}    		
-    		
-    	}
-	
-	/** Expand a line on the RHS */
-	private String runThenExpander(String text, int startLine) {
-		//System.err.println( "expand THEN [" + text + "]" );
-		StringTokenizer lines = new StringTokenizer( text, "\n\r" );
-
-		StringBuffer expanded = new StringBuffer();
-		
-		String eol = System.getProperty( "line.separator" );
-				
-		while ( lines.hasMoreTokens() ) {
-			startLine++;
-			String line = lines.nextToken();
-			line = line.trim();
-			if ( line.length() > 0 ) {
-				if ( line.startsWith( ">" ) ) {
-					expanded.append( line.substring( 1 ) );
-					expanded.append( eol );
-				} else {
-					try {
-						expanded.append( expander.expand( "then", line ) );
-						expanded.append( eol );
-					} catch (Exception e) {
-						this.errors.add(new ExpanderException("Unable to expand: " + line + ". Due to " + e.getMessage(), startLine));			
-					}
-				}
-			}
-		}
-		
-		if (expanderDebug) {
-			System.out.println("Expanding RHS: " + text + " ----> " + expanded.toString() + " --> from line starting: " + startLine);
-		}		
-		
-		return expanded.toString();
-	}
-	
-
-	
-	private String getString(Token token) {
-		String orig = token.getText();
-		return orig.substring( 1, orig.length() -1 );
-	}
-	
-	public void reportError(RecognitionException ex) {
-	        // if we've already reported an error and have not matched a token
-                // yet successfully, don't report any errors.
-                if ( errorRecovery ) {
-                        return;
-                }
-                errorRecovery = true;
-
-		ex.line = offset(ex.line); //add the offset if there is one
-		errors.add( ex ); 
-	}
-     	
-     	/** return the raw RecognitionException errors */
-     	public List getErrors() {
-     		return errors;
-     	}
-     	
-     	/** Return a list of pretty strings summarising the errors */
-     	public List getErrorMessages() {
-     		List messages = new ArrayList();
- 		for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
-     	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
-     	     	}
-     	     	return messages;
-     	}
-     	
-     	/** return true if any parser errors were accumulated */
-     	public boolean hasErrors() {
-  		return ! errors.isEmpty();
-     	}
-     	
-     	/** This will take a RecognitionException, and create a sensible error message out of it */
-     	public String createErrorMessage(RecognitionException e)
-        {
-		StringBuffer message = new StringBuffer();		
-                message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
-                if ( e instanceof MismatchedTokenException ) {
-                        MismatchedTokenException mte = (MismatchedTokenException)e;
-                        message.append("mismatched token: "+
-                                                           e.token+
-                                                           "; expecting type "+
-                                                           tokenNames[mte.expecting]);
-                }
-                else if ( e instanceof MismatchedTreeNodeException ) {
-                        MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
-                        message.append("mismatched tree node: "+
-                                                           mtne.foundNode+
-                                                           "; expecting type "+
-                                                           tokenNames[mtne.expecting]);
-                }
-                else if ( e instanceof NoViableAltException ) {
-                        NoViableAltException nvae = (NoViableAltException)e;
-			message.append( "Unexpected token '" + e.token.getText() + "'" );
-                        /*
-                        message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
-                                                           " state "+nvae.stateNumber+
-                                                           " (decision="+nvae.decisionNumber+
-                                                           ") no viable alt; token="+
-                                                           e.token);
-                                                           */
-                }
-                else if ( e instanceof EarlyExitException ) {
-                        EarlyExitException eee = (EarlyExitException)e;
-                        message.append("required (...)+ loop (decision="+
-                                                           eee.decisionNumber+
-                                                           ") did not match anything; token="+
-                                                           e.token);
-                }
-                else if ( e instanceof MismatchedSetException ) {
-                        MismatchedSetException mse = (MismatchedSetException)e;
-                        message.append("mismatched token '"+
-                                                           e.token+
-                                                           "' expecting set "+mse.expecting);
-                }
-                else if ( e instanceof MismatchedNotSetException ) {
-                        MismatchedNotSetException mse = (MismatchedNotSetException)e;
-                        message.append("mismatched token '"+
-                                                           e.token+
-                                                           "' expecting set "+mse.expecting);
-                }
-                else if ( e instanceof FailedPredicateException ) {
-                        FailedPredicateException fpe = (FailedPredicateException)e;
-                        message.append("rule "+fpe.ruleName+" failed predicate: {"+
-                                                           fpe.predicateText+"}?");
-                } else if (e instanceof GeneralParseException) {
-			message.append(" " + e.getMessage());
-		}
-               	return message.toString();
-        }   
-        
-        void checkTrailingSemicolon(String text, int line) {
-        	if (text.trim().endsWith( ";" ) ) {
-        		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
-        	}
-        }
-        
-        private String padConsequenceLine(int diff, String cons) {
-        	for(int i = 0; i < diff; i++) {
-        		cons = cons + '\n';
-        	}
-        	return cons;
-        }
-      
-}
-
- at lexer::header {
-	package org.drools.lang;
-}
-
-opt_eol	:
-		(';'|EOL)*	
-	;
-
-compilation_unit
-	:	opt_eol
-		prolog 
-		(	r=rule 	{this.packageDescr.addRule( r ); } 
-		| 	q=query	{this.packageDescr.addRule( q ); }
-		|	t=template	{this.packageDescr.addFactTemplate ( t ); }
-		|	extra_statement 
-		)*
-	;
-	
-prolog
-	@init {
-		String packageName = "";
-	}
-	:	opt_eol
-		( name=package_statement { packageName = name; } )?
-		{ 
-			this.packageDescr = new PackageDescr( name ); 
-		}
-		(	extra_statement
-		|	expander
-		)*
-		
-		opt_eol
-	;
-	
-package_statement returns [String packageName]
-	@init{
-		packageName = null;
-	}
-	:	
-		'package' opt_eol name=dotted_name ';'? opt_eol
-		{
-			packageName = name;
-		}
-	;
-	
-import_statement
-	:	'import' opt_eol name=import_name ';'? opt_eol
-		{
-			if (packageDescr != null) 
-				packageDescr.addImport( name );
-		}	
-	;
-
-function_import_statement
-	:	'import' 'function' opt_eol name=import_name ';'? opt_eol
-		{
-			if (packageDescr != null) 
-				packageDescr.addFunctionImport( name );
-		}	
-	;
-
-
-import_name returns [String name]
-	@init {
-		name = null;
-	}
-	:	
-		id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* (star='.*' { name = name + star.getText(); })?
-	;
-expander
-	@init {
-		String config=null;
-	}
-	:	'expander' (name=dotted_name)? ';'? opt_eol
-		{
-			if (expanderResolver == null) 
-				throw new IllegalArgumentException("Unable to use expander. Make sure a expander or dsl config is being passed to the parser. [ExpanderResolver was not set].");
-			if ( expander != null )
-				throw new IllegalArgumentException( "Only one 'expander' statement per file is allowed" );
-			expander = expanderResolver.get( name, config );
-		}
-	;
-	
-global
-	@init {
-	}
-	:
-		'global' type=dotted_name id=ID ';'? opt_eol
-		{
-			packageDescr.addGlobal( id.getText(), type );
-		}
-	;
-	
-function
-	@init {
-		FunctionDescr f = null;
-	}
-	:
-		'function' opt_eol (retType=dotted_name)? opt_eol name=ID opt_eol
-		{
-			//System.err.println( "function :: " + name.getText() );
-			f = new FunctionDescr( name.getText(), retType );
-		} 
-		'(' opt_eol
-			(	(paramType=dotted_name)? opt_eol paramName=argument_name opt_eol
-				{
-					f.addParameter( paramType, paramName );
-				}
-				(	',' opt_eol (paramType=dotted_name)? opt_eol paramName=argument_name opt_eol 
-					{
-						f.addParameter( paramType, paramName );
-					}
-				)*
-			)?
-		')'
-		opt_eol
-		'{'
-			body=curly_chunk
-			{
-				f.setText( body );
-			}
-		'}'
-		{
-			packageDescr.addFunction( f );
-		}
-		opt_eol
-	;
-
-
-query returns [QueryDescr query]
-	@init {
-		query = null;
-	}
-	:
-		opt_eol
-		loc='query' queryName=word opt_eol 
-		{ 
-			query = new QueryDescr( queryName, null ); 
-			query.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			AndDescr lhs = new AndDescr(); query.setLhs( lhs ); 
-			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-		(
-			{ expander != null }? expander_lhs_block[lhs]
-			| normal_lhs_block[lhs]
-		)
-					
-		'end' opt_eol
-	;
-	
-template returns [FactTemplateDescr template]
-	@init {
-		template = null;		
-	}
-	:
-		opt_eol
-		loc='template' templateName=ID EOL
-		{
-			template = new FactTemplateDescr(templateName.getText());
-			template.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );			
-		}
-		(
-			slot=template_slot 
-			{
-				template.addFieldTemplate(slot);
-			}
-		)+
-		'end' EOL		
-	;
-	
-template_slot returns [FieldTemplateDescr field]
-	@init {
-		field = null;
-	}
-	:
-		//name=ID ':' fieldType=dotted_name ( EOL | ';' )
-		 fieldType=dotted_name name=ID ( EOL | ';' )
-		{
-			
-			
-			field = new FieldTemplateDescr(name.getText(), fieldType);
-			field.setLocation( offset(name.getLine()), name.getCharPositionInLine() );
-		}
-	;	
-	
-rule returns [RuleDescr rule]
-	@init {
-		rule = null;
-		String consequence = "";
-	}
-	:
-		opt_eol
-		loc='rule' ruleName=word opt_eol 
-		{ 
-			debug( "start rule: " + ruleName );
-			rule = new RuleDescr( ruleName, null ); 
-			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-		(	rule_attributes[rule]
-		)?
-		opt_eol
-		((	loc='when' ':'? opt_eol
-			{ 
-				AndDescr lhs = new AndDescr(); rule.setLhs( lhs ); 
-				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-			(
-				{ expander != null }? expander_lhs_block[lhs]
-				| normal_lhs_block[lhs]
-			)
-					
-		)?
-		( opt_eol loc='then' ':'?  opt_eol 
-			{int prevLine = loc.getLine()+1; }
-			( options{greedy=false;} : any=. (EOL)*
-				{
-					/*
-					if (prevLine = 0) { prevLine = any.getLine() ;}
-					
-					int lineDif = any.getLine() - prevLine - 1;
-					consequence = padConsequenceLines(lineDif, consequence);
-					*/
-					int diff = any.getLine() - prevLine;
-					consequence = padConsequenceLine(diff, consequence);
-					consequence = consequence + " " + any.getText();
-					prevLine = any.getLine();
-				}
-			)*
-			{
-				if ( expander != null ) {
-					String expanded = runThenExpander( consequence, offset(loc.getLine()) );
-					rule.setConsequence( expanded );
-				} else { 
-					rule.setConsequence( consequence ); 
-				}
-				rule.setConsequenceLocation(offset(loc.getLine()), loc.getCharPositionInLine());
-			})?
-		)?
-		'end' opt_eol
-		{
-			debug( "end rule: " + ruleName );
-		} 
-	;
-	
-extra_statement
-	:
-	(	import_statement
-	|	function_import_statement
-	|	global
-	|	function
-	)
-	;
-
-rule_attributes[RuleDescr rule]
-	: 
-			'attributes'? ':'? opt_eol
-			(	','? a=rule_attribute opt_eol
-				{
-					rule.addAttribute( a );
-				}
-			)*
-	;
-	
-rule_attribute returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-			a=salience { d = a; }
-		|	a=no_loop  { d = a; }
-		|	a=agenda_group  { d = a; }		
-		|	a=duration  { d = a; }			
-		|	a=activation_group { d = a; }	
-		|	a=auto_focus { d = a; }	
-		
-	;
-	
-salience returns [AttributeDescr d ]
-	@init {
-		d = null;
-	}
-	:	
-		loc='salience' opt_eol i=INT ';'? opt_eol
-		{
-			d = new AttributeDescr( "salience", i.getText() );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;
-	
-no_loop returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		(
-			loc='no-loop' opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "no-loop", "true" );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		) 
-		|
-		(
-			loc='no-loop' t=BOOL opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "no-loop", t.getText() );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		
-		)
-		
-	;
-	
-auto_focus returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		(
-			loc='auto-focus' opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "auto-focus", "true" );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		) 
-		|
-		(
-			loc='auto-focus' t=BOOL opt_eol ';'? opt_eol
-			{
-				d = new AttributeDescr( "auto-focus", t.getText() );
-				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			}
-		
-		)
-		
-	;	
-	
-activation_group returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		loc='activation-group' opt_eol name=STRING ';'? opt_eol
-		{
-			d = new AttributeDescr( "activation-group", getString( name ) );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;
-
-agenda_group returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		loc='agenda-group' opt_eol name=STRING ';'? opt_eol
-		{
-			d = new AttributeDescr( "agenda-group", getString( name ) );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;		
-
-
-duration returns [AttributeDescr d]
-	@init {
-		d = null;
-	}
-	:
-		loc='duration' opt_eol i=INT ';'? opt_eol
-		{
-			d = new AttributeDescr( "duration", i.getText() );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;		
-	
-
-normal_lhs_block[AndDescr descrs]
-	:
-		(	d=lhs opt_eol
-			{ descrs.addDescr( d ); }
-		)* opt_eol
-	;
-
-	
-
-	
-expander_lhs_block[AndDescr descrs]
-	@init {
-		String lhsBlock = null;
-		String eol = System.getProperty( "line.separator" );
-		List constraints = null;
-	}
-	:
-		(options{greedy=false;} : 
-			text=paren_chunk loc=EOL 
-			{
-				//only expand non null
-				if (text != null) {
-					if (text.trim().startsWith("-")) {
-						if (constraints == null) {
-							constraints = new ArrayList();
-						}
-						constraints.add(runWhenExpander( text, offset(loc.getLine())));
-					} else {
-						if (constraints != null) {
-							lhsBlock = applyConstraints(constraints, lhsBlock);
-							constraints = null;
-						}
-					
-					
-						if (lhsBlock == null) {					
-							lhsBlock = runWhenExpander( text, offset(loc.getLine()));
-						} else {
-							lhsBlock = lhsBlock + eol + runWhenExpander( text, offset(loc.getLine()));
-						}
-					}
-					text = null;
-				}
-			}
-			
-		(EOL)* )* 
-		
-		{	
-			//flush out any constraints left handing before the RHS
-			lhsBlock = applyConstraints(constraints, lhsBlock);
-			if (lhsBlock != null) {
-				reparseLhs(lhsBlock, descrs);
-			}
-		}
-
-	;
-	
-	
-	
-lhs returns [PatternDescr d]
-	@init {
-		d=null;
-	}
-	:	l=lhs_or { d = l; } 
-	;
-
-	
-lhs_column returns [PatternDescr d]
-	@init {
-		d=null;
-	}
-	:	f=fact_binding { d = f; }
-	|	f=fact { d = f; }
-	;
-	
-from_statement returns [FromDescr d]
-	@init {
-		d=factory.createFrom();
-	}
- 	:
- 		'from' opt_eol ds=from_source
- 		{
- 			d.setDataSource(ds);
- 		
- 		}
- 		
- 		
- 		
-	;
-	
-from_source returns [DeclarativeInvokerDescr ds]
-	@init {
-		ds = null;
-	}
-	:
-		(var=ID '.' field=ID 
-		
-			{
-			  FieldAccessDescr fa = new FieldAccessDescr(var.getText(), field.getText());	
-			  fa.setLine(var.getLine());
-			  ds = fa;
-			 }
-	
-		) 
-		|
-		(var=ID '.' method=ID opt_eol  '(' opt_eol args=argument_list opt_eol ')' 
-			{
-			MethodAccessDescr mc = new MethodAccessDescr(var.getText(), method.getText());
-			mc.setArguments(args);
-			mc.setLine(var.getLine());
-			ds = mc;
-			}	
-		)
-		|
-		(functionName=ID opt_eol '(' opt_eol args=argument_list opt_eol ')'
-			{
-			FunctionCallDescr fc = new FunctionCallDescr(functionName.getText());
-			fc.setLine(functionName.getLine());
-			fc.setArguments(args);
-			ds = fc;
-			}
-
-		
-		)
-	
-	;	
-	
-argument_list returns [ArrayList args]
-	@init {
-		args = new ArrayList();
-	}
-	:
-		(param=argument_value  {
-			if (param != null) {
-				args.add(param);
-			}
-		}
-		 
-		(
-			opt_eol ',' opt_eol param=argument_value {
-				if (param != null) {
-					args.add(param);
-				}
-			}
-		)*
-		)?
-	;		
-	
-argument_value returns [ArgumentValueDescr value]
-	@init {
-		value = null;
-		String text = null;
-	}
-	:	(	t=STRING { text = getString( t );  value=new ArgumentValueDescr(ArgumentValueDescr.STRING, text);} 
-		|	t=INT    { text = t.getText();  value=new ArgumentValueDescr(ArgumentValueDescr.INTEGRAL, text);}
-		|	t=FLOAT	 { text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.DECIMAL, text); }
-		|	t=BOOL 	 { text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.BOOLEAN, text); }
-		|	t=ID { text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.VARIABLE, text);}	
-		|	t='null' { text = "null"; value=new ArgumentValueDescr(ArgumentValueDescr.NULL, text);}	
-		|	t='null' { text = "null"; value=new ArgumentValueDescr(ArgumentValueDescr.NULL, text);}			
-		|       m=inline_map {  value=new ArgumentValueDescr(ArgumentValueDescr.MAP, m.getKeyValuePairs() ); }
-		|       a=inline_array { value = new ArgumentValueDescr(ArgumentValueDescr.LIST, a ); }		
-		)
-	;			
-
-inline_map returns [ArgumentValueDescr.MapDescr mapDescr]
-    @init {
-        mapDescr = new ArgumentValueDescr.MapDescr();
-    }	
-    :  '{' 
-           ( key=argument_value '=>' value=argument_value {
-                 if ( key != null ) {
-                     mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
-                 }
-             }
-           )
-           
-           ( (EOL)? ',' (EOL)? key=argument_value '=>' value=argument_value {
-                 if ( key != null ) {
-                     mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
-                 }
-             }
-           )*           
-       '}'
-    ;
-    
-inline_array returns [List list]
-    @init {
-    	list = new ArrayList();
-    }		    
-    :
-    '[' arg=argument_value { list.add(arg); }
-    
-     	 ( EOL? ',' EOL? arg=argument_value { list.add(arg); } )*
-      ']'
-      
-    
-    ; 	
-fact_binding returns [PatternDescr d]
-	@init {
-		d=null;
-		boolean multi=false;
-	}
- 	:
- 		id=ID 
- 		
- 		opt_eol ':' opt_eol fe=fact_expression[id.getText()]
- 		{
- 			d=fe;
- 		}
-	;
- 
- fact_expression[String id] returns [PatternDescr pd]
- 	@init {
- 		pd = null;
- 		boolean multi = false;
- 	}
- 	:	'(' opt_eol fe=fact_expression[id]opt_eol ')' { pd=fe; }
- 	| 	f=fact opt_eol
- 		{
- 			((ColumnDescr)f).setIdentifier( id );
- 			pd = f;
- 		}
- 		(	('or'|'||') opt_eol
- 			{	if ( ! multi ) {
- 					PatternDescr first = pd;
- 					pd = new OrDescr();
- 					((OrDescr)pd).addDescr( first );
- 					multi=true;
- 				}
- 			}
- 			f=fact
- 			{
- 				((ColumnDescr)f).setIdentifier( id );
- 				((OrDescr)pd).addDescr( f );
- 			}
- 		)*	
-	;
- 
-fact returns [PatternDescr d] 
-	@init {
-		d=null;
-	}
- 	:	id=dotted_name 
- 		{ 
- 			d = new ColumnDescr( id ); 
- 		} opt_eol 
- 		loc='(' {
- 				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
- 			}opt_eol (	c=constraints
- 				{
-		 			for ( Iterator cIter = c.iterator() ; cIter.hasNext() ; ) {
- 						((ColumnDescr)d).addDescr( (PatternDescr) cIter.next() );
- 					}
- 				}
- 
- 				)? opt_eol endLoc=')' opt_eol
- 				{
- 					d.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );	
- 				}
- 	;
-	
-	
-constraints returns [List constraints]
-	@init {
-		constraints = new ArrayList();
-	}
-	:	opt_eol
-		(constraint[constraints]|predicate[constraints])
-		( opt_eol ',' opt_eol (constraint[constraints]|predicate[constraints]))*
-		opt_eol
-	;
-	
-constraint[List constraints]
-	@init {
-		PatternDescr d = null;
-	}
-	:	opt_eol
-		( fb=ID opt_eol ':' opt_eol )? 
-		f=ID	
-		{
-
-			if ( fb != null ) {
-				//System.err.println( "fb: " + fb.getText() );
-				//System.err.println( " f: " + f.getText() );
-				d = new FieldBindingDescr( f.getText(), fb.getText() );
-				//System.err.println( "fbd: " + d );
-				
-				d.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-				constraints.add( d );
-			} 
-			FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());
-			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-									
-			
-		}				
-			opt_eol (	op=operator opt_eol	
-					
-					(	bvc=ID
-						{
-							
-														
-							
-							VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
-							fc.addRestriction(vd);
-							constraints.add(fc);
-							
-						}
-					|
-						lc=enum_constraint 
-						{ 
-
-							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
-							fc.addRestriction(lrd);
-							constraints.add(fc);
-							
-						}						
-					|
-						lc=literal_constraint 
-						{ 
-							
-							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
-							fc.addRestriction(lrd);
-							constraints.add(fc);
-							
-						}
-					|	rvc=retval_constraint 
-						{ 
-							
-							
-
-							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
-							fc.addRestriction(rvd);
-							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(op, rvc);							
-								fc.addRestriction(rvd);
-								
-							} 
-						)						
-						
-					)*
-				)?					
-		opt_eol
-	;
-		
-literal_constraint returns [String text]
-	@init {
-		text = null;
-	}
-	:	(	t=STRING { text = getString( t ); } //t.getText(); text=text.substring( 1, text.length() - 1 ); }
-		|	t=INT    { text = t.getText(); }
-		|	t=FLOAT	 { text = t.getText(); }
-		|	t=BOOL 	 { text = t.getText(); }
-		|	t='null' { text = null; }
-		)
-	;
-	
-enum_constraint returns [String text]
-	@init {
-		text = null;
-	}
-	:	(cls=ID '.' en=ID) { text = cls.getText() + "." + en.getText(); }
-	;	
-	
-retval_constraint returns [String text]
-	@init {
-		text = null;
-	}
-	:	
-		'('  c=paren_chunk  ')' { text = c; }
-	;
-
-predicate[List constraints]
-	:
-		decl=ID ':' field=ID '->' '(' text=paren_chunk ')'
-		{
-			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
-			constraints.add( d );
-		}
-	;
-	
-paren_chunk returns [String text]
-	@init {
-		text = null;
-	}
-	
-	:
-		 (	options{greedy=false;} : 
-			'(' c=paren_chunk ')' 	
-			{
-				if ( c == null ) {
-					c = "";
-				}
-				if ( text == null ) {
-					text = "( " + c + " )";
-				} else {
-					text = text + " ( " + c + " )";
-				}
-			} 
-		| any=. 
-			{
-				if ( text == null ) {
-					text = any.getText();
-				} else {
-					text = text + " " + any.getText(); 
-				} 
-			}
-		)* 
-	;
-	
-//NOTE: this is needed as there is a bug in antlr if you sometimes use the same sub rule in multiple places
-paren_chunk2 returns [String text]
-	@init {
-		text = null;
-	}
-	
-	:
-		 (	options{greedy=false;} : 
-			'(' c=paren_chunk2 ')' 	
-			{
-				if ( c == null ) {
-					c = "";
-				}
-				if ( text == null ) {
-					text = "( " + c + " )";
-				} else {
-					text = text + " ( " + c + " )";
-				}
-			} 
-		| any=. 
-			{
-				if ( text == null ) {
-					text = any.getText();
-				} else {
-					text = text + " " + any.getText(); 
-				} 
-			}
-		)* 
-	;
-	
-curly_chunk returns [String text]
-	@init {
-		text = null;
-	}
-	
-	:
-		(	options{greedy=false;} : 
-			'{' c=curly_chunk '}' 	
-			{
-				//System.err.println( "chunk [" + c + "]" );
-				if ( c == null ) {
-					c = "";
-				}
-				if ( text == null ) {
-					text = "{ " + c + " }";
-				} else {
-					text = text + " { " + c + " }";
-				}
-			} 
-		| any=. 
-			{
-				//System.err.println( "any [" + any.getText() + "]" );
-				if ( text == null ) {
-					text = any.getText();
-				} else {
-					text = text + " " + any.getText(); 
-				} 
-			}
-		)*
-	;	
-	
-lhs_or returns [PatternDescr d]
-	@init{
-		d = null;
-	}
-	:	
-		{ OrDescr or = null; }
-		left=lhs_and {d = left; }
-		( ('or'|'||') opt_eol
-			right=lhs_and 
-			{
-				if ( or == null ) {
-					or = new OrDescr();
-					or.addDescr( left );
-					d = or;
-				}
-				
-				or.addDescr( right );
-			}
-		)*
-	;
-	
-lhs_and returns [PatternDescr d]
-	@init{
-		d = null;
-	}
-	:
-		{ AndDescr and = null; }
-		left=lhs_unary { d = left; }
-		( ('and'|'&&') opt_eol
-			right=lhs_unary 
-			{
-				if ( and == null ) {
-					and = new AndDescr();
-					and.addDescr( left );
-					d = and;
-				}
-				
-				and.addDescr( right );
-			}
-		)* 
-	;
-	
-lhs_unary returns [PatternDescr d]
-	@init {
-		d = null;
-	}
-	:	(	u=lhs_exist {d = u;}
-		|	u=lhs_not {d = u;}
-		|	u=lhs_eval {d = u;}				
-		|	u=lhs_column {d=u;} (fm=from_statement {fm.setColumn((ColumnDescr) u); d=fm;})?
-		|	'(' opt_eol u=lhs opt_eol ')' {d = u;}
-		) 
-	;
-	
-lhs_exist returns [PatternDescr d]
-	@init {
-		d = null;
-	}
-	:	loc='exists' ('(' column=lhs_column ')' | column=lhs_column)
-		{ 
-			d = new ExistsDescr( (ColumnDescr) column ); 
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}	
-	;
-	
-lhs_not	returns [NotDescr d]
-	@init {
-		d = null;
-	}
-	:	loc='not' ('(' column=lhs_column  ')' | column=lhs_column)
-		{
-			d = new NotDescr( (ColumnDescr) column ); 
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-		}
-	;
-
-lhs_eval returns [PatternDescr d]
-	@init {
-		d = null;
-		String text = "";
-	}
-	:	'eval' loc='(' 
-			c=paren_chunk2
-		')' 
-		{ 
-			checkTrailingSemicolon( c, offset(loc.getLine()) );
-			d = new EvalDescr( c ); 
-		}
-	;
-	
-dotted_name returns [String name]
-	@init {
-		name = null;
-	}
-	:	
-		id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* ( '[' ']' { name = name + "[]";})*
-	;
-	
-argument_name returns [String name]
-	@init {
-		name = null;
-	}
-	:
-		id=ID { name=id.getText(); } ( '[' ']' { name = name + "[]";})*
-	;
-
-	
-word returns [String word]
-	@init{
-		word = null;
-	}
-	:	id=ID      { word=id.getText(); }
-	|	'import'   { word="import"; }
-	|	'use'      { word="use"; }
-	|	'rule'     { word="rule"; }
-	|	'query'    { word="query"; }
-	|	'salience' { word="salience"; }
- 	|	'no-loop'  { word="no-loop"; }
-	|	'when'     { word="when"; }
-	|	'then'     { word="then"; }
-	|	'end'      { word="end"; }
-	|	str=STRING { word=getString(str);} 
-	;
-
-operator returns [String str] 	
-	@init {
-		str = null;
-	}
-	:
-
-		'==' {str= "==";}
-		|'=' {str="==";}
-		|'>' {str=">";}
-		|'>=' {str=">=";}		
-		|'<' {str="<";}
-		|'<=' {str="<=";}
-		|'!=' {str="!=";}
-		|'contains' {str="contains";}
-		|'matches' {str="matches";}
-		|'excludes' {str="excludes";}
-					
-						
-	;
-
-
-
-MISC 	:
-		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?'
-		| '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\'
-		| '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' |'*=' | '=*' 
-		| '/=' | '=/' | '>>=' 
-		
-	;
-	
-WS      :       (	' '
-                |	'\t'
-                |	'\f'
-                )
-                { channel=99; }
-        ;
-        
-EOL 	:	     
-   		(       ( '\r\n' )=> '\r\n'  // Evil DOS
-                |       '\r'    // Macintosh
-                |       '\n'    // Unix (the right way)
-                )
-        ;  
-        
-INT	
-	:	('-')?('0'..'9')+
-	;
-
-FLOAT
-	:	('-')?('0'..'9')+ '.' ('0'..'9')+
-	;
-	
-STRING
-	:	('"' ( options{greedy=false;} : .)* '"' ) | ('\'' ( options{greedy=false;} : .)* '\'')
-	;
-	
-BOOL
-	:	('true'|'false') 
-	;	
-	
-ID	
-	:	('a'..'z'|'A'..'Z'|'_'|'$' | '\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9' | '\u00c0'..'\u00ff')* 
-	;
-	
-		
-
-SH_STYLE_SINGLE_LINE_COMMENT	
-	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
-                { channel=99; }
-	;
-        
-        
-C_STYLE_SINGLE_LINE_COMMENT	
-	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
-                { channel=99; }
-	;
-
-MULTI_LINE_COMMENT
-	:	'/*' (options{greedy=false;} : .)* '*/'
-                { channel=99; }
-	;
+grammar RuleParser; 
+
+ at parser::header {
+	package org.drools.lang;
+	import java.util.List;
+	import java.util.ArrayList;
+	import java.util.Iterator;
+	import java.util.Map;	
+	import java.util.HashMap;	
+	import java.util.StringTokenizer;
+	import org.drools.lang.descr.*;
+}
+
+ at parser::members {
+	private ExpanderResolver expanderResolver;
+	private Expander expander;
+	private boolean expanderDebug = false;
+	private PackageDescr packageDescr;
+	private List errors = new ArrayList();
+	private String source = "unknown";
+	private int lineOffset = 0;
+	private DescrFactory factory = new DescrFactory();
+	
+	
+	private boolean parserDebug = false;
+	
+	public void setParserDebug(boolean parserDebug) {
+		this.parserDebug = parserDebug;
+	}
+	
+	public void debug(String message) {
+		if ( parserDebug ) 
+			System.err.println( "drl parser: " + message );
+	}
+	
+	public void setSource(String source) {
+		this.source = source;
+	}
+	
+	public DescrFactory getFactory() {
+		return factory;
+	}	
+
+	/**
+	 * This may be set to enable debuggin of DSLs/expanders.
+	 * If set to true, expander stuff will be sent to the Std out.
+	 */	
+	public void setExpanderDebug(boolean status) {
+		expanderDebug = status;
+	}
+	public String getSource() {
+		return this.source;
+	}
+	
+	public PackageDescr getPackageDescr() {
+		return packageDescr;
+	}
+	
+	private int offset(int line) {
+		return line + lineOffset;
+	}
+	
+	/**
+	 * This will set the offset to record when reparsing. Normally is zero of course 
+	 */
+	public void setLineOffset(int i) {
+	 	this.lineOffset = i;
+	}
+	
+	public void setExpanderResolver(ExpanderResolver expanderResolver) {
+		this.expanderResolver = expanderResolver;
+	}
+	
+	public ExpanderResolver getExpanderResolver() {
+		return expanderResolver;
+	}
+	
+	/** Expand the LHS */
+	private String runWhenExpander(String text, int line) throws RecognitionException {
+		String expanded = text.trim();
+		if (expanded.startsWith(">")) {
+			expanded = expanded.substring(1);  //escape !!
+		} else {
+			try {
+				expanded = expander.expand( "when", text );			
+			} catch (Exception e) {
+				this.errors.add(new ExpanderException("Unable to expand: " + text + ". Due to " + e.getMessage(), line));
+				return "";
+			}
+		}
+		if (expanderDebug) {
+			System.out.println("Expanding LHS: " + text + " ----> " + expanded + " --> from line: " + line);
+		}
+		return expanded;			
+	}
+	
+    	/** This will apply a list of constraints to an LHS block */
+    	private String applyConstraints(List constraints, String block) {
+    		//apply the constraints as a comma seperated list inside the previous block
+    		//the block will end in something like "foo()" and the constraint patterns will be put in the ()
+    		if (constraints == null) {
+    			return block;
+    		}
+    		StringBuffer list = new StringBuffer();    		
+    		for (Iterator iter = constraints.iterator(); iter.hasNext();) {
+				String con = (String) iter.next();
+				list.append("\n\t\t");
+				list.append(con);
+				if (iter.hasNext()) {
+					list.append(",");					
+				}			
+			}
+    		if (block.endsWith("()")) {
+    			return block.substring(0, block.length() - 2) + "(" + list.toString() + ")";
+    		} else {
+    			return block + "(" + list.toString() + ")";
+    		}
+    	}  
+    	
+        	/** Reparse the results of the expansion */
+    	private void reparseLhs(String text, AndDescr descrs) throws RecognitionException {
+    		CharStream charStream = new ANTLRStringStream( text  + " \n  then"); //need to then so it knows when to end... werd...
+    		RuleParserLexer lexer = new RuleParserLexer( charStream );
+    		TokenStream tokenStream = new CommonTokenStream( lexer );
+    		RuleParser parser = new RuleParser( tokenStream );
+    		parser.setLineOffset( descrs.getLine() );
+    		parser.normal_lhs_block(descrs);
+            
+                if (parser.hasErrors()) {
+    			this.errors.addAll(parser.getErrors());
+    		}
+		if (expanderDebug) {
+			System.out.println("Reparsing LHS: " + text + " --> successful:" + !parser.hasErrors());
+		}    		
+    		
+    	}
+	
+	/** Expand a line on the RHS */
+	private String runThenExpander(String text, int startLine) {
+		//System.err.println( "expand THEN [" + text + "]" );
+		StringTokenizer lines = new StringTokenizer( text, "\n\r" );
+
+		StringBuffer expanded = new StringBuffer();
+		
+		String eol = System.getProperty( "line.separator" );
+				
+		while ( lines.hasMoreTokens() ) {
+			startLine++;
+			String line = lines.nextToken();
+			line = line.trim();
+			if ( line.length() > 0 ) {
+				if ( line.startsWith( ">" ) ) {
+					expanded.append( line.substring( 1 ) );
+					expanded.append( eol );
+				} else {
+					try {
+						expanded.append( expander.expand( "then", line ) );
+						expanded.append( eol );
+					} catch (Exception e) {
+						this.errors.add(new ExpanderException("Unable to expand: " + line + ". Due to " + e.getMessage(), startLine));			
+					}
+				}
+			}
+		}
+		
+		if (expanderDebug) {
+			System.out.println("Expanding RHS: " + text + " ----> " + expanded.toString() + " --> from line starting: " + startLine);
+		}		
+		
+		return expanded.toString();
+	}
+	
+
+	
+	private String getString(Token token) {
+		String orig = token.getText();
+		return orig.substring( 1, orig.length() -1 );
+	}
+	
+	public void reportError(RecognitionException ex) {
+	        // if we've already reported an error and have not matched a token
+                // yet successfully, don't report any errors.
+                if ( errorRecovery ) {
+                        return;
+                }
+                errorRecovery = true;
+
+		ex.line = offset(ex.line); //add the offset if there is one
+		errors.add( ex ); 
+	}
+     	
+     	/** return the raw RecognitionException errors */
+     	public List getErrors() {
+     		return errors;
+     	}
+     	
+     	/** Return a list of pretty strings summarising the errors */
+     	public List getErrorMessages() {
+     		List messages = new ArrayList();
+ 		for ( Iterator errorIter = errors.iterator() ; errorIter.hasNext() ; ) {
+     	     		messages.add( createErrorMessage( (RecognitionException) errorIter.next() ) );
+     	     	}
+     	     	return messages;
+     	}
+     	
+     	/** return true if any parser errors were accumulated */
+     	public boolean hasErrors() {
+  		return ! errors.isEmpty();
+     	}
+     	
+     	/** This will take a RecognitionException, and create a sensible error message out of it */
+     	public String createErrorMessage(RecognitionException e)
+        {
+		StringBuffer message = new StringBuffer();		
+                message.append( source + ":"+e.line+":"+e.charPositionInLine+" ");
+                if ( e instanceof MismatchedTokenException ) {
+                        MismatchedTokenException mte = (MismatchedTokenException)e;
+                        message.append("mismatched token: "+
+                                                           e.token+
+                                                           "; expecting type "+
+                                                           tokenNames[mte.expecting]);
+                }
+                else if ( e instanceof MismatchedTreeNodeException ) {
+                        MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e;
+                        message.append("mismatched tree node: "+
+                                                           mtne.foundNode+
+                                                           "; expecting type "+
+                                                           tokenNames[mtne.expecting]);
+                }
+                else if ( e instanceof NoViableAltException ) {
+                        NoViableAltException nvae = (NoViableAltException)e;
+			message.append( "Unexpected token '" + e.token.getText() + "'" );
+                        /*
+                        message.append("decision=<<"+nvae.grammarDecisionDescription+">>"+
+                                                           " state "+nvae.stateNumber+
+                                                           " (decision="+nvae.decisionNumber+
+                                                           ") no viable alt; token="+
+                                                           e.token);
+                                                           */
+                }
+                else if ( e instanceof EarlyExitException ) {
+                        EarlyExitException eee = (EarlyExitException)e;
+                        message.append("required (...)+ loop (decision="+
+                                                           eee.decisionNumber+
+                                                           ") did not match anything; token="+
+                                                           e.token);
+                }
+                else if ( e instanceof MismatchedSetException ) {
+                        MismatchedSetException mse = (MismatchedSetException)e;
+                        message.append("mismatched token '"+
+                                                           e.token+
+                                                           "' expecting set "+mse.expecting);
+                }
+                else if ( e instanceof MismatchedNotSetException ) {
+                        MismatchedNotSetException mse = (MismatchedNotSetException)e;
+                        message.append("mismatched token '"+
+                                                           e.token+
+                                                           "' expecting set "+mse.expecting);
+                }
+                else if ( e instanceof FailedPredicateException ) {
+                        FailedPredicateException fpe = (FailedPredicateException)e;
+                        message.append("rule "+fpe.ruleName+" failed predicate: {"+
+                                                           fpe.predicateText+"}?");
+                } else if (e instanceof GeneralParseException) {
+			message.append(" " + e.getMessage());
+		}
+               	return message.toString();
+        }   
+        
+        void checkTrailingSemicolon(String text, int line) {
+        	if (text.trim().endsWith( ";" ) ) {
+        		this.errors.add( new GeneralParseException( "Trailing semi-colon not allowed", offset(line) ) );
+        	}
+        }
+        
+        private String padConsequenceLine(int diff, String cons) {
+        	for(int i = 0; i < diff; i++) {
+        		cons = cons + '\n';
+        	}
+        	return cons;
+        }
+      
+}
+
+ at lexer::header {
+	package org.drools.lang;
+}
+
+opt_eol	:
+		(';'|EOL)*	
+	;
+
+compilation_unit
+	:	opt_eol
+		prolog 
+		(	r=rule 	{this.packageDescr.addRule( r ); } 
+		| 	q=query	{this.packageDescr.addRule( q ); }
+		|	t=template	{this.packageDescr.addFactTemplate ( t ); }
+		|	extra_statement 
+		)*
+	;
+	
+prolog
+	@init {
+		String packageName = "";
+	}
+	:	opt_eol
+		( name=package_statement { packageName = name; } )?
+		{ 
+			this.packageDescr = new PackageDescr( name ); 
+		}
+		(	extra_statement
+		|	expander
+		)*
+		
+		opt_eol
+	;
+	
+package_statement returns [String packageName]
+	@init{
+		packageName = null;
+	}
+	:	
+		'package' opt_eol name=dotted_name ';'? opt_eol
+		{
+			packageName = name;
+		}
+	;
+	
+import_statement
+	:	'import' opt_eol name=import_name ';'? opt_eol
+		{
+			if (packageDescr != null) 
+				packageDescr.addImport( name );
+		}	
+	;
+
+function_import_statement
+	:	'import' 'function' opt_eol name=import_name ';'? opt_eol
+		{
+			if (packageDescr != null) 
+				packageDescr.addFunctionImport( name );
+		}	
+	;
+
+
+import_name returns [String name]
+	@init {
+		name = null;
+	}
+	:	
+		id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* (star='.*' { name = name + star.getText(); })?
+	;
+expander
+	@init {
+		String config=null;
+	}
+	:	'expander' (name=dotted_name)? ';'? opt_eol
+		{
+			if (expanderResolver == null) 
+				throw new IllegalArgumentException("Unable to use expander. Make sure a expander or dsl config is being passed to the parser. [ExpanderResolver was not set].");
+			if ( expander != null )
+				throw new IllegalArgumentException( "Only one 'expander' statement per file is allowed" );
+			expander = expanderResolver.get( name, config );
+		}
+	;
+	
+global
+	@init {
+	}
+	:
+		'global' type=dotted_name id=ID ';'? opt_eol
+		{
+			packageDescr.addGlobal( id.getText(), type );
+		}
+	;
+	
+function
+	@init {
+		FunctionDescr f = null;
+	}
+	:
+		loc='function' opt_eol (retType=dotted_name)? opt_eol name=ID opt_eol
+		{
+			//System.err.println( "function :: " + name.getText() );
+			f = new FunctionDescr( name.getText(), retType );
+			f.setLocation(offset(loc.getLine()), loc.getCharPositionInLine());
+		} 
+		'(' opt_eol
+			(	(paramType=dotted_name)? opt_eol paramName=argument_name opt_eol
+				{
+					f.addParameter( paramType, paramName );
+				}
+				(	',' opt_eol (paramType=dotted_name)? opt_eol paramName=argument_name opt_eol 
+					{
+						f.addParameter( paramType, paramName );
+					}
+				)*
+			)?
+		')'
+		opt_eol
+		'{'
+			body=curly_chunk
+			{
+				f.setText( body );
+			}
+		'}'
+		{
+			packageDescr.addFunction( f );
+		}
+		opt_eol
+	;
+
+
+query returns [QueryDescr query]
+	@init {
+		query = null;
+	}
+	:
+		opt_eol
+		loc='query' queryName=word opt_eol 
+		{ 
+			query = new QueryDescr( queryName, null ); 
+			query.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			AndDescr lhs = new AndDescr(); query.setLhs( lhs ); 
+			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}
+		(
+			{ expander != null }? expander_lhs_block[lhs]
+			| normal_lhs_block[lhs]
+		)
+					
+		'end' opt_eol
+	;
+	
+template returns [FactTemplateDescr template]
+	@init {
+		template = null;		
+	}
+	:
+		opt_eol
+		loc='template' templateName=ID EOL
+		{
+			template = new FactTemplateDescr(templateName.getText());
+			template.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );			
+		}
+		(
+			slot=template_slot 
+			{
+				template.addFieldTemplate(slot);
+			}
+		)+
+		'end' EOL		
+	;
+	
+template_slot returns [FieldTemplateDescr field]
+	@init {
+		field = null;
+	}
+	:
+		//name=ID ':' fieldType=dotted_name ( EOL | ';' )
+		 fieldType=dotted_name name=ID ( EOL | ';' )
+		{
+			
+			
+			field = new FieldTemplateDescr(name.getText(), fieldType);
+			field.setLocation( offset(name.getLine()), name.getCharPositionInLine() );
+		}
+	;	
+	
+rule returns [RuleDescr rule]
+	@init {
+		rule = null;
+		String consequence = "";
+	}
+	:
+		opt_eol
+		loc='rule' ruleName=word opt_eol 
+		{ 
+			debug( "start rule: " + ruleName );
+			rule = new RuleDescr( ruleName, null ); 
+			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}
+		(	rule_attributes[rule]
+		)?
+		opt_eol
+		((	loc='when' ':'? opt_eol
+			{ 
+				AndDescr lhs = new AndDescr(); rule.setLhs( lhs ); 
+				lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			}
+			(
+				{ expander != null }? expander_lhs_block[lhs]
+				| normal_lhs_block[lhs]
+			)
+					
+		)?
+		( opt_eol loc='then' ':'?  opt_eol 
+			{int prevLine = loc.getLine()+1; }
+			( options{greedy=false;} : any=. (EOL)*
+				{
+					/*
+					if (prevLine = 0) { prevLine = any.getLine() ;}
+					
+					int lineDif = any.getLine() - prevLine - 1;
+					consequence = padConsequenceLines(lineDif, consequence);
+					*/
+					int diff = any.getLine() - prevLine;
+					consequence = padConsequenceLine(diff, consequence);
+					consequence = consequence + " " + any.getText();
+					prevLine = any.getLine();
+				}
+			)*
+			{
+				if ( expander != null ) {
+					String expanded = runThenExpander( consequence, offset(loc.getLine()) );
+					rule.setConsequence( expanded );
+				} else { 
+					rule.setConsequence( consequence ); 
+				}
+				rule.setConsequenceLocation(offset(loc.getLine()), loc.getCharPositionInLine());
+			})?
+		)?
+		'end' opt_eol
+		{
+			debug( "end rule: " + ruleName );
+		} 
+	;
+	
+extra_statement
+	:
+	(	import_statement
+	|	function_import_statement
+	|	global
+	|	function
+	)
+	;
+
+rule_attributes[RuleDescr rule]
+	: 
+			'attributes'? ':'? opt_eol
+			(	','? a=rule_attribute opt_eol
+				{
+					rule.addAttribute( a );
+				}
+			)*
+	;
+	
+rule_attribute returns [AttributeDescr d]
+	@init {
+		d = null;
+	}
+	:
+			a=salience { d = a; }
+		|	a=no_loop  { d = a; }
+		|	a=agenda_group  { d = a; }		
+		|	a=duration  { d = a; }			
+		|	a=activation_group { d = a; }	
+		|	a=auto_focus { d = a; }	
+		
+	;
+	
+salience returns [AttributeDescr d ]
+	@init {
+		d = null;
+	}
+	:	
+		loc='salience' opt_eol i=INT ';'? opt_eol
+		{
+			d = new AttributeDescr( "salience", i.getText() );
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}
+	;
+	
+no_loop returns [AttributeDescr d]
+	@init {
+		d = null;
+	}
+	:
+		(
+			loc='no-loop' opt_eol ';'? opt_eol
+			{
+				d = new AttributeDescr( "no-loop", "true" );
+				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			}
+		) 
+		|
+		(
+			loc='no-loop' t=BOOL opt_eol ';'? opt_eol
+			{
+				d = new AttributeDescr( "no-loop", t.getText() );
+				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			}
+		
+		)
+		
+	;
+	
+auto_focus returns [AttributeDescr d]
+	@init {
+		d = null;
+	}
+	:
+		(
+			loc='auto-focus' opt_eol ';'? opt_eol
+			{
+				d = new AttributeDescr( "auto-focus", "true" );
+				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			}
+		) 
+		|
+		(
+			loc='auto-focus' t=BOOL opt_eol ';'? opt_eol
+			{
+				d = new AttributeDescr( "auto-focus", t.getText() );
+				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			}
+		
+		)
+		
+	;	
+	
+activation_group returns [AttributeDescr d]
+	@init {
+		d = null;
+	}
+	:
+		loc='activation-group' opt_eol name=STRING ';'? opt_eol
+		{
+			d = new AttributeDescr( "activation-group", getString( name ) );
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}
+	;
+
+agenda_group returns [AttributeDescr d]
+	@init {
+		d = null;
+	}
+	:
+		loc='agenda-group' opt_eol name=STRING ';'? opt_eol
+		{
+			d = new AttributeDescr( "agenda-group", getString( name ) );
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}
+	;		
+
+
+duration returns [AttributeDescr d]
+	@init {
+		d = null;
+	}
+	:
+		loc='duration' opt_eol i=INT ';'? opt_eol
+		{
+			d = new AttributeDescr( "duration", i.getText() );
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}
+	;		
+	
+
+normal_lhs_block[AndDescr descrs]
+	:
+		(	d=lhs opt_eol
+			{ descrs.addDescr( d ); }
+		)* opt_eol
+	;
+
+	
+
+	
+expander_lhs_block[AndDescr descrs]
+	@init {
+		String lhsBlock = null;
+		String eol = System.getProperty( "line.separator" );
+		List constraints = null;
+	}
+	:
+		(options{greedy=false;} : 
+			text=paren_chunk loc=EOL 
+			{
+				//only expand non null
+				if (text != null) {
+					if (text.trim().startsWith("-")) {
+						if (constraints == null) {
+							constraints = new ArrayList();
+						}
+						constraints.add(runWhenExpander( text, offset(loc.getLine())));
+					} else {
+						if (constraints != null) {
+							lhsBlock = applyConstraints(constraints, lhsBlock);
+							constraints = null;
+						}
+					
+					
+						if (lhsBlock == null) {					
+							lhsBlock = runWhenExpander( text, offset(loc.getLine()));
+						} else {
+							lhsBlock = lhsBlock + eol + runWhenExpander( text, offset(loc.getLine()));
+						}
+					}
+					text = null;
+				}
+			}
+			
+		(EOL)* )* 
+		
+		{	
+			//flush out any constraints left handing before the RHS
+			lhsBlock = applyConstraints(constraints, lhsBlock);
+			if (lhsBlock != null) {
+				reparseLhs(lhsBlock, descrs);
+			}
+		}
+
+	;
+	
+	
+	
+lhs returns [PatternDescr d]
+	@init {
+		d=null;
+	}
+	:	l=lhs_or { d = l; } 
+	;
+
+	
+lhs_column returns [PatternDescr d]
+	@init {
+		d=null;
+	}
+	:	f=fact_binding { d = f; }
+	|	f=fact { d = f; }
+	;
+	
+from_statement returns [FromDescr d]
+	@init {
+		d=factory.createFrom();
+	}
+ 	:
+ 		'from' opt_eol ds=from_source
+ 		{
+ 			d.setDataSource(ds);
+ 		
+ 		}
+ 		
+ 		
+ 		
+	;
+	
+from_source returns [DeclarativeInvokerDescr ds]
+	@init {
+		ds = null;
+	}
+	:
+		(var=ID '.' field=ID 
+		
+			{
+			  FieldAccessDescr fa = new FieldAccessDescr(var.getText(), field.getText());	
+			  fa.setLine(var.getLine());
+			  ds = fa;
+			 }
+	
+		) 
+		|
+		(var=ID '.' method=ID opt_eol  '(' opt_eol args=argument_list opt_eol ')' 
+			{
+			MethodAccessDescr mc = new MethodAccessDescr(var.getText(), method.getText());
+			mc.setArguments(args);
+			mc.setLine(var.getLine());
+			ds = mc;
+			}	
+		)
+		|
+		(functionName=ID opt_eol '(' opt_eol args=argument_list opt_eol ')'
+			{
+			FunctionCallDescr fc = new FunctionCallDescr(functionName.getText());
+			fc.setLine(functionName.getLine());
+			fc.setArguments(args);
+			ds = fc;
+			}
+
+		
+		)
+	
+	;	
+	
+accumulate_statement returns [AccumulateDescr d]
+	@init {
+		d = factory.createAccumulate();
+	}
+	:
+	        loc='from' opt_eol 'accumulate' opt_eol 
+		{ 
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}	
+		'(' opt_eol column=lhs_column opt_eol ',' opt_eol
+		{
+		        d.setSourceColumn( (ColumnDescr)column );
+		}
+		'init' opt_eol '(' c=paren_chunk2 ')' opt_eol ',' opt_eol
+		{
+		        d.setInitCode( c );
+		}
+		'action' opt_eol '(' c=paren_chunk2 ')' opt_eol ',' opt_eol
+		{
+		        d.setActionCode( c );
+		}
+		'result' opt_eol '(' c=paren_chunk2 ')' opt_eol ')'
+		{
+		        d.setResultCode( c );
+		} 
+	; 		
+ 		
+argument_list returns [ArrayList args]
+	@init {
+		args = new ArrayList();
+	}
+	:
+		(param=argument_value  {
+			if (param != null) {
+				args.add(param);
+			}
+		}
+		 
+		(
+			opt_eol ',' opt_eol param=argument_value {
+				if (param != null) {
+					args.add(param);
+				}
+			}
+		)*
+		)?
+	;		
+	
+argument_value returns [ArgumentValueDescr value]
+	@init {
+		value = null;
+		String text = null;
+	}
+	:	(	t=STRING { text = getString( t );  value=new ArgumentValueDescr(ArgumentValueDescr.STRING, text);} 
+		|	t=INT    { text = t.getText();  value=new ArgumentValueDescr(ArgumentValueDescr.INTEGRAL, text);}
+		|	t=FLOAT	 { text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.DECIMAL, text); }
+		|	t=BOOL 	 { text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.BOOLEAN, text); }
+		|	t=ID { text = t.getText(); value=new ArgumentValueDescr(ArgumentValueDescr.VARIABLE, text);}	
+		|	t='null' { text = "null"; value=new ArgumentValueDescr(ArgumentValueDescr.NULL, text);}	
+		|	t='null' { text = "null"; value=new ArgumentValueDescr(ArgumentValueDescr.NULL, text);}			
+		|       m=inline_map {  value=new ArgumentValueDescr(ArgumentValueDescr.MAP, m.getKeyValuePairs() ); }
+		|       a=inline_array { value = new ArgumentValueDescr(ArgumentValueDescr.LIST, a ); }		
+		)
+	;			
+
+inline_map returns [ArgumentValueDescr.MapDescr mapDescr]
+    @init {
+        mapDescr = new ArgumentValueDescr.MapDescr();
+    }	
+    :  '{' 
+           ( key=argument_value '=>' value=argument_value {
+                 if ( key != null ) {
+                     mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
+                 }
+             }
+           )
+           
+           ( (EOL)? ',' (EOL)? key=argument_value '=>' value=argument_value {
+                 if ( key != null ) {
+                     mapDescr.add( new ArgumentValueDescr.KeyValuePairDescr( key, value ) );
+                 }
+             }
+           )*           
+       '}'
+    ;
+    
+inline_array returns [List list]
+    @init {
+    	list = new ArrayList();
+    }		    
+    :
+    '[' arg=argument_value { list.add(arg); }
+    
+     	 ( EOL? ',' EOL? arg=argument_value { list.add(arg); } )*
+      ']'
+      
+    
+    ; 	
+fact_binding returns [PatternDescr d]
+	@init {
+		d=null;
+		boolean multi=false;
+	}
+ 	:
+ 		id=ID 
+ 		
+ 		opt_eol ':' opt_eol fe=fact_expression[id.getText()]
+ 		{
+ 			d=fe;
+ 		}
+	;
+ 
+ fact_expression[String id] returns [PatternDescr pd]
+ 	@init {
+ 		pd = null;
+ 		boolean multi = false;
+ 	}
+ 	:	'(' opt_eol fe=fact_expression[id]opt_eol ')' { pd=fe; }
+ 	| 	f=fact opt_eol
+ 		{
+ 			((ColumnDescr)f).setIdentifier( id );
+ 			pd = f;
+ 		}
+ 		(	('or'|'||') opt_eol
+ 			{	if ( ! multi ) {
+ 					PatternDescr first = pd;
+ 					pd = new OrDescr();
+ 					((OrDescr)pd).addDescr( first );
+ 					multi=true;
+ 				}
+ 			}
+ 			f=fact
+ 			{
+ 				((ColumnDescr)f).setIdentifier( id );
+ 				((OrDescr)pd).addDescr( f );
+ 			}
+ 		)*	
+	;
+ 
+fact returns [PatternDescr d] 
+	@init {
+		d=null;
+	}
+ 	:	id=dotted_name 
+ 		{ 
+ 			d = new ColumnDescr( id ); 
+ 		} opt_eol 
+ 		loc='(' {
+ 				d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+ 			}opt_eol (	c=constraints
+ 				{
+		 			for ( Iterator cIter = c.iterator() ; cIter.hasNext() ; ) {
+ 						((ColumnDescr)d).addDescr( (PatternDescr) cIter.next() );
+ 					}
+ 				}
+ 
+ 				)? opt_eol endLoc=')' opt_eol
+ 				{
+ 					d.setEndLocation( offset(endLoc.getLine()), endLoc.getCharPositionInLine() );	
+ 				}
+ 	;
+	
+	
+constraints returns [List constraints]
+	@init {
+		constraints = new ArrayList();
+	}
+	:	opt_eol
+		(constraint[constraints]|predicate[constraints])
+		( opt_eol ',' opt_eol (constraint[constraints]|predicate[constraints]))*
+		opt_eol
+	;
+	
+constraint[List constraints]
+	@init {
+		PatternDescr d = null;
+	}
+	:	opt_eol
+		( fb=ID opt_eol ':' opt_eol )? 
+		f=ID	
+		{
+
+			if ( fb != null ) {
+				//System.err.println( "fb: " + fb.getText() );
+				//System.err.println( " f: " + f.getText() );
+				d = new FieldBindingDescr( f.getText(), fb.getText() );
+				//System.err.println( "fbd: " + d );
+				
+				d.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
+				constraints.add( d );
+			} 
+			FieldConstraintDescr fc = new FieldConstraintDescr(f.getText());
+			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
+									
+			
+		}				
+			opt_eol (	op=operator opt_eol	
+					
+					(	bvc=ID
+						{
+							
+														
+							
+							VariableRestrictionDescr vd = new VariableRestrictionDescr(op, bvc.getText());
+							fc.addRestriction(vd);
+							constraints.add(fc);
+							
+						}
+					|
+						lc=enum_constraint 
+						{ 
+
+							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc, true);
+							fc.addRestriction(lrd);
+							constraints.add(fc);
+							
+						}						
+					|
+						lc=literal_constraint 
+						{ 
+							
+							LiteralRestrictionDescr lrd  = new LiteralRestrictionDescr(op, lc);
+							fc.addRestriction(lrd);
+							constraints.add(fc);
+							
+						}
+					|	rvc=retval_constraint 
+						{ 
+							
+							
+
+							ReturnValueRestrictionDescr rvd = new ReturnValueRestrictionDescr(op, rvc);							
+							fc.addRestriction(rvd);
+							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(op, rvc);							
+								fc.addRestriction(rvd);
+								
+							} 
+						)						
+						
+					)*
+				)?					
+		opt_eol
+	;
+		
+literal_constraint returns [String text]
+	@init {
+		text = null;
+	}
+	:	(	t=STRING { text = getString( t ); } //t.getText(); text=text.substring( 1, text.length() - 1 ); }
+		|	t=INT    { text = t.getText(); }
+		|	t=FLOAT	 { text = t.getText(); }
+		|	t=BOOL 	 { text = t.getText(); }
+		|	t='null' { text = null; }
+		)
+	;
+	
+enum_constraint returns [String text]
+	@init {
+		text = null;
+	}
+	:	(cls=ID '.' en=ID) { text = cls.getText() + "." + en.getText(); }
+	;	
+	
+retval_constraint returns [String text]
+	@init {
+		text = null;
+	}
+	:	
+		'('  c=paren_chunk  ')' { text = c; }
+	;
+
+predicate[List constraints]
+	:
+		decl=ID ':' field=ID '->' '(' text=paren_chunk ')'
+		{
+			PredicateDescr d = new PredicateDescr(field.getText(), decl.getText(), text );
+			constraints.add( d );
+		}
+	;
+	
+paren_chunk returns [String text]
+	@init {
+		text = null;
+	}
+	
+	:
+		 (	options{greedy=false;} : 
+			'(' c=paren_chunk ')' 	
+			{
+				if ( c == null ) {
+					c = "";
+				}
+				if ( text == null ) {
+					text = "( " + c + " )";
+				} else {
+					text = text + " ( " + c + " )";
+				}
+			} 
+		| any=. 
+			{
+				if ( text == null ) {
+					text = any.getText();
+				} else {
+					text = text + " " + any.getText(); 
+				} 
+			}
+		)* 
+	;
+	
+//NOTE: this is needed as there is a bug in antlr if you sometimes use the same sub rule in multiple places
+paren_chunk2 returns [String text]
+	@init {
+		text = null;
+	}
+	
+	:
+		 (	options{greedy=false;} : 
+			'(' c=paren_chunk2 ')' 	
+			{
+				if ( c == null ) {
+					c = "";
+				}
+				if ( text == null ) {
+					text = "( " + c + " )";
+				} else {
+					text = text + " ( " + c + " )";
+				}
+			} 
+		| any=. 
+			{
+				if ( text == null ) {
+					text = any.getText();
+				} else {
+					text = text + " " + any.getText(); 
+				} 
+			}
+		)* 
+	;
+	
+curly_chunk returns [String text]
+	@init {
+		text = null;
+	}
+	
+	:
+		(	options{greedy=false;} : 
+			'{' c=curly_chunk '}' 	
+			{
+				//System.err.println( "chunk [" + c + "]" );
+				if ( c == null ) {
+					c = "";
+				}
+				if ( text == null ) {
+					text = "{ " + c + " }";
+				} else {
+					text = text + " { " + c + " }";
+				}
+			} 
+		| any=. 
+			{
+				//System.err.println( "any [" + any.getText() + "]" );
+				if ( text == null ) {
+					text = any.getText();
+				} else {
+					text = text + " " + any.getText(); 
+				} 
+			}
+		)*
+	;	
+	
+lhs_or returns [PatternDescr d]
+	@init{
+		d = null;
+	}
+	:	
+		{ OrDescr or = null; }
+		left=lhs_and {d = left; }
+		( ('or'|'||') opt_eol
+			right=lhs_and 
+			{
+				if ( or == null ) {
+					or = new OrDescr();
+					or.addDescr( left );
+					d = or;
+				}
+				
+				or.addDescr( right );
+			}
+		)*
+	;
+	
+lhs_and returns [PatternDescr d]
+	@init{
+		d = null;
+	}
+	:
+		{ AndDescr and = null; }
+		left=lhs_unary { d = left; }
+		( ('and'|'&&') opt_eol
+			right=lhs_unary 
+			{
+				if ( and == null ) {
+					and = new AndDescr();
+					and.addDescr( left );
+					d = and;
+				}
+				
+				and.addDescr( right );
+			}
+		)* 
+	;
+	
+lhs_unary returns [PatternDescr d]
+	@init {
+		d = null;
+	}
+	:	(	u=lhs_exist {d = u;}
+		|	u=lhs_not {d = u;}
+		|	u=lhs_eval {d = u;}				
+		|	u=lhs_column {d=u;} 
+		          ((fm=from_statement {fm.setColumn((ColumnDescr) u); d=fm;}) 
+		          |(ac=accumulate_statement {ac.setResultColumn((ColumnDescr) u); d=ac;}) )?
+		|	'(' opt_eol u=lhs opt_eol ')' {d = u;}
+		) 
+	;
+	
+lhs_exist returns [PatternDescr d]
+	@init {
+		d = null;
+	}
+	:	loc='exists' ('(' column=lhs_column ')' | column=lhs_column)
+		{ 
+			d = new ExistsDescr( (ColumnDescr) column ); 
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}	
+	;
+	
+lhs_not	returns [NotDescr d]
+	@init {
+		d = null;
+	}
+	:	loc='not' ('(' column=lhs_column  ')' | column=lhs_column)
+		{
+			d = new NotDescr( (ColumnDescr) column ); 
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+		}
+	;
+
+lhs_eval returns [PatternDescr d]
+	@init {
+		d = null;
+		String text = "";
+	}
+	:	'eval' loc='(' 
+			c=paren_chunk2
+		')' 
+		{ 
+			checkTrailingSemicolon( c, offset(loc.getLine()) );
+			d = new EvalDescr( c ); 
+		}
+	;
+	
+dotted_name returns [String name]
+	@init {
+		name = null;
+	}
+	:	
+		id=ID { name=id.getText(); } ( '.' id=ID { name = name + "." + id.getText(); } )* ( '[' ']' { name = name + "[]";})*
+	;
+	
+argument_name returns [String name]
+	@init {
+		name = null;
+	}
+	:
+		id=ID { name=id.getText(); } ( '[' ']' { name = name + "[]";})*
+	;
+
+	
+word returns [String word]
+	@init{
+		word = null;
+	}
+	:	id=ID      { word=id.getText(); }
+	|	'import'   { word="import"; }
+	|	'use'      { word="use"; }
+	|	'rule'     { word="rule"; }
+	|	'query'    { word="query"; }
+	|	'salience' { word="salience"; }
+ 	|	'no-loop'  { word="no-loop"; }
+	|	'when'     { word="when"; }
+	|	'then'     { word="then"; }
+	|	'end'      { word="end"; }
+	|	str=STRING { word=getString(str);} 
+	;
+
+operator returns [String str] 	
+	@init {
+		str = null;
+	}
+	:
+
+		'==' {str= "==";}
+		|'=' {str="==";}
+		|'>' {str=">";}
+		|'>=' {str=">=";}		
+		|'<' {str="<";}
+		|'<=' {str="<=";}
+		|'!=' {str="!=";}
+		|'contains' {str="contains";}
+		|'matches' {str="matches";}
+		|'excludes' {str="excludes";}
+					
+						
+	;
+
+
+
+MISC 	:
+		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?'
+		| '|' | ',' | '{' | '}' | '[' | ']' | '=' | '/' | '(' | ')' | '\'' | '\\'
+		| '||' | '&&' | '<<<' | '++' | '--' | '>>>' | '==' | '+=' | '=+' | '-=' | '=-' |'*=' | '=*' 
+		| '/=' | '=/' | '>>=' 
+		
+	;
+	
+WS      :       (	' '
+                |	'\t'
+                |	'\f'
+                )
+                { channel=99; }
+        ;
+        
+EOL 	:	     
+   		(       ( '\r\n' )=> '\r\n'  // Evil DOS
+                |       '\r'    // Macintosh
+                |       '\n'    // Unix (the right way)
+                )
+        ;  
+        
+INT	
+	:	('-')?('0'..'9')+
+	;
+
+FLOAT
+	:	('-')?('0'..'9')+ '.' ('0'..'9')+
+	;
+	
+STRING
+	:	('"' ( options{greedy=false;} : .)* '"' ) | ('\'' ( options{greedy=false;} : .)* '\'')
+	;
+	
+BOOL
+	:	('true'|'false') 
+	;	
+	
+ID	
+	:	('a'..'z'|'A'..'Z'|'_'|'$' | '\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9' | '\u00c0'..'\u00ff')* 
+	;
+	
+		
+
+SH_STYLE_SINGLE_LINE_COMMENT	
+	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
+                { channel=99; }
+	;
+        
+        
+C_STYLE_SINGLE_LINE_COMMENT	
+	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
+                { channel=99; }
+	;
+
+MULTI_LINE_COMMENT
+	:	'/*' (options{greedy=false;} : .)* '*/'
+                { channel=99; }
+	;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaInvokers.stg	2006-09-07 13:44:19 UTC (rev 6107)
@@ -143,6 +143,39 @@
 }     
 >>
 
+accumulateInvoker(package, invokerClassName, ruleClassName, methodName, declarations, declarationTypes, globals, globalTypes, hashCode) ::= <<
+package <package>;
+
+import org.drools.asm.ClassReader;
+import org.drools.asm.util.TraceMethodVisitor;
+import org.drools.util.asm.MethodComparator.Tracer;
+
+public class <invokerClassName> implements org.drools.spi.Accumulator, org.drools.spi.CompiledInvoker
+{
+    private static final long serialVersionUID  = 320L;
+    
+    public Object accumulate(org.drools.reteoo.ReteTuple tuple,
+                              java.util.List matchingObjects,
+                              org.drools.rule.Declaration[] declarations, 
+                              org.drools.WorkingMemory workingMemory) throws Exception {                               
+
+        <declarationTypes, declarations:{ type, declr| <type> <declr.identifier> = ( <type> ) declarations[<i0>].getValue( ( (org.drools.common.InternalFactHandle) tuple.get( declarations[<i0>] ) ).getObject() );<\n>}>
+        <globalTypes, globals:{ type, identifier | <type> <identifier> = ( <type> ) workingMemory.getGlobal( "<identifier>" );<\n>}>    
+        
+        return <ruleClassName>.<methodName>(
+            matchingObjects<if(declarations)>,<endif> 
+            <declarations:{ declr | <declr.identifier>}; separator=",\n"><if(globals)>,<endif>
+	        <globals:{ identifier | <identifier>}; separator=",\n"> );
+    }
+
+    <hashCode(hashCode=hashCode)>
+    
+    <getMethodBytecode(package=package, ruleClassName=ruleClassName, methodName=methodName)>
+    
+    <equals()>  
+}     
+>>
+
 consequenceInvoker(package, invokerClassName, ruleClassName, methodName, declarations, declarationTypes, indexes, globals, globalTypes, text) ::= <<
 package <package>;
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaRule.stg
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaRule.stg	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/semantics/java/javaRule.stg	2006-09-07 13:44:19 UTC (rev 6107)
@@ -18,6 +18,17 @@
 }
 >>
 
+accumulateMethod(declarations, declarationTypes, globals, globalTypes, methodName, columnType, columnDeclaration, resultType, initCode, actionCode, resultCode) ::= <<
+public static <resultType> <methodName>(java.util.List matchingObjects<if(declarations)>, <endif><declarationTypes, declarations:{ type, declr | <type> <declr.identifier>}; separator=","><if(globals)>,<endif> <globalTypes, globals:{ type, identifier | <type> <identifier>}; separator=","> ) throws Exception {
+    <initCode>
+    for( java.util.Iterator it = matchingObjects.iterator(); it.hasNext(); ) {
+      <columnType> <columnDeclaration.identifier> = (<columnType>) it.next();
+      <actionCode>
+    }
+    return ( <resultCode> );
+}
+>>
+
 consequenceMethod(declarations, declarationTypes, globals, globalTypes, methodName, text) ::= <<
 public static void <methodName>(org.drools.spi.KnowledgeHelper drools<if(declarations)>,<endif> <declarationTypes, declarations:{ type, declr | <type> <declr.identifier>, org.drools.FactHandle <declr.identifier>__Handle__}; separator=","><if(globals)>,<endif> <globalTypes, globals:{ type, identifier | <type> <identifier>}; separator=","> ) throws Exception {
     <text>

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/IntegrationCases.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -3082,5 +3082,34 @@
         
     }
     
+    public void testAccumulate() throws Exception {
 
+        //read in the source
+        final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Accumulate.drl" ) );
+        final DrlParser parser = new DrlParser();
+        final PackageDescr packageDescr = parser.parse( reader );
+
+        //pre build the package
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackage( packageDescr );
+        final Package pkg = builder.getPackage();
+
+        //add the package to a rulebase
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        //load up the rulebase
+
+        final WorkingMemory wm = ruleBase.newWorkingMemory();
+        List results = new ArrayList();
+        
+        wm.setGlobal( "results", results );
+        
+        wm.assertObject( new Cheese("stilton", 10) );
+        wm.assertObject( new Cheese("brie", 5) );
+        
+        wm.fireAllRules();
+        
+        Assert.assertTrue( results.contains( new Integer(15) ) );
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/LeapsTest.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -427,4 +427,8 @@
         
     }
     
+    public void testAccumulate() throws Exception {
+        // FIXME
+    }
+    
 }

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-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -31,6 +31,7 @@
 import org.antlr.runtime.RecognitionException;
 import org.antlr.runtime.TokenStream;
 import org.drools.compiler.DrlParser;
+import org.drools.lang.descr.AccumulateDescr;
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.ArgumentValueDescr;
 import org.drools.lang.descr.AttributeDescr;
@@ -350,7 +351,9 @@
 		RuleParser parser = new RuleParser( tokenStream );
 		parser.setLineOffset( descrs.getLine() );
 		parser.normal_lhs_block(descrs);
-		System.err.println(parser.getErrorMessages());
+        if(parser.hasErrors()) {
+            System.err.println(parser.getErrorMessages());
+        }
 		assertFalse(parser.hasErrors());
     	
     }
@@ -565,7 +568,9 @@
     public void testFrom() throws Exception {
         final RuleDescr rule = parseResource( "from.drl" ).rule();
 
-        System.err.println(parser.getErrorMessages());
+        if(parser.hasErrors()) {
+            System.err.println(parser.getErrorMessages());
+        }
         assertFalse(parser.hasErrors());
         
         assertNotNull( rule );
@@ -1211,7 +1216,9 @@
         parser.setExpanderResolver( mockExpanderResolver );
         parser.compilation_unit();
         final PackageDescr pack = parser.getPackageDescr();
-        System.err.println(parser.getErrorMessages());
+        if(parser.hasErrors()) {
+            System.err.println(parser.getErrorMessages());
+        }
         assertNotNull( pack );
         assertEquals( 1,
                       pack.getRules().size() );
@@ -1328,7 +1335,9 @@
         parser.setExpanderResolver( res );
         parser.setExpanderDebug( true );
         parser.compilation_unit();
-        System.err.println(parser.getErrorMessages());
+        if(parser.hasErrors()) {
+            System.err.println(parser.getErrorMessages());
+        }
         
         //        List errorMessages = parser.getErrorMessages();
         //        for ( Iterator iter = errorMessages.iterator(); iter.hasNext(); ) {
@@ -1360,7 +1369,9 @@
         parser.setExpanderDebug( true );
         parser.compilation_unit();
       
-        System.err.println(parser.getErrorMessages());
+        if(parser.hasErrors()) {
+            System.err.println(parser.getErrorMessages());
+        }
 
         assertFalse( parser.hasErrors() );
         
@@ -1834,7 +1845,9 @@
         final RuleParser parser = parseResource( "eval_multiple.drl" );
         parser.compilation_unit();
 
-        System.err.println( parser.getErrorMessages() );
+        if(parser.hasErrors()) {
+            System.err.println( parser.getErrorMessages() );
+        }
 
         assertFalse( parser.hasErrors() );
 
@@ -2016,6 +2029,10 @@
                       func.getParameterNames().size() );
         assertEquals( 2,
                       func.getParameterTypes().size() );
+        assertEquals( 4,
+                      func.getLine());
+        assertEquals( 0,
+                      func.getColumn());
 
         assertEquals( "String",
                       func.getParameterTypes().get( 0 ) );
@@ -2251,7 +2268,9 @@
     public void testEvalWithNewline() throws Exception {
         parseResource( "eval_with_newline.drl" ).compilation_unit();
 
-        System.err.println( this.parser.getErrorMessages() );
+        if(parser.hasErrors()) {
+            System.err.println( parser.getErrorMessages() );
+        }
         assertFalse( this.parser.hasErrors() );
     }
 
@@ -2261,7 +2280,6 @@
         assertTrue( this.parser.hasErrors() );
         assertEquals( 1,
                       this.parser.getErrorMessages().size() );
-        System.err.println( this.parser.getErrorMessages().get( 0 ) );
         assertTrue( ((String) this.parser.getErrorMessages().get( 0 )).indexOf( "Trailing semi-colon not allowed" ) >= 0 );
     }
     
@@ -2290,6 +2308,64 @@
                       c.getObjectType() );
     }
 
+    public void testAccumulate() throws Exception {
+        final RuleParser parser = parseResource( "accumulate.drl" );
+        parser.compilation_unit();
+
+        if(parser.hasErrors()) {
+            System.err.println( parser.getErrorMessages() );
+        }
+
+        assertFalse( parser.hasErrors() );
+
+        final PackageDescr pack = parser.getPackageDescr();
+        assertEquals( 1,
+                      pack.getRules().size() );
+        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
+        assertEquals( 1,
+                      rule.getLhs().getDescrs().size() );
+
+        final AccumulateDescr accum = (AccumulateDescr) rule.getLhs().getDescrs().get( 0 );
+        assertEqualsIgnoreWhitespace( "int x = 0 ;",
+                                      accum.getInitCode() );
+        assertEqualsIgnoreWhitespace( "x++;",
+                                      accum.getActionCode() );
+        assertEqualsIgnoreWhitespace( "new Integer(x)",
+                                      accum.getResultCode() );
+
+        final ColumnDescr col = (ColumnDescr) accum.getSourceColumn();
+        assertEquals( "Person",
+                      col.getObjectType() );
+    }
+
+    public void testAccumulateWithBindings() throws Exception {
+        final RuleParser parser = parseResource( "accumulate_with_bindings.drl" );
+        parser.compilation_unit();
+
+        assertFalse( parser.hasErrors() );
+
+        final PackageDescr pack = parser.getPackageDescr();
+        assertEquals( 1,
+                      pack.getRules().size() );
+        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
+        assertEquals( 1,
+                      rule.getLhs().getDescrs().size() );
+
+        final AccumulateDescr accum = (AccumulateDescr) rule.getLhs().getDescrs().get( 0 );
+        assertEqualsIgnoreWhitespace( "$counter",
+                                      accum.getResultColumn().getIdentifier());
+        assertEqualsIgnoreWhitespace( "int x = 0 ;",
+                                      accum.getInitCode() );
+        assertEqualsIgnoreWhitespace( "x++;",
+                                      accum.getActionCode() );
+        assertEqualsIgnoreWhitespace( "new Integer(x)",
+                                      accum.getResultCode() );
+
+        final ColumnDescr col = (ColumnDescr) accum.getSourceColumn();
+        assertEquals( "Person",
+                      col.getObjectType() );
+    }
+
     private RuleParser parse(final String text) throws Exception {
         this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
         return this.parser;
@@ -2304,7 +2380,7 @@
 
     private RuleParser parseResource(final String name) throws Exception {
 
-        System.err.println( getClass().getResource( name ) );
+//        System.err.println( getClass().getResource( name ) );
         final InputStream in = getClass().getResourceAsStream( name );
 
         final InputStreamReader reader = new InputStreamReader( in );

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,97 @@
+package org.drools.semantics.java;
+
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.antlr.stringtemplate.StringTemplate;
+import org.antlr.stringtemplate.StringTemplateGroup;
+import org.antlr.stringtemplate.language.AngleBracketTemplateLexer;
+import org.drools.rule.Declaration;
+
+public class AccumulateTemplateTest extends TestCase {
+
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public void testMethodGeneration() {
+        StringTemplateGroup ruleGroup = new StringTemplateGroup( new InputStreamReader( RuleBuilder.class.getResourceAsStream( "javaRule.stg" ) ),
+                                                                 AngleBracketTemplateLexer.class );
+        StringTemplate accMethod = ruleGroup.getInstanceOf( "accumulateMethod" );
+
+        final String[] declarationTypes = new String[]{"String", "Integer"};
+        final Declaration[] declarations = new Declaration[]{new Declaration( "name",
+                                                                              null,
+                                                                              null ), new Declaration( "age",
+                                                                                                       null,
+                                                                                                       null )};
+        final String[] globals = new String[]{"aGlobal", "anotherGlobal"};
+        final List globalTypes = Arrays.asList( new String[]{"String", "String"} );
+
+        accMethod.setAttribute( "declarations",
+                                declarations );
+        accMethod.setAttribute( "declarationTypes",
+                                declarationTypes );
+        accMethod.setAttribute( "globals",
+                                globals );
+        accMethod.setAttribute( "globalTypes",
+                                globalTypes );
+        accMethod.setAttribute( "methodName",
+                                "accumulateTestMethod" );
+        accMethod.setAttribute( "columnType",
+                                "MyClass" );
+        accMethod.setAttribute( "columnDeclaration",
+                                "$myclass" );
+        accMethod.setAttribute( "initCode",
+                                "int x = 0;" );
+        accMethod.setAttribute( "actionCode",
+                                "x += 1;" );
+        accMethod.setAttribute( "resultCode",
+                                "x + 10" );
+
+//        System.out.println( accMethod.toString() );
+    }
+
+    public void testInvokerGeneration() {
+        StringTemplateGroup ruleGroup = new StringTemplateGroup( new InputStreamReader( RuleBuilder.class.getResourceAsStream( "javaInvokers.stg" ) ),
+                                                                 AngleBracketTemplateLexer.class );
+        StringTemplate accMethod = ruleGroup.getInstanceOf( "accumulateInvoker" );
+
+        final String[] declarationTypes = new String[]{"String", "Integer"};
+        final Declaration[] declarations = new Declaration[]{new Declaration( "name",
+                                                                              null,
+                                                                              null ), new Declaration( "age",
+                                                                                                       null,
+                                                                                                       null )};
+        final String[] globals = new String[]{"aGlobal", "anotherGlobal"};
+        final List globalTypes = Arrays.asList( new String[]{"String", "String"} );
+
+        accMethod.setAttribute( "declarations",
+                                declarations );
+        accMethod.setAttribute( "declarationTypes",
+                                declarationTypes );
+        accMethod.setAttribute( "globals",
+                                globals );
+        accMethod.setAttribute( "globalTypes",
+                                globalTypes );
+        accMethod.setAttribute( "package",
+                                "org.drools.semantics.java" );
+        accMethod.setAttribute( "invokerClassName",
+                                "AccumulateInvokerClass" );
+        accMethod.setAttribute( "ruleClassName",
+                                "RuleWithAccumulate" );
+        accMethod.setAttribute( "methodName",
+                                "accumulateTestMethod" );
+        accMethod.setAttribute( "hashCode",
+                                new Integer(13) );
+
+//        System.out.println( accMethod.toString() );
+    }
+}


Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/semantics/java/AccumulateTemplateTest.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Accumulate.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Accumulate.drl	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Accumulate.drl	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,16 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+global java.util.List results;
+
+rule "AccumulateTest"
+    when
+    	$totalAmount : Integer() from accumulate( $cheese : Cheese( ),
+                                                  init( int total = 0; ),
+    	                                          action( total += $cheese.getPrice(); ),
+                                                  result( new Integer( total ) ) );
+    then
+        //System.out.println("Total amount = "+$totalAmount );
+        results.add($totalAmount);
+end  
\ No newline at end of file


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

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate.drl	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate.drl	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,8 @@
+rule "AccumulateParserTest"
+when
+     Integer() from accumulate( Person( age > 21 ),
+                                init( int x = 0; ),
+                                action( x++; ),
+                                result( new Integer(x) ) );
+then
+end
\ No newline at end of file


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

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_bindings.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_bindings.drl	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/accumulate_with_bindings.drl	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,8 @@
+rule "AccumulateParserTest"
+when
+     $counter:Integer() from accumulate( $person : Person( age > 21 ),
+                                         init( int x = 0; ),
+                                         action( x++; ),
+                                         result( new Integer(x) ) );
+then
+end
\ No newline at end of file


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

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrs	2006-09-07 13:44:19 UTC (rev 6107)
@@ -9,7 +9,7 @@
               <string>org/drools/reteoo/Rule_Hello_World_2_0.class</string>
               <byte-array>yv66vgAAADAALAcAAgEAJm9yZy9kcm9vbHMvcmV0ZW9vL1J1bGVfSGVsbG9fV29ybGRfMl8wBwAE
 AQAQamF2YS9sYW5nL09iamVjdAEAEHNlcmlhbFZlcnNpb25VSUQBAAFKAQANQ29uc3RhbnRWYWx1
-ZQVuXqy++rNzagEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
+ZQUAAAAAAAABQAEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
 YmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAKExvcmcvZHJvb2xzL3JldGVvby9SdWxl
 X0hlbGxvX1dvcmxkXzJfMDsBAAVldmFsMAEAAygpWgEACkV4Y2VwdGlvbnMHABcBABNqYXZhL2xh
 bmcvRXhjZXB0aW9uAQALY29uc2VxdWVuY2UBACMoTG9yZy9kcm9vbHMvc3BpL0tub3dsZWRnZUhl
@@ -20,14 +20,14 @@
 XzAuamF2YQAhAAEAAwAAAAEAGgAFAAYAAQAHAAAAAgAIAAMAAQAKAAsAAQAMAAAALwABAAEAAAAF
 KrcADbEAAAACAA8AAAAGAAEAAAAFABAAAAAMAAEAAAAFABEAEgAAAAkAEwAUAAIAFQAAAAQAAQAW
 AAwAAAAiAAEAAAAAAAIErAAAAAIADwAAAAYAAQAAAAgAEAAAAAIAAAAJABgAGQACABUAAAAEAAEA
-FgAMAAAANwACAAEAAAAJsgAaEiC2ACKxAAAAAgAPAAAACgACAAAACwAIAA0AEAAAAAwAAQAAAAkA
+FgAMAAAANwACAAEAAAAJsgAaEiC2ACKxAAAAAgAPAAAACgACAAAACwAIAAwAEAAAAAwAAQAAAAkA
 KAApAAAAAQAqAAAAAgAr</byte-array>
             </entry>
             <entry>
               <string>org/drools/reteoo/Rule_Hello_World_1_0.class</string>
               <byte-array>yv66vgAAADAAKgcAAgEAJm9yZy9kcm9vbHMvcmV0ZW9vL1J1bGVfSGVsbG9fV29ybGRfMV8wBwAE
 AQAQamF2YS9sYW5nL09iamVjdAEAEHNlcmlhbFZlcnNpb25VSUQBAAFKAQANQ29uc3RhbnRWYWx1
-ZQVuXqy++rNzagEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
+ZQUAAAAAAAABQAEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
 YmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAKExvcmcvZHJvb2xzL3JldGVvby9SdWxl
 X0hlbGxvX1dvcmxkXzFfMDsBAAtjb25zZXF1ZW5jZQEAIyhMb3JnL2Ryb29scy9zcGkvS25vd2xl
 ZGdlSGVscGVyOylWAQAKRXhjZXB0aW9ucwcAFwEAE2phdmEvbGFuZy9FeGNlcHRpb24JABkAGwcA
@@ -37,7 +37,7 @@
 Z2VIZWxwZXI7AQAKU291cmNlRmlsZQEAGVJ1bGVfSGVsbG9fV29ybGRfMV8wLmphdmEAIQABAAMA
 AAABABoABQAGAAEABwAAAAIACAACAAEACgALAAEADAAAAC8AAQABAAAABSq3AA2xAAAAAgAPAAAA
 BgABAAAABQAQAAAADAABAAAABQARABIAAAAJABMAFAACABUAAAAEAAEAFgAMAAAANwACAAEAAAAJ
-sgAYEh62ACCxAAAAAgAPAAAACgACAAAACAAIAAoAEAAAAAwAAQAAAAkAJgAnAAAAAQAoAAAAAgAp
+sgAYEh62ACCxAAAAAgAPAAAACgACAAAACAAIAAkAEAAAAAwAAQAAAAkAJgAnAAAAAQAoAAAAAgAp
 </byte-array>
             </entry>
             <entry>
@@ -230,6 +230,7 @@
           <string>org.drools.reteoo.*</string>
           <string>java.lang.*</string>
         </list>
+        <java.util.Collections-EmptyList/>
         <java.util.Collections-EmptyMap/>
         <byte-array>rO0ABXNyABdqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4
 cgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4
@@ -302,7 +303,7 @@
       </org.drools.rule.Package>
     </entry>
   </map>
-  <byte-array>rO0ABXQAJDllODZkODIxLTRlNzgtNGRkOS1hZjE0LWJjYzFkNTY3ZjMwNHNyAClvcmcuZHJvb2xz
+  <byte-array>rO0ABXQAJGQxODI5NmQyLWVjYmMtNDU5MC05MWQ1LTU0YzQ5MmY5NTBjOHNyAClvcmcuZHJvb2xz
 LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
 Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
 ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -485,10 +486,10 @@
 dWlsZGVyGB1Z+4/IA/ACAAlJABdjdXJyZW50T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNo
 ZWROb2Rlc3EAfgAQTAAMZGVjbGFyYXRpb25zcQB+ABBMAAxvYmplY3RTb3VyY2VxAH4AN0wACm9i
 amVjdFR5cGVxAH4AEEwACHJlc29sdmVycQB+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2Vx
-AH4AQXhwAAAAAAAAABtzcQB+AA0/QAAAAAAAGHcIAAAAIAAAABJxAH4AQnEAfgBCcQB+ASNxAH4B
-I3EAfgEJcQB+AQlxAH4A/XEAfgD9cQB+ADhxAH4AOHEAfgA9cQB+AD1xAH4BE3EAfgETcQB+AQdx
-AH4BB3EAfgEYcQB+ARhxAH4AKnEAfgAqcQB+ARVxAH4BFXEAfgEpcQB+ASlxAH4AuHEAfgC4cQB+
-AERxAH4ARHEAfgEAcQB+AQBxAH4A+3EAfgD7cQB+AEZxAH4ARnEAfgEMcQB+AQx4c3EAfgANP0AA
+AH4AQXhwAAAAAAAAABtzcQB+AA0/QAAAAAAAGHcIAAAAIAAAABJxAH4BAHEAfgEAcQB+AERxAH4A
+RHEAfgEpcQB+ASlxAH4BI3EAfgEjcQB+ACpxAH4AKnEAfgEYcQB+ARhxAH4AOHEAfgA4cQB+AD1x
+AH4APXEAfgEHcQB+AQdxAH4BCXEAfgEJcQB+ALhxAH4AuHEAfgETcQB+ARNxAH4A/XEAfgD9cQB+
+AQxxAH4BDHEAfgBCcQB+AEJxAH4A+3EAfgD7cQB+AEZxAH4ARnEAfgEVcQB+ARV4c3EAfgANP0AA
 AAAAAAx3CAAAABAAAAAAeHEAfgETc3IAF2phdmEudXRpbC5MaW5rZWRIYXNoTWFwNMBOXBBswPsC
 AAFaAAthY2Nlc3NPcmRlcnhxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgDJc3IAEWphdmEubGFu
 Zy5JbnRlZ2VyEuKgpPeBhzgCAAFJAAV2YWx1ZXhyABBqYXZhLmxhbmcuTnVtYmVyhqyVHQuU4IsC

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/OneAndTwoOrsPerson	2006-09-07 13:44:19 UTC (rev 6107)
@@ -9,7 +9,7 @@
               <string>org/drools/reteoo/Rule_Hello_World_2_0.class</string>
               <byte-array>yv66vgAAADAAKgcAAgEAJm9yZy9kcm9vbHMvcmV0ZW9vL1J1bGVfSGVsbG9fV29ybGRfMl8wBwAE
 AQAQamF2YS9sYW5nL09iamVjdAEAEHNlcmlhbFZlcnNpb25VSUQBAAFKAQANQ29uc3RhbnRWYWx1
-ZQVuXqy++rNzagEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
+ZQUAAAAAAAABQAEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
 YmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAKExvcmcvZHJvb2xzL3JldGVvby9SdWxl
 X0hlbGxvX1dvcmxkXzJfMDsBAAtjb25zZXF1ZW5jZQEAIyhMb3JnL2Ryb29scy9zcGkvS25vd2xl
 ZGdlSGVscGVyOylWAQAKRXhjZXB0aW9ucwcAFwEAE2phdmEvbGFuZy9FeGNlcHRpb24JABkAGwcA
@@ -19,14 +19,14 @@
 Z2VIZWxwZXI7AQAKU291cmNlRmlsZQEAGVJ1bGVfSGVsbG9fV29ybGRfMl8wLmphdmEAIQABAAMA
 AAABABoABQAGAAEABwAAAAIACAACAAEACgALAAEADAAAAC8AAQABAAAABSq3AA2xAAAAAgAPAAAA
 BgABAAAABwAQAAAADAABAAAABQARABIAAAAJABMAFAACABUAAAAEAAEAFgAMAAAANwACAAEAAAAJ
-sgAYEh62ACCxAAAAAgAPAAAACgACAAAACgAIAAwAEAAAAAwAAQAAAAkAJgAnAAAAAQAoAAAAAgAp
+sgAYEh62ACCxAAAAAgAPAAAACgACAAAACgAIAAsAEAAAAAwAAQAAAAkAJgAnAAAAAQAoAAAAAgAp
 </byte-array>
             </entry>
             <entry>
               <string>org/drools/reteoo/Rule_Hello_World_1_0.class</string>
               <byte-array>yv66vgAAADAAKgcAAgEAJm9yZy9kcm9vbHMvcmV0ZW9vL1J1bGVfSGVsbG9fV29ybGRfMV8wBwAE
 AQAQamF2YS9sYW5nL09iamVjdAEAEHNlcmlhbFZlcnNpb25VSUQBAAFKAQANQ29uc3RhbnRWYWx1
-ZQVuXqy++rNzagEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
+ZQUAAAAAAAABQAEABjxpbml0PgEAAygpVgEABENvZGUKAAMADgwACgALAQAPTGluZU51bWJlclRh
 YmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAKExvcmcvZHJvb2xzL3JldGVvby9SdWxl
 X0hlbGxvX1dvcmxkXzFfMDsBAAtjb25zZXF1ZW5jZQEAIyhMb3JnL2Ryb29scy9zcGkvS25vd2xl
 ZGdlSGVscGVyOylWAQAKRXhjZXB0aW9ucwcAFwEAE2phdmEvbGFuZy9FeGNlcHRpb24JABkAGwcA
@@ -36,7 +36,7 @@
 Z2VIZWxwZXI7AQAKU291cmNlRmlsZQEAGVJ1bGVfSGVsbG9fV29ybGRfMV8wLmphdmEAIQABAAMA
 AAABABoABQAGAAEABwAAAAIACAACAAEACgALAAEADAAAAC8AAQABAAAABSq3AA2xAAAAAgAPAAAA
 BgABAAAABwAQAAAADAABAAAABQARABIAAAAJABMAFAACABUAAAAEAAEAFgAMAAAANwACAAEAAAAJ
-sgAYEh62ACCxAAAAAgAPAAAACgACAAAACgAIAAwAEAAAAAwAAQAAAAkAJgAnAAAAAQAoAAAAAgAp
+sgAYEh62ACCxAAAAAgAPAAAACgACAAAACgAIAAsAEAAAAAwAAQAAAAkAJgAnAAAAAQAoAAAAAgAp
 </byte-array>
             </entry>
             <entry>
@@ -182,6 +182,7 @@
           <string>org.drools.reteoo.*</string>
           <string>java.lang.*</string>
         </list>
+        <java.util.Collections-EmptyList/>
         <java.util.Collections-EmptyMap/>
         <byte-array>rO0ABXNyABdqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4
 cgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4
@@ -269,7 +270,7 @@
       </org.drools.rule.Package>
     </entry>
   </map>
-  <byte-array>rO0ABXQAJGUyMzA2OTRmLWEzNWItNDM4MC1iN2NmLWZiOWFjZDhkNDZiZHNyAClvcmcuZHJvb2xz
+  <byte-array>rO0ABXQAJGJmZTY3Y2Y2LWYwMDAtNGNlMi05NTdkLTNhZjAzYzkyYjE0ZnNyAClvcmcuZHJvb2xz
 LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
 Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
 ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -473,8 +474,8 @@
 fgEXcQB+AV54c3EAfgDadXEAfgDdAAAAAXNxAH4BIwAAAAF1cQB+AE4AAAAAcQB+AWhxAH4BgXEA
 fgFccQB+ADhxAH4BK3EAfgFPcQB+AT14cQB+AMZxAH4AKnhxAH4AxnEAfgAyeHNxAH4AJQAAAAF3
 BAAAAAFxAH4AOHhxAH4BQXNxAH4AJQAAAAR3BAAAAARxAH4BHHEAfgEvcQB+AVNxAH4BQXhxAH4A
-z3EAfgAjc3EAfgANP0AAAAAAAAx3CAAAABAAAAADcQB+AQZxAH4Bb3EAfgDPcQB+ACpxAH4A8HEA
-fgFeeHNyACZvcmcuZHJvb2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZlcgKE2PxwsbDrAgAB
+z3EAfgAjc3EAfgANP0AAAAAAAAx3CAAAABAAAAADcQB+AQZxAH4Bb3EAfgDwcQB+AV5xAH4Az3EA
+fgAqeHNyACZvcmcuZHJvb2xzLnNwaS5DbGFzc09iamVjdFR5cGVSZXNvbHZlcgKE2PxwsbDrAgAB
 TAAKb2JqZWN0VHlwZXQAQ0xvcmcvZHJvb2xzL3NwaS9DbGFzc09iamVjdFR5cGVSZXNvbHZlciRN
 b2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZTt4cHNyAEFvcmcuZHJvb2xzLnNwaS5DbGFzc09iamVj
 dFR5cGVSZXNvbHZlciRNb2RpZmllYWJsZUNsYXNzT2JqZWN0VHlwZUSlq5QCN/s1AgAAeHEAfgB6
@@ -482,12 +483,12 @@
 A/ACAAlJABdjdXJyZW50T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNoZWROb2Rlc3EAfgAQ
 TAAMZGVjbGFyYXRpb25zcQB+ABBMAAxvYmplY3RTb3VyY2VxAH4AN0wACm9iamVjdFR5cGVxAH4A
 EEwACHJlc29sdmVycQB+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2VxAH4APXhwAAAAAAAA
-AClzcQB+AA0/QAAAAAAAMHcIAAAAQAAAABxxAH4BaHEAfgFocQB+AXxxAH4BfHEAfgFBcQB+AUFx
-AH4BTHEAfgFMcQB+AStxAH4BK3EAfgAqcQB+ACpxAH4BHHEAfgEccQB+AShxAH4BKHEAfgEmcQB+
-ASZxAH4A33EAfgDfcQB+AVxxAH4BXHEAfgFtcQB+AW1xAH4BanEAfgFqcQB+AT1xAH4BPXEAfgE6
-cQB+ATpxAH4AOHEAfgA4cQB+AVNxAH4BU3EAfgFvcQB+AW9xAH4AP3EAfgA/cQB+AThxAH4BOHEA
-fgFmcQB+AWZxAH4BY3EAfgFjcQB+AV5xAH4BXnEAfgGBcQB+AYFxAH4BSnEAfgFKcQB+AS9xAH4B
-L3EAfgF0cQB+AXRxAH4BT3EAfgFPeHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgCCcQB+AFN4
+AClzcQB+AA0/QAAAAAAAMHcIAAAAQAAAABxxAH4BJnEAfgEmcQB+AXxxAH4BfHEAfgE9cQB+AT1x
+AH4BanEAfgFqcQB+AW9xAH4Bb3EAfgFmcQB+AWZxAH4BY3EAfgFjcQB+AXRxAH4BdHEAfgFPcQB+
+AU9xAH4BK3EAfgErcQB+AWhxAH4BaHEAfgA4cQB+ADhxAH4BKHEAfgEocQB+AVNxAH4BU3EAfgEc
+cQB+ARxxAH4BL3EAfgEvcQB+AYFxAH4BgXEAfgE6cQB+ATpxAH4AP3EAfgA/cQB+AV5xAH4BXnEA
+fgFMcQB+AUxxAH4BOHEAfgE4cQB+AUpxAH4BSnEAfgFBcQB+AUFxAH4A33EAfgDfcQB+AVxxAH4B
+XHEAfgAqcQB+ACpxAH4BbXEAfgFteHNxAH4ADT9AAAAAAAAMdwgAAAAQAAAAAXEAfgCCcQB+AFN4
 cQB+ACpzcgAXamF2YS51dGlsLkxpbmtlZEhhc2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVy
 eHEAfgANP0AAAAAAAAx3CAAAABAAAAADcQB+AHtzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GH
 OAIAAUkABXZhbHVleHIAEGphdmEubGFuZy5OdW1iZXKGrJUdC5TgiwIAAHhwAAAABXEAfgCpc3EA

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/reteoo/ThreeColumnsWithConstraints	2006-09-07 13:44:19 UTC (rev 6107)
@@ -35,7 +35,7 @@
               <string>org/drools/compiler/Rule_three_columns_with_constraints_2_0.class</string>
               <byte-array>yv66vgAAADAANQcAAgEAO29yZy9kcm9vbHMvY29tcGlsZXIvUnVsZV90aHJlZV9jb2x1bW5zX3dp
 dGhfY29uc3RyYWludHNfMl8wBwAEAQAQamF2YS9sYW5nL09iamVjdAEAEHNlcmlhbFZlcnNpb25V
-SUQBAAFKAQANQ29uc3RhbnRWYWx1ZQVuXqy++rNzagEABjxpbml0PgEAAygpVgEABENvZGUKAAMA
+SUQBAAFKAQANQ29uc3RhbnRWYWx1ZQUAAAAAAAABQAEABjxpbml0PgEAAygpVgEABENvZGUKAAMA
 DgwACgALAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAPUxv
 cmcvZHJvb2xzL2NvbXBpbGVyL1J1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzJf
 MDsBAApwcmVkaWNhdGUwAQApKExqYXZhL2xhbmcvSW50ZWdlcjtMamF2YS9sYW5nL0ludGVnZXI7
@@ -50,7 +50,7 @@
 CAADAAEACgALAAEADAAAAC8AAQABAAAABSq3AA2xAAAAAgAPAAAABgABAAAABgAQAAAADAABAAAA
 BQARABIAAAAJABMAFAACABUAAAAEAAEAFgAMAAAAQwACAAIAAAAPK7YAGCq2ABigAAUErAOsAAAA
 AgAPAAAABgABAAAACQAQAAAAFgACAAAADwAeAB8AAAAAAA8AIAAfAAEACQAhACIAAgAVAAAABAAB
-ABYADAAAADcAAgABAAAACbIAIxIptgArsQAAAAIADwAAAAoAAgAAAAwACAAPABAAAAAMAAEAAAAJ
+ABYADAAAADcAAgABAAAACbIAIxIptgArsQAAAAIADwAAAAoAAgAAAAwACAANABAAAAAMAAEAAAAJ
 ADEAMgAAAAEAMwAAAAIANA==</byte-array>
             </entry>
             <entry>
@@ -211,7 +211,7 @@
               <string>org/drools/compiler/Rule_three_columns_with_constraints_1_0.class</string>
               <byte-array>yv66vgAAADAANQcAAgEAO29yZy9kcm9vbHMvY29tcGlsZXIvUnVsZV90aHJlZV9jb2x1bW5zX3dp
 dGhfY29uc3RyYWludHNfMV8wBwAEAQAQamF2YS9sYW5nL09iamVjdAEAEHNlcmlhbFZlcnNpb25V
-SUQBAAFKAQANQ29uc3RhbnRWYWx1ZQVuXqy++rNzagEABjxpbml0PgEAAygpVgEABENvZGUKAAMA
+SUQBAAFKAQANQ29uc3RhbnRWYWx1ZQUAAAAAAAABQAEABjxpbml0PgEAAygpVgEABENvZGUKAAMA
 DgwACgALAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAPUxv
 cmcvZHJvb2xzL2NvbXBpbGVyL1J1bGVfdGhyZWVfY29sdW1uc193aXRoX2NvbnN0cmFpbnRzXzFf
 MDsBAApwcmVkaWNhdGUwAQApKExqYXZhL2xhbmcvSW50ZWdlcjtMamF2YS9sYW5nL0ludGVnZXI7
@@ -226,7 +226,7 @@
 CAADAAEACgALAAEADAAAAC8AAQABAAAABSq3AA2xAAAAAgAPAAAABgABAAAABgAQAAAADAABAAAA
 BQARABIAAAAJABMAFAACABUAAAAEAAEAFgAMAAAAQwACAAIAAAAPK7YAGCq2ABigAAUErAOsAAAA
 AgAPAAAABgABAAAACQAQAAAAFgACAAAADwAeAB8AAAAAAA8AIAAfAAEACQAhACIAAgAVAAAABAAB
-ABYADAAAADcAAgABAAAACbIAIxIptgArsQAAAAIADwAAAAoAAgAAAAwACAAOABAAAAAMAAEAAAAJ
+ABYADAAAADcAAgABAAAACbIAIxIptgArsQAAAAIADwAAAAoAAgAAAAwACAANABAAAAAMAAEAAAAJ
 ADEAMgAAAAEAMwAAAAIANA==</byte-array>
             </entry>
             <entry>
@@ -347,6 +347,7 @@
           <string>org.drools.compiler.*</string>
           <string>java.lang.*</string>
         </list>
+        <java.util.Collections-EmptyList/>
         <java.util.Collections-EmptyMap/>
         <byte-array>rO0ABXNyABdqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDTATlwQbMD7AgABWgALYWNjZXNzT3JkZXJ4
 cgARamF2YS51dGlsLkhhc2hNYXAFB9rBwxZg0QMAAkYACmxvYWRGYWN0b3JJAAl0aHJlc2hvbGR4
@@ -429,7 +430,7 @@
       </org.drools.rule.Package>
     </entry>
   </map>
-  <byte-array>rO0ABXQAJDE5NDUyOWI3LWE1MzctNDU3My1iZmRmLTZjNmM4MjFmZTRjM3NyAClvcmcuZHJvb2xz
+  <byte-array>rO0ABXQAJDIzOTQyN2ZmLWU1NDktNGExZS1hZjAzLWMyZDc3YjAwNTBlZHNyAClvcmcuZHJvb2xz
 LnJldGVvby5SZXRlb29GYWN0SGFuZGxlRmFjdG9yeQAAAAAAAAEsAgAAeHIAK29yZy5kcm9vbHMu
 Y29tbW9uLkFic3RyYWN0RmFjdEhhbmRsZUZhY3RvcnlrwcaUre4SdAIAA0oAB2NvdW50ZXJKAAJp
 ZEwADmZhY3RIYW5kbGVQb29sdAAkTG9yZy9kcm9vbHMvdXRpbC9QcmltaXRpdmVMb25nU3RhY2s7
@@ -604,8 +605,8 @@
 ABdjdXJyZW50T2Zmc2V0QWRqdXN0bWVudEkAAmlkTAANYXR0YWNoZWROb2Rlc3EAfgAQTAAMZGVj
 bGFyYXRpb25zcQB+ABBMAAxvYmplY3RTb3VyY2VxAH4ANUwACm9iamVjdFR5cGVxAH4AEEwACHJl
 c29sdmVycQB+AB9MAAVydWxlc3EAfgAQTAALdHVwbGVTb3VyY2VxAH4ANHhwAAAAAAAAAAlzcQB+
-AA0/QAAAAAAADHcIAAAAEAAAAAZxAH4A3HEAfgDccQB+AOJxAH4A4nEAfgA3cQB+ADdxAH4A5HEA
-fgDkcQB+ACpxAH4AKnEAfgCvcQB+AK94c3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AMJxAH4A
+AA0/QAAAAAAADHcIAAAAEAAAAAZxAH4A5HEAfgDkcQB+AK9xAH4Ar3EAfgDccQB+ANxxAH4A4nEA
+fgDicQB+ACpxAH4AKnEAfgA3cQB+ADd4c3EAfgANP0AAAAAAAAx3CAAAABAAAAAFcQB+AMJxAH4A
 tnEAfgDRcQB+AMNxAH4AunEAfgC5cQB+AMpxAH4AyXEAfgDBcQB+AL54cQB+AORzcgAXamF2YS51
 dGlsLkxpbmtlZEhhc2hNYXA0wE5cEGzA+wIAAVoAC2FjY2Vzc09yZGVyeHEAfgANP0AAAAAAAAx3
 CAAAABAAAAABcQB+AMBzcgARamF2YS5sYW5nLkludGVnZXIS4qCk94GHOAIAAUkABXZhbHVleHIA

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/dataproviders/MethodDataProvider.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -1,10 +1,8 @@
 package org.drools.base.dataproviders;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.List;
 
 import org.drools.WorkingMemory;
 import org.drools.rule.Declaration;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -23,6 +23,9 @@
 
 import org.drools.common.BetaNodeBinder;
 import org.drools.common.DefaultFactHandle;
+import org.drools.common.InternalFactHandle;
+import org.drools.rule.Accumulate;
+import org.drools.spi.FieldConstraint;
 import org.drools.spi.PropagationContext;
 import org.drools.util.LinkedList;
 import org.drools.util.LinkedListObjectWrapper;
@@ -38,10 +41,11 @@
  */
 public class AccumulateNode extends BetaNode {
 
-    private static final long serialVersionUID = -4081578178269297948L;
+    private static final long       serialVersionUID = -4081578178269297948L;
 
-    // MENTAL NOTE: it MUST be stateless
-    private final Accumulator accumulator;
+    private final Accumulate        accumulate;
+    private final FieldConstraint[] constraints;
+    private final BetaNodeBinder    resultsBinder;
 
     /**
      * Construct.
@@ -54,32 +58,30 @@
     AccumulateNode(final int id,
                    final TupleSource leftInput,
                    final ObjectSource rightInput,
-                   final Accumulator accumulator) {
+                   final Accumulate accumulate) {
         this( id,
               leftInput,
               rightInput,
-              accumulator,
-              new BetaNodeBinder() );
+              new FieldConstraint[0],
+              new BetaNodeBinder(),
+              new BetaNodeBinder(),
+              accumulate );
     }
 
-    /**
-     * Construct.
-     * 
-     * @param leftInput
-     *            The left input <code>TupleSource</code>.
-     * @param rightInput
-     *            The right input <code>TupleSource</code>.
-     */
-    AccumulateNode(final int id,
-                   final TupleSource leftInput,
-                   final ObjectSource rightInput,
-                   final Accumulator accumulator,
-                   final BetaNodeBinder joinNodeBinder) {
+    public AccumulateNode(final int id,
+                          final TupleSource leftInput,
+                          final ObjectSource rightInput,
+                          final FieldConstraint[] constraints,
+                          final BetaNodeBinder sourceBinder,
+                          final BetaNodeBinder resultsBinder,
+                          final Accumulate accumulate) {
         super( id,
                leftInput,
                rightInput,
-               joinNodeBinder );
-        this.accumulator = accumulator;
+               sourceBinder );
+        this.resultsBinder = resultsBinder;
+        this.constraints = constraints;
+        this.accumulate = accumulate;
     }
 
     /**
@@ -110,7 +112,7 @@
         memory.add( workingMemory,
                     leftTuple );
 
-        final BetaNodeBinder binder = getJoinNodeBinder();
+        //final BetaNodeBinder binder = getJoinNodeBinder();
 
         List matchingObjects = new ArrayList();
         for ( final Iterator it = memory.rightObjectIterator( workingMemory,
@@ -118,31 +120,43 @@
             final ObjectMatches objectMatches = (ObjectMatches) it.next();
             final DefaultFactHandle handle = objectMatches.getFactHandle();
 
-            if ( attemptJoin( leftTuple, 
-                              handle, 
-                              objectMatches, 
-                              binder, 
-                              workingMemory ) != null ) {
+            if ( attemptJoin( leftTuple,
+                              handle,
+                              objectMatches,
+                              this.resultsBinder,
+                              workingMemory )  != null) {
                 matchingObjects.add( handle.getObject() );
             }
         }
 
-        Object result = this.accumulator.accumulate( leftTuple,
-                                                     matchingObjects,
-                                                     workingMemory );
+        Object result = this.accumulate.accumulate( leftTuple,
+                                                    matchingObjects,
+                                                    workingMemory );
 
-        DefaultFactHandle handle = new CalculatedObjectHandle( result );
+        // First alpha node filters
+        boolean isAllowed = true;
+        for ( int i = 0, length = this.constraints.length; i < length; i++ ) {
+            if ( !this.constraints[i].isAllowed( result, leftTuple, workingMemory ) ) {
+                isAllowed = false;
+                break;
+            }
+        }
+        if( isAllowed ) {
+            DefaultFactHandle handle = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( result );
 
-        propagateAssertTuple( leftTuple,
-                              handle,
-                              context,
-                              workingMemory );
+            if( this.resultsBinder.isAllowed( handle, leftTuple, workingMemory )) {
+                propagateAssertTuple( leftTuple,
+                                      handle,
+                                      context,
+                                      workingMemory );
+            }
+        }
     }
 
     /**
      * @inheritDoc
      * 
-     * As the accumulate node will always propagate the tuple,
+     * As the accumulate node will propagate the tuple,
      * but will recalculate the accumulated result object every time,
      * a modify is really a retract + assert. 
      * 
@@ -150,10 +164,14 @@
     public void modifyTuple(ReteTuple leftTuple,
                             PropagationContext context,
                             ReteooWorkingMemory workingMemory) {
-        
-        this.retractTuple( leftTuple, context, workingMemory );
-        this.assertTuple( leftTuple, context, workingMemory );
 
+        this.retractTuple( leftTuple,
+                           context,
+                           workingMemory );
+        this.assertTuple( leftTuple,
+                          context,
+                          workingMemory );
+
     }
 
     /**
@@ -176,12 +194,20 @@
             for ( final Iterator it = matches.values().iterator(); it.hasNext(); ) {
                 final TupleMatch tupleMatch = (TupleMatch) it.next();
                 tupleMatch.getObjectMatches().remove( tupleMatch );
+                it.remove();
             }
         }
         
+        // Need to store the accumulate result object for later disposal
+        InternalFactHandle[] handles = ((ReteTuple)((LinkedListObjectWrapper)leftTuple.getLinkedTuples().getFirst()).getObject()).getFactHandles();
+        InternalFactHandle lastHandle = handles[handles.length-1];
+        
         propagateRetractTuple( leftTuple,
                                context,
                                workingMemory );
+        
+        // Destroying the acumulate result object 
+        workingMemory.getFactHandleFactory().destroyFactHandle( lastHandle );
     }
 
     /**
@@ -206,11 +232,9 @@
                                                             handle ); it.hasNext(); ) {
             final ReteTuple leftTuple = (ReteTuple) it.next();
 
-            if ( attemptJoin( leftTuple, 
-                              handle, 
-                              objectMatches, 
-                              binder, 
-                              workingMemory ) != null ) {
+            if ( binder.isAllowed( handle,
+                                   leftTuple,
+                                   workingMemory ) ) {
                 this.modifyTuple( leftTuple,
                                   context,
                                   workingMemory );
@@ -308,4 +332,8 @@
         this.attachingNewNode = false;
     }
 
+    public String toString() {
+        return "[ " + this.getClass().getName() + "(" + this.id + ") ]";
+    }
+
 }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Accumulator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Accumulator.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Accumulator.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -1,36 +0,0 @@
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.drools.reteoo;
-
-import java.io.Serializable;
-import java.util.List;
-
-import org.drools.WorkingMemory;
-
-/**
- * Accumulator
- *
- * Created: 04/06/2006
- * @author <a href="mailto:tirelli at post.com">Edson Tirelli</a> 
- *
- * @version $Id$
- */
-public interface Accumulator extends Serializable {
-
-    public Object accumulate(ReteTuple leftTuple, List matchingObjects, WorkingMemory workingMemory);
-
-}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CalculatedObjectHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CalculatedObjectHandle.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CalculatedObjectHandle.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -1,38 +0,0 @@
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.drools.reteoo;
-
-import org.drools.common.DefaultFactHandle;
-
-/**
- * CalculatedObjectHandle
- *
- * Created: 13/06/2006
- * @author <a href="mailto:tirelli at post.com">Edson Tirelli</a> 
- *
- * @version $Id$
- */
-
-public class CalculatedObjectHandle extends DefaultFactHandle {
-
-    private static final long serialVersionUID = -8026531400924584912L;
-    
-    public CalculatedObjectHandle(Object object) {
-        super(-1, object, 0);
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteTuple.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -210,7 +210,7 @@
     public void addTupleMatch(final DefaultFactHandle handle,
                               final TupleMatch node) {
         if ( this.matches == Collections.EMPTY_MAP ) {
-            this.matches = new HashMap();
+            this.matches = new HashMap(1);
         }
         this.matches.put( handle,
                           node );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooBuilder.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -35,6 +35,7 @@
 import org.drools.common.BetaNodeBinder;
 import org.drools.common.InstanceEqualsConstraint;
 import org.drools.common.InstanceNotEqualsConstraint;
+import org.drools.rule.Accumulate;
 import org.drools.rule.And;
 import org.drools.rule.Column;
 import org.drools.rule.Declaration;
@@ -323,6 +324,10 @@
             } else if ( object.getClass() == From.class ) {
                 attachFrom( this.tupleSource,
                             (From) object );
+            } else if ( object.getClass() == Accumulate.class ) {
+                attachAccumulate( this.tupleSource,
+                                  and,
+                                  (Accumulate) object );
             } else if ( this.objectSource != null ) {
                 this.tupleSource = attachNode( new JoinNode( this.id++,
                                                              this.tupleSource,
@@ -335,7 +340,7 @@
     public BaseNode[] getTerminalNodes(final Rule rule) {
         return (BaseNode[]) this.rules.remove( rule );
     }
-    
+
     private void attachQuery(final String queryName) {
         // incrementing offset adjustment, since we are adding a new ObjectNodeType as our
         // first column
@@ -352,7 +357,6 @@
         final FieldValue field = FieldFactory.getFieldValue( queryName,
                                                              ValueType.STRING_TYPE );
 
-
         final LiteralConstraint constraint = new LiteralConstraint( extractor,
                                                                     ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL ),
                                                                     field );
@@ -364,7 +368,7 @@
 
         this.tupleSource = attachNode( new LeftInputAdapterNode( this.id++,
                                                                  alphaNodeSource ) );
-    }    
+    }
 
     private BetaNodeBinder attachColumn(final Column column,
                                         final GroupElement parent,
@@ -547,7 +551,7 @@
 
             node = candidate;
         } else {
-            if( !node.isInUse() ) {
+            if ( !node.isInUse() ) {
                 if ( this.workingMemories.length == 0 ) {
                     node.attach();
                 } else {
@@ -579,7 +583,7 @@
             this.tupleSource = attachNode( new LeftInputAdapterNode( this.id++,
                                                                      objectSource ) );
         }
-        
+
         // Adjusting offset in case a previous Initial-Fact was added to the network
         column.adjustOffset( this.currentOffsetAdjustment );
 
@@ -632,6 +636,82 @@
 
     }
 
+    private void attachAccumulate(final TupleSource tupleSource,
+                                  final And parent,
+                                  final Accumulate accumulate) {
+        // If a tupleSource does not exist then we need to adapt an
+        // InitialFact into a a TupleSource using LeftInputAdapterNode
+        if ( this.tupleSource == null ) {
+            // adjusting offset as all tuples will now contain initial-fact at index 0
+            this.currentOffsetAdjustment = 1;
+
+            final ObjectSource auxObjectSource = attachNode( new ObjectTypeNode( this.id++,
+                                                                                 this.sinklistFactory.newObjectSinkList( ObjectTypeNode.class ),
+                                                                                 new ClassObjectType( InitialFact.class ),
+                                                                                 this.rete ) );
+
+            this.tupleSource = attachNode( new LeftInputAdapterNode( this.id++,
+                                                                     auxObjectSource ) );
+        }
+
+        final Column sourceColumn = accumulate.getSourceColumn();
+        final BetaNodeBinder sourceBinder = attachColumn(sourceColumn,
+                                                   parent,
+                                                   true);
+
+        Column column = accumulate.getResultColumn();
+        // Adjusting offset in case a previous Initial-Fact was added to the network
+        column.adjustOffset( this.currentOffsetAdjustment );
+
+        final List constraints = column.getConstraints();
+
+        // Check if the Column is bound
+        if ( column.getDeclaration() != null ) {
+            final Declaration declaration = column.getDeclaration();
+            // Add the declaration the map of previously bound declarations
+            this.declarations.put( declaration.getIdentifier(),
+                                   declaration );
+        }
+
+        final List predicateConstraints = new ArrayList();
+        final List alphaNodeConstraints = new ArrayList();
+
+        for ( final Iterator it = constraints.iterator(); it.hasNext(); ) {
+            final Object object = it.next();
+            // Check if its a declaration
+            if ( object instanceof Declaration ) {
+                final Declaration declaration = (Declaration) object;
+                // Add the declaration the map of previously bound declarations
+                this.declarations.put( declaration.getIdentifier(),
+                                       declaration );
+                continue;
+            }
+
+            final FieldConstraint fieldConstraint = (FieldConstraint) object;
+            if ( fieldConstraint instanceof LiteralConstraint ) {
+                alphaNodeConstraints.add( fieldConstraint );
+            } else {
+                checkUnboundDeclarations( fieldConstraint.getRequiredDeclarations() );
+                predicateConstraints.add( fieldConstraint );
+            }
+        }
+
+        BetaNodeBinder resultsBinder = null;
+        if ( !predicateConstraints.isEmpty() ) {
+            resultsBinder = new BetaNodeBinder( (FieldConstraint[]) predicateConstraints.toArray( new FieldConstraint[predicateConstraints.size()] ) );
+        } else {
+            resultsBinder = new BetaNodeBinder();
+        }
+
+        this.tupleSource = attachNode( new AccumulateNode( id++,
+                                                           this.tupleSource,
+                                                           this.objectSource,
+                                                           (FieldConstraint[]) alphaNodeConstraints.toArray( new FieldConstraint[alphaNodeConstraints.size()] ),
+                                                           sourceBinder,
+                                                           resultsBinder,
+                                                           accumulate) );
+    }
+
     private ObjectSource attachNode(final ObjectSource candidate) {
         ObjectSource node = (ObjectSource) this.attachedNodes.get( candidate );
 
@@ -647,7 +727,7 @@
 
             node = candidate;
         } else {
-            if( !node.isInUse() ) {
+            if ( !node.isInUse() ) {
                 if ( this.workingMemories.length == 0 ) {
                     node.attach();
                 } else {

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.rule;
+
+import java.util.List;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.WorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.spi.Accumulator;
+
+/**
+ * A class to represent a Accumulate CE
+ */
+public class Accumulate extends ConditionalElement {
+
+    private static final long serialVersionUID = 4608000398919355806L;
+
+    private Accumulator       accumulator;
+    private Column            sourceColumn;
+    private Column            resultColumn;
+    private Declaration[]     requiredDeclarations;
+
+    public Accumulate(final Column sourceColumn,
+                      final Column resultColumn) {
+
+        this( sourceColumn,
+              resultColumn,
+              new Declaration[0],
+              null);
+    }
+
+    public Accumulate(final Column sourceColumn,
+                      final Column resultColumn,
+                      final Declaration[] requiredDeclarations) {
+
+        this( sourceColumn,
+              resultColumn,
+              requiredDeclarations,
+              null );
+    }
+
+    public Accumulate(final Column sourceColumn,
+                      final Column resultColumn,
+                      final Declaration[] requiredDeclarations,
+                      final Accumulator accumulator) {
+
+        this.sourceColumn = sourceColumn;
+        this.resultColumn = resultColumn;
+        this.requiredDeclarations = requiredDeclarations;
+        this.accumulator = accumulator;
+    }
+
+    public Accumulator getAccumulator() {
+        return accumulator;
+    }
+
+    public void setAccumulator(Accumulator accumulator) {
+        this.accumulator = accumulator;
+    }
+
+    public Object accumulate(final ReteTuple leftTuple,
+                             final List matchingObjects,
+                             final WorkingMemory workingMemory) {
+        try {
+            return this.accumulator.accumulate( leftTuple,
+                                                matchingObjects,
+                                                this.requiredDeclarations,
+                                                workingMemory );
+        } catch ( final Exception e ) {
+            throw new RuntimeDroolsException( e );
+        }
+    }
+
+    public Object clone() {
+        return new Accumulate( this.sourceColumn,
+                               this.resultColumn,
+                               this.requiredDeclarations,
+                               this.accumulator );
+    }
+
+    public Column getResultColumn() {
+        return this.resultColumn;
+    }
+
+    public Column getSourceColumn() {
+        return this.sourceColumn;
+    }
+
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + id author date revision
Name: svn:eol-style
   + native

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/PackageCompilationData.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -34,6 +34,7 @@
 import org.drools.CheckedDroolsException;
 import org.drools.RuntimeDroolsException;
 import org.drools.common.ObjectInputStreamWithLoader;
+import org.drools.spi.Accumulator;
 import org.drools.spi.Consequence;
 import org.drools.spi.EvalExpression;
 import org.drools.spi.PredicateExpression;
@@ -233,6 +234,8 @@
             ((PredicateConstraint) invoker).setPredicateExpression( (PredicateExpression) clazz.newInstance() );
         } else if ( invoker instanceof EvalCondition ) {
             ((EvalCondition) invoker).setEvalExpression( (EvalExpression) clazz.newInstance() );
+        } else if ( invoker instanceof Accumulate ) {
+            ((Accumulate) invoker).setAccumulator( (Accumulator) clazz.newInstance() );
         } else if ( invoker instanceof Rule ) {
             ((Rule) invoker).setConsequence( (Consequence) clazz.newInstance() );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Rule.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -296,8 +296,10 @@
     public void addPattern(final ConditionalElement ce) {
         if ( ce instanceof GroupElement ) {
             addDeclarations( (GroupElement) ce );
-        } else  if ( ce.getClass() == From.class ) {
-            addDeclarations( ((From) ce ).getColumn());
+        } else if ( ce.getClass() == From.class ) {
+            addDeclarations( ((From) ce).getColumn() );
+        } else if ( ce.getClass() == Accumulate.class ) {
+            addDeclarations( ((Accumulate) ce).getResultColumn() );
         }
         this.lhsRoot.addChild( ce );
     }

Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Accumulator.java (from rev 6040, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Accumulator.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Accumulator.java	2006-08-31 10:41:23 UTC (rev 6040)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Accumulator.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.spi;
+
+import java.util.List;
+
+import org.drools.WorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Declaration;
+
+/**
+ * Accumulator
+ *
+ * Created: 04/06/2006
+ * @author <a href="mailto:tirelli at post.com">Edson Tirelli</a> 
+ *
+ * @version $Id$
+ */
+public interface Accumulator
+    extends
+    Invoker {
+
+    public Object accumulate(ReteTuple leftTuple,
+                             List matchingObjects,
+                             Declaration[] declarations,
+                             WorkingMemory workingMemory) throws Exception;
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -19,14 +19,18 @@
 
 import junit.framework.Assert;
 
+import org.drools.Cheese;
 import org.drools.DroolsTestCase;
 import org.drools.RuleBaseFactory;
-import org.drools.common.BetaNodeBinder;
+import org.drools.base.ClassObjectType;
 import org.drools.common.DefaultFactHandle;
 import org.drools.common.PropagationContextImpl;
+import org.drools.rule.Accumulate;
+import org.drools.rule.Column;
+import org.drools.rule.Declaration;
 import org.drools.rule.Rule;
-import org.drools.spi.FieldConstraint;
 import org.drools.spi.MockConstraint;
+import org.drools.spi.ObjectType;
 import org.drools.spi.PropagationContext;
 
 /**
@@ -46,6 +50,7 @@
     BetaMemory          memory;
     MockConstraint      constraint = new MockConstraint();
     MockAccumulator     accumulator;
+    Accumulate          accumulate;
 
     /* (non-Javadoc)
      * @see junit.framework.TestCase#setUp()
@@ -66,11 +71,21 @@
 
         this.accumulator = new MockAccumulator();
 
+        ObjectType srcObjType = new ClassObjectType( String.class );
+        Column sourceColumn = new Column( 0,
+                                          srcObjType );
+        ObjectType resultObjType = new ClassObjectType( String.class );
+        Column resultColumn = new Column( 1,
+                                          resultObjType );
+        this.accumulate = new Accumulate( sourceColumn,
+                                          resultColumn,
+                                          new Declaration[0],
+                                          this.accumulator );
+
         this.node = new AccumulateNode( 15,
                                         this.tupleSource,
                                         this.objectSource,
-                                        this.accumulator,
-                                        new BetaNodeBinder( new FieldConstraint[]{this.constraint} ) );
+                                        this.accumulate );
 
         this.node.addTupleSink( this.sink );
 
@@ -100,10 +115,10 @@
                              0,
                              this.sink.getAsserted().size() );
 
-        this.node.assertTuple( new ReteTuple( new DefaultFactHandle() ),
+        this.node.assertTuple( new ReteTuple( (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" ) ),
                                context,
                                workingMemory );
-        this.node.assertTuple( new ReteTuple( new DefaultFactHandle() ),
+        this.node.assertTuple( new ReteTuple( (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "other cheese" ) ),
                                context,
                                workingMemory );
 
@@ -127,10 +142,10 @@
      */
     public void testGetPropagatedTuples() {
 
-        this.node.assertTuple( new ReteTuple( new DefaultFactHandle() ),
+        this.node.assertTuple( new ReteTuple( (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" ) ),
                                context,
                                workingMemory );
-        this.node.assertTuple( new ReteTuple( new DefaultFactHandle() ),
+        this.node.assertTuple( new ReteTuple( (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "other cheese" ) ),
                                context,
                                workingMemory );
 
@@ -156,8 +171,7 @@
      * Test method for {@link org.drools.reteoo.AccumulateNode#assertTuple(org.drools.reteoo.ReteTuple, org.drools.spi.PropagationContext, org.drools.reteoo.ReteooWorkingMemory)}.
      */
     public void testAssertTuple() {
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            "cheese" );
+        final DefaultFactHandle f0 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
         final ReteTuple tuple0 = new ReteTuple( f0 );
 
         // assert tuple, should add one to left memory
@@ -173,8 +187,8 @@
                            this.accumulator.getMatchingObjects().isEmpty() );
 
         // assert tuple, should add left memory 
-        final DefaultFactHandle f1 = new DefaultFactHandle( 1,
-                                                            "cheese" );
+        final DefaultFactHandle f1 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "other cheese" );
+
         final ReteTuple tuple1 = new ReteTuple( f1 );
         this.node.assertTuple( tuple1,
                                this.context,
@@ -200,10 +214,9 @@
      * Test method for {@link org.drools.reteoo.AccumulateNode#assertTuple(org.drools.reteoo.ReteTuple, org.drools.spi.PropagationContext, org.drools.reteoo.ReteooWorkingMemory)}.
      */
     public void testAssertTupleWithObjects() {
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            "cheese" );
-        final DefaultFactHandle f1 = new DefaultFactHandle( 1,
-                                                            "other cheese" );
+        final DefaultFactHandle f0 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
+        final DefaultFactHandle f1 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "other cheese" );
+
         final ReteTuple tuple0 = new ReteTuple( f0 );
 
         this.node.assertObject( f0,
@@ -253,8 +266,8 @@
      * Test method for {@link org.drools.reteoo.AccumulateNode#modifyTuple(org.drools.reteoo.ReteTuple, org.drools.spi.PropagationContext, org.drools.reteoo.ReteooWorkingMemory)}.
      */
     public void testModifyTuple() {
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            "cheese" );
+        final DefaultFactHandle f0 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
+        
         final ReteTuple tuple0 = new ReteTuple( f0 );
 
         // assert tuple, should add one to left memory
@@ -286,8 +299,8 @@
      * Test method for {@link org.drools.reteoo.AccumulateNode#retractTuple(org.drools.reteoo.ReteTuple, org.drools.spi.PropagationContext, org.drools.reteoo.ReteooWorkingMemory)}.
      */
     public void testRetractTuple() {
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            "cheese" );
+        final DefaultFactHandle f0 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
+
         final ReteTuple tuple0 = new ReteTuple( f0 );
 
         // assert tuple, should add one to left memory
@@ -317,10 +330,9 @@
      * Test method for {@link org.drools.reteoo.AccumulateNode#assertObject(org.drools.common.DefaultFactHandle, org.drools.spi.PropagationContext, org.drools.reteoo.ReteooWorkingMemory)}.
      */
     public void testAssertObject() {
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            "cheese" );
-        final DefaultFactHandle f1 = new DefaultFactHandle( 1,
-                                                            "other cheese" );
+        final DefaultFactHandle f0 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
+        final DefaultFactHandle f1 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "other cheese" );
+        
         final ReteTuple tuple0 = new ReteTuple( f0 );
 
         // assert tuple, should add one to left memory
@@ -363,10 +375,9 @@
      * Test method for {@link org.drools.reteoo.AccumulateNode#modifyObject(org.drools.common.DefaultFactHandle, org.drools.spi.PropagationContext, org.drools.reteoo.ReteooWorkingMemory)}.
      */
     public void testModifyObject() {
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            "cheese" );
-        final DefaultFactHandle f1 = new DefaultFactHandle( 1,
-                                                            "other cheese" );
+        final DefaultFactHandle f0 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
+        final DefaultFactHandle f1 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "other cheese" );
+        
         final ReteTuple tuple0 = new ReteTuple( f0 );
 
         this.node.assertObject( f0,
@@ -418,10 +429,9 @@
      * Test method for {@link org.drools.reteoo.AccumulateNode#retractObject(org.drools.common.DefaultFactHandle, org.drools.spi.PropagationContext, org.drools.reteoo.ReteooWorkingMemory)}.
      */
     public void testRetractObject() {
-        final DefaultFactHandle f0 = new DefaultFactHandle( 0,
-                                                            "cheese" );
-        final DefaultFactHandle f1 = new DefaultFactHandle( 1,
-                                                            "other cheese" );
+        final DefaultFactHandle f0 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "cheese" );
+        final DefaultFactHandle f1 = (DefaultFactHandle) workingMemory.getFactHandleFactory().newFactHandle( "other cheese" );
+        
         final ReteTuple tuple0 = new ReteTuple( f0 );
 
         this.node.assertObject( f0,
@@ -509,7 +519,7 @@
         final AccumulateNode accumulateNode = new AccumulateNode( 2,
                                                                   tupleSource,
                                                                   objectSource,
-                                                                  this.accumulator );
+                                                                  this.accumulate );
 
         final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( accumulateNode );
 

Deleted: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -1,63 +0,0 @@
-/*
- * Copyright 2005 JBoss Inc
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.drools.reteoo;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.drools.WorkingMemory;
-
-/**
- * A Mock accumulator object.
- * 
- * @author etirelli
- *
- */
-public class MockAccumulator
-    implements
-    Accumulator {
-    
-    private static final long serialVersionUID = 8959310397185256783L;
-    
-    private ReteTuple leftTuple = null;
-    private List      matchingObjects = Collections.EMPTY_LIST;
-    private WorkingMemory workingMemory = null;
-
-    /* (non-Javadoc)
-     * @see org.drools.reteoo.Accumulator#accumulate(org.drools.reteoo.ReteTuple, java.util.List, org.drools.WorkingMemory)
-     */
-    public Object accumulate(ReteTuple leftTuple,
-                             List matchingObjects,
-                             WorkingMemory workingMemory) {
-        this.leftTuple = leftTuple;
-        this.matchingObjects = matchingObjects;
-        this.workingMemory = workingMemory;
-        return matchingObjects;
-    }
-
-    public ReteTuple getLeftTuple() {
-        return leftTuple;
-    }
-
-    public List getMatchingObjects() {
-        return matchingObjects;
-    }
-
-    public WorkingMemory getWorkingMemory() {
-        return workingMemory;
-    }
-
-}

Added: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java	2006-09-07 13:23:03 UTC (rev 6106)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java	2006-09-07 13:44:19 UTC (rev 6107)
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.reteoo;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.drools.WorkingMemory;
+import org.drools.rule.Declaration;
+import org.drools.spi.Accumulator;
+
+/**
+ * A Mock accumulate object.
+ * 
+ * @author etirelli
+ *
+ */
+public class MockAccumulator
+    implements
+    Accumulator {
+    
+    private static final long serialVersionUID = 8959310397185256783L;
+    
+    private ReteTuple leftTuple = null;
+    private List      matchingObjects = Collections.EMPTY_LIST;
+    private WorkingMemory workingMemory = null;
+
+    /* (non-Javadoc)
+     * @see org.drools.reteoo.Accumulator#accumulate(org.drools.reteoo.ReteTuple, java.util.List, org.drools.WorkingMemory)
+     */
+    public Object accumulate(ReteTuple leftTuple,
+                             List matchingObjects,
+                             Declaration[] declarations,
+                             WorkingMemory workingMemory) {
+        this.leftTuple = leftTuple;
+        this.matchingObjects = matchingObjects;
+        this.workingMemory = workingMemory;
+        return matchingObjects;
+    }
+
+    public ReteTuple getLeftTuple() {
+        return leftTuple;
+    }
+
+    public List getMatchingObjects() {
+        return matchingObjects;
+    }
+
+    public WorkingMemory getWorkingMemory() {
+        return workingMemory;
+    }
+
+}




More information about the jboss-svn-commits mailing list