[jboss-svn-commits] JBL Code SVN: r18198 - in labs/jbossrules/trunk/drools-clips/src: main/java/org/drools/base and 12 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jan 29 16:02:48 EST 2008


Author: mark.proctor at jboss.com
Date: 2008-01-29 16:02:48 -0500 (Tue, 29 Jan 2008)
New Revision: 18198

Added:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/CLPConsequence.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Appendable.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/BoolLispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELLexer.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELParser.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CreateListFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/EqFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FloatLispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Function.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionContext.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionHandlers.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/GeneralParseException.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/IntLispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispForm.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/MVELBuildContext.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/NullLispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/OldShell.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/ParserHandler.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/PrintRouterContext.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SExpression.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringBuilderAppendable.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringLispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SymbolLispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableContext.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableLispAtom.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BaseInfixFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrLessThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrMoreThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/IfFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/LessThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ModifyFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MoreThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MultiplyFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PlusFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrintoutFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrognFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ReturnFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialectConfiguration.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClpConsequenceBuilder.java
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLPMVEL.g
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/functions.conf
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/AddFunctionTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/BlockExecutionTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/CompiledFunctionsTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/DeffunctionTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/FunctionFactoryTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/LhsClpParserTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ModifyFunctionTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/TestMVEL.java
   labs/jbossrules/trunk/drools-clips/src/test/resources/org/drools/clips/
Removed:
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/CLPConsequence.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clp/
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BaseFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BindFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BreakFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/CreateListFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/DivideFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ForeachFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/GreaterThanOrEqualFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/IfFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/LessThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MinusFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ModifyFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MultiplyFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PlusFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrintoutFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrognFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchCaseFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchDefaultFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/WhileFunction.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/BaseValueHandler.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/BooleanValueHandler.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPGlobalVariable.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPLocalDeclarationVariable.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPPreviousDeclarationVariable.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/DoubleValueHandler.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/FunctionCaller.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/IndexedLocalVariableValue.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/ListValueHandler.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/LongValueHandler.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/ObjectValueHandler.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/TempTokenVariable.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialectConfiguration.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClpConsequenceBuilder.java
   labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp/
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLP.g
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLPMVEL.g
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/functions.conf
   labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/Appendable.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/BaseInfixFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/BoolLispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/CreateListFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqOrLessThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqOrMoreThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/FloatLispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/Function.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/FunctionHandlers.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/IfFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/IntLispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LessThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LispForm2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/ModifyFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/MoreThanFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/MultiplyFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/NullLispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PlusFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PrintoutFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PrognFunction.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/SExpression.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/StringBuilderAppendable.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/StringLispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/SymbolLispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/TestMVEL.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/VariableLispAtom2.java
   labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/
   labs/jbossrules/trunk/drools-clips/src/test/resources/org/drools/clp/
Log:
JBRULES-720 Clips Parser
-refactoring to use new framework version
-renamed from clp to clips

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips (from rev 18083, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clp)

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/CLPConsequence.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clp/CLPConsequence.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/CLPConsequence.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,33 +0,0 @@
-package org.drools.base.clp;
-
-import org.drools.WorkingMemory;
-import org.drools.clp.BlockExecutionEngine;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ExecutionContextImpl;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.reteoo.ReteTuple;
-import org.drools.spi.Consequence;
-import org.drools.spi.KnowledgeHelper;
-
-public class CLPConsequence
-    implements
-    Consequence {
-
-    private final BlockExecutionEngine engine;
-    private final int                        varSize;
-
-    public CLPConsequence(BlockExecutionEngine engine,
-                          int varSize) {
-        this.engine = engine;
-        this.varSize = varSize;
-    }
-
-    public void evaluate(KnowledgeHelper knowledgeHelper,
-                         WorkingMemory workingMemory) throws Exception {
-        ExecutionContext context = new ExecutionContextImpl( (InternalWorkingMemory) workingMemory,
-                                                             (ReteTuple) knowledgeHelper.getTuple(),
-                                                             varSize );
-        engine.execute( context );
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/CLPConsequence.java (from rev 18196, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clp/CLPConsequence.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/CLPConsequence.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/base/clips/CLPConsequence.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,33 @@
+package org.drools.base.clips;
+
+import org.drools.WorkingMemory;
+import org.drools.clips.BlockExecutionEngine;
+import org.drools.clips.ExecutionContext;
+import org.drools.clips.ExecutionContextImpl;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.spi.Consequence;
+import org.drools.spi.KnowledgeHelper;
+
+public class CLPConsequence
+    implements
+    Consequence {
+
+    private final BlockExecutionEngine engine;
+    private final int                        varSize;
+
+    public CLPConsequence(BlockExecutionEngine engine,
+                          int varSize) {
+        this.engine = engine;
+        this.varSize = varSize;
+    }
+
+    public void evaluate(KnowledgeHelper knowledgeHelper,
+                         WorkingMemory workingMemory) throws Exception {
+        ExecutionContext context = new ExecutionContextImpl( (InternalWorkingMemory) workingMemory,
+                                                             (ReteTuple) knowledgeHelper.getTuple(),
+                                                             varSize );
+        engine.execute( context );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Appendable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Appendable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Appendable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,7 @@
+package org.drools.clips;
+
+public interface Appendable {
+
+    public abstract void append(String string);
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/BoolLispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/BoolLispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/BoolLispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,12 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class BoolLispAtom extends LispAtom {
+    
+    public BoolLispAtom(String value) {
+        super(value);
+    }
+    
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELLexer.java (from rev 18181, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/CLPMVELLexer.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELLexer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELLexer.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,2130 @@
+// $ANTLR 3.0.1 C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g 2008-01-29 07:31:27
+
+	package org.drools.clips;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+public class CLPMVELLexer extends Lexer {
+    public static final int RIGHT_SQUARE=38;
+    public static final int RIGHT_CURLY=40;
+    public static final int EQUALS=23;
+    public static final int FLOAT=24;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=35;
+    public static final int SYMBOL_CHAR=34;
+    public static final int NOT=14;
+    public static final int AND=12;
+    public static final int FIRST_SYMBOL_CHAR=43;
+    public static final int EOF=-1;
+    public static final int HexDigit=31;
+    public static final int DEFFUNCTION=7;
+    public static final int ASSIGN_OP=18;
+    public static final int RIGHT_PAREN=6;
+    public static final int NAME=5;
+    public static final int EOL=27;
+    public static final int DEFRULE=8;
+    public static final int TILDE=21;
+    public static final int PIPE=19;
+    public static final int VAR=17;
+    public static final int EXISTS=15;
+    public static final int SYMBOL=42;
+    public static final int NULL=26;
+    public static final int BOOL=25;
+    public static final int SALIENCE=10;
+    public static final int AMPERSAND=20;
+    public static final int INT=11;
+    public static final int Tokens=46;
+    public static final int MULTI_LINE_COMMENT=41;
+    public static final int T45=45;
+    public static final int T44=44;
+    public static final int COLON=22;
+    public static final int WS=28;
+    public static final int UnicodeEscape=32;
+    public static final int LEFT_CURLY=39;
+    public static final int OR=13;
+    public static final int TEST=16;
+    public static final int LEFT_PAREN=4;
+    public static final int DECLARE=29;
+    public static final int LEFT_SQUARE=37;
+    public static final int EscapeSequence=30;
+    public static final int OctalEscape=33;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=36;
+    public static final int STRING=9;
+    public CLPMVELLexer() {;} 
+    public CLPMVELLexer(CharStream input) {
+        super(input);
+        ruleMemo = new HashMap[44+1];
+     }
+    public String getGrammarFileName() { return "C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g"; }
+
+    // $ANTLR start T44
+    public final void mT44() throws RecognitionException {
+        try {
+            int _type = T44;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:6:5: ( 'import' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:6:7: 'import'
+            {
+            match("import"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T44
+
+    // $ANTLR start T45
+    public final void mT45() throws RecognitionException {
+        try {
+            int _type = T45;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:7:5: ( '=>' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:7:7: '=>'
+            {
+            match("=>"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T45
+
+    // $ANTLR start WS
+    public final void mWS() throws RecognitionException {
+        try {
+            int _type = WS;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:699:9: ( ( ' ' | '\\t' | '\\f' | EOL ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:699:17: ( ' ' | '\\t' | '\\f' | EOL )
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:699:17: ( ' ' | '\\t' | '\\f' | EOL )
+            int alt1=4;
+            switch ( input.LA(1) ) {
+            case ' ':
+                {
+                alt1=1;
+                }
+                break;
+            case '\t':
+                {
+                alt1=2;
+                }
+                break;
+            case '\f':
+                {
+                alt1=3;
+                }
+                break;
+            case '\n':
+            case '\r':
+                {
+                alt1=4;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("699:17: ( ' ' | '\\t' | '\\f' | EOL )", 1, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt1) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:699:19: ' '
+                    {
+                    match(' '); if (failed) return ;
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:700:19: '\\t'
+                    {
+                    match('\t'); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:701:19: '\\f'
+                    {
+                    match('\f'); if (failed) return ;
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:702:19: EOL
+                    {
+                    mEOL(); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( backtracking==0 ) {
+               channel=HIDDEN; 
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end WS
+
+    // $ANTLR start DEFRULE
+    public final void mDEFRULE() throws RecognitionException {
+        try {
+            int _type = DEFRULE;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:707:10: ( 'defrule' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:707:12: 'defrule'
+            {
+            match("defrule"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DEFRULE
+
+    // $ANTLR start DEFFUNCTION
+    public final void mDEFFUNCTION() throws RecognitionException {
+        try {
+            int _type = DEFFUNCTION;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:708:13: ( 'deffunction' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:708:15: 'deffunction'
+            {
+            match("deffunction"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DEFFUNCTION
+
+    // $ANTLR start OR
+    public final void mOR() throws RecognitionException {
+        try {
+            int _type = OR;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:709:7: ( 'or' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:709:9: 'or'
+            {
+            match("or"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end OR
+
+    // $ANTLR start AND
+    public final void mAND() throws RecognitionException {
+        try {
+            int _type = AND;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:710:7: ( 'and' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:710:9: 'and'
+            {
+            match("and"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end AND
+
+    // $ANTLR start NOT
+    public final void mNOT() throws RecognitionException {
+        try {
+            int _type = NOT;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:711:7: ( 'not' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:711:9: 'not'
+            {
+            match("not"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end NOT
+
+    // $ANTLR start EXISTS
+    public final void mEXISTS() throws RecognitionException {
+        try {
+            int _type = EXISTS;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:712:10: ( 'exists' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:712:12: 'exists'
+            {
+            match("exists"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EXISTS
+
+    // $ANTLR start TEST
+    public final void mTEST() throws RecognitionException {
+        try {
+            int _type = TEST;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:713:8: ( 'test' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:713:10: 'test'
+            {
+            match("test"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end TEST
+
+    // $ANTLR start NULL
+    public final void mNULL() throws RecognitionException {
+        try {
+            int _type = NULL;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:715:7: ( 'null' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:715:9: 'null'
+            {
+            match("null"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end NULL
+
+    // $ANTLR start DECLARE
+    public final void mDECLARE() throws RecognitionException {
+        try {
+            int _type = DECLARE;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:717:10: ( 'declare' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:717:12: 'declare'
+            {
+            match("declare"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DECLARE
+
+    // $ANTLR start SALIENCE
+    public final void mSALIENCE() throws RecognitionException {
+        try {
+            int _type = SALIENCE;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:719:10: ( 'salience' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:719:12: 'salience'
+            {
+            match("salience"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end SALIENCE
+
+    // $ANTLR start EOL
+    public final void mEOL() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:724:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:725:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:725:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            int alt2=3;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0=='\r') ) {
+                int LA2_1 = input.LA(2);
+
+                if ( (LA2_1=='\n') && (synpred1())) {
+                    alt2=1;
+                }
+                else {
+                    alt2=2;}
+            }
+            else if ( (LA2_0=='\n') ) {
+                alt2=3;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("725:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+
+                throw nvae;
+            }
+            switch (alt2) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:725:14: ( '\\r\\n' )=> '\\r\\n'
+                    {
+                    match("\r\n"); if (failed) return ;
+
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:726:25: '\\r'
+                    {
+                    match('\r'); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:727:25: '\\n'
+                    {
+                    match('\n'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EOL
+
+    // $ANTLR start INT
+    public final void mINT() throws RecognitionException {
+        try {
+            int _type = INT;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:732:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:732:4: ( '-' )? ( '0' .. '9' )+
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:732:4: ( '-' )?
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0=='-') ) {
+                alt3=1;
+            }
+            switch (alt3) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:732:5: '-'
+                    {
+                    match('-'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:732:10: ( '0' .. '9' )+
+            int cnt4=0;
+            loop4:
+            do {
+                int alt4=2;
+                int LA4_0 = input.LA(1);
+
+                if ( ((LA4_0>='0' && LA4_0<='9')) ) {
+                    alt4=1;
+                }
+
+
+                switch (alt4) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:732:11: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt4 >= 1 ) break loop4;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(4, input);
+                        throw eee;
+                }
+                cnt4++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end INT
+
+    // $ANTLR start FLOAT
+    public final void mFLOAT() throws RecognitionException {
+        try {
+            int _type = FLOAT;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:4: ( '-' )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0=='-') ) {
+                alt5=1;
+            }
+            switch (alt5) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:5: '-'
+                    {
+                    match('-'); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:10: ( '0' .. '9' )+
+            int cnt6=0;
+            loop6:
+            do {
+                int alt6=2;
+                int LA6_0 = input.LA(1);
+
+                if ( ((LA6_0>='0' && LA6_0<='9')) ) {
+                    alt6=1;
+                }
+
+
+                switch (alt6) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:11: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt6 >= 1 ) break loop6;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(6, input);
+                        throw eee;
+                }
+                cnt6++;
+            } while (true);
+
+            match('.'); if (failed) return ;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:26: ( '0' .. '9' )+
+            int cnt7=0;
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( ((LA7_0>='0' && LA7_0<='9')) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:736:27: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt7 >= 1 ) break loop7;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(7, input);
+                        throw eee;
+                }
+                cnt7++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end FLOAT
+
+    // $ANTLR start STRING
+    public final void mSTRING() throws RecognitionException {
+        try {
+            int _type = STRING;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:740:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\"') ) {
+                alt10=1;
+            }
+            else if ( (LA10_0=='\'') ) {
+                alt10=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("739:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+
+                throw nvae;
+            }
+            switch (alt10) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:740:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    {
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:740:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:740:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    {
+                    match('\"'); if (failed) return ;
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:740:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    loop8:
+                    do {
+                        int alt8=3;
+                        int LA8_0 = input.LA(1);
+
+                        if ( (LA8_0=='\\') ) {
+                            alt8=1;
+                        }
+                        else if ( ((LA8_0>='\u0000' && LA8_0<='!')||(LA8_0>='#' && LA8_0<='[')||(LA8_0>=']' && LA8_0<='\uFFFE')) ) {
+                            alt8=2;
+                        }
+
+
+                        switch (alt8) {
+                    	case 1 :
+                    	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:740:15: EscapeSequence
+                    	    {
+                    	    mEscapeSequence(); if (failed) return ;
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:740:32: ~ ( '\\\\' | '\"' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+                    	    failed=false;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return ;}
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop8;
+                        }
+                    } while (true);
+
+                    match('\"'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:741:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    {
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:741:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:741:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    {
+                    match('\''); if (failed) return ;
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:741:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    loop9:
+                    do {
+                        int alt9=3;
+                        int LA9_0 = input.LA(1);
+
+                        if ( (LA9_0=='\\') ) {
+                            alt9=1;
+                        }
+                        else if ( ((LA9_0>='\u0000' && LA9_0<='&')||(LA9_0>='(' && LA9_0<='[')||(LA9_0>=']' && LA9_0<='\uFFFE')) ) {
+                            alt9=2;
+                        }
+
+
+                        switch (alt9) {
+                    	case 1 :
+                    	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:741:16: EscapeSequence
+                    	    {
+                    	    mEscapeSequence(); if (failed) return ;
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:741:33: ~ ( '\\\\' | '\\'' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+                    	    failed=false;
+                    	    }
+                    	    else {
+                    	        if (backtracking>0) {failed=true; return ;}
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop9;
+                        }
+                    } while (true);
+
+                    match('\''); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end STRING
+
+    // $ANTLR start HexDigit
+    public final void mHexDigit() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:745:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:745:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            {
+            if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) {
+                input.consume();
+            failed=false;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recover(mse);    throw mse;
+            }
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end HexDigit
+
+    // $ANTLR start EscapeSequence
+    public final void mEscapeSequence() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:749:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UnicodeEscape | OctalEscape )
+            int alt11=3;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0=='\\') ) {
+                switch ( input.LA(2) ) {
+                case '\"':
+                case '\'':
+                case '\\':
+                case 'b':
+                case 'f':
+                case 'n':
+                case 'r':
+                case 't':
+                    {
+                    alt11=1;
+                    }
+                    break;
+                case 'u':
+                    {
+                    alt11=2;
+                    }
+                    break;
+                case '0':
+                case '1':
+                case '2':
+                case '3':
+                case '4':
+                case '5':
+                case '6':
+                case '7':
+                    {
+                    alt11=3;
+                    }
+                    break;
+                default:
+                    if (backtracking>0) {failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("747:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
+
+                    throw nvae;
+                }
+
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("747:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
+
+                throw nvae;
+            }
+            switch (alt11) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:749:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
+                    {
+                    match('\\'); if (failed) return ;
+                    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+                        input.consume();
+                    failed=false;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return ;}
+                        MismatchedSetException mse =
+                            new MismatchedSetException(null,input);
+                        recover(mse);    throw mse;
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:750:9: UnicodeEscape
+                    {
+                    mUnicodeEscape(); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:751:9: OctalEscape
+                    {
+                    mOctalEscape(); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EscapeSequence
+
+    // $ANTLR start OctalEscape
+    public final void mOctalEscape() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            int alt12=3;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0=='\\') ) {
+                int LA12_1 = input.LA(2);
+
+                if ( ((LA12_1>='0' && LA12_1<='3')) ) {
+                    int LA12_2 = input.LA(3);
+
+                    if ( ((LA12_2>='0' && LA12_2<='7')) ) {
+                        int LA12_4 = input.LA(4);
+
+                        if ( ((LA12_4>='0' && LA12_4<='7')) ) {
+                            alt12=1;
+                        }
+                        else {
+                            alt12=2;}
+                    }
+                    else {
+                        alt12=3;}
+                }
+                else if ( ((LA12_1>='4' && LA12_1<='7')) ) {
+                    int LA12_3 = input.LA(3);
+
+                    if ( ((LA12_3>='0' && LA12_3<='7')) ) {
+                        alt12=2;
+                    }
+                    else {
+                        alt12=3;}
+                }
+                else {
+                    if (backtracking>0) {failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("754:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("754:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+
+                throw nvae;
+            }
+            switch (alt12) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:14: ( '0' .. '3' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:15: '0' .. '3'
+                    {
+                    matchRange('0','3'); if (failed) return ;
+
+                    }
+
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:25: ( '0' .. '7' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:26: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:36: ( '0' .. '7' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:756:37: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:757:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:757:14: ( '0' .. '7' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:757:15: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:757:25: ( '0' .. '7' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:757:26: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:758:9: '\\\\' ( '0' .. '7' )
+                    {
+                    match('\\'); if (failed) return ;
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:758:14: ( '0' .. '7' )
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:758:15: '0' .. '7'
+                    {
+                    matchRange('0','7'); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        finally {
+        }
+    }
+    // $ANTLR end OctalEscape
+
+    // $ANTLR start UnicodeEscape
+    public final void mUnicodeEscape() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:763:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:763:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            {
+            match('\\'); if (failed) return ;
+            match('u'); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+            mHexDigit(); if (failed) return ;
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end UnicodeEscape
+
+    // $ANTLR start BOOL
+    public final void mBOOL() throws RecognitionException {
+        try {
+            int _type = BOOL;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:767:2: ( ( 'true' | 'false' ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:767:4: ( 'true' | 'false' )
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:767:4: ( 'true' | 'false' )
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='t') ) {
+                alt13=1;
+            }
+            else if ( (LA13_0=='f') ) {
+                alt13=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("767:4: ( 'true' | 'false' )", 13, 0, input);
+
+                throw nvae;
+            }
+            switch (alt13) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:767:5: 'true'
+                    {
+                    match("true"); if (failed) return ;
+
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:767:12: 'false'
+                    {
+                    match("false"); if (failed) return ;
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end BOOL
+
+    // $ANTLR start VAR
+    public final void mVAR() throws RecognitionException {
+        try {
+            int _type = VAR;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:770:6: ( '?' ( SYMBOL_CHAR )+ )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:770:8: '?' ( SYMBOL_CHAR )+
+            {
+            match('?'); if (failed) return ;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:770:12: ( SYMBOL_CHAR )+
+            int cnt14=0;
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( (LA14_0=='!'||(LA14_0>='#' && LA14_0<='%')||(LA14_0>='*' && LA14_0<=':')||(LA14_0>='=' && LA14_0<='_')||(LA14_0>='a' && LA14_0<='{')||LA14_0=='}') ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:770:12: SYMBOL_CHAR
+            	    {
+            	    mSYMBOL_CHAR(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt14 >= 1 ) break loop14;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(14, input);
+                        throw eee;
+                }
+                cnt14++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end VAR
+
+    // $ANTLR start SH_STYLE_SINGLE_LINE_COMMENT
+    public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
+        try {
+            int _type = SH_STYLE_SINGLE_LINE_COMMENT;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:774:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:774:4: '#' ( options {greedy=false; } : . )* EOL
+            {
+            match('#'); if (failed) return ;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:774:8: ( options {greedy=false; } : . )*
+            loop15:
+            do {
+                int alt15=2;
+                int LA15_0 = input.LA(1);
+
+                if ( (LA15_0=='\r') ) {
+                    alt15=2;
+                }
+                else if ( (LA15_0=='\n') ) {
+                    alt15=2;
+                }
+                else if ( ((LA15_0>='\u0000' && LA15_0<='\t')||(LA15_0>='\u000B' && LA15_0<='\f')||(LA15_0>='\u000E' && LA15_0<='\uFFFE')) ) {
+                    alt15=1;
+                }
+
+
+                switch (alt15) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:774:35: .
+            	    {
+            	    matchAny(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop15;
+                }
+            } while (true);
+
+            mEOL(); if (failed) return ;
+            if ( backtracking==0 ) {
+               channel=HIDDEN; 
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end SH_STYLE_SINGLE_LINE_COMMENT
+
+    // $ANTLR start C_STYLE_SINGLE_LINE_COMMENT
+    public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
+        try {
+            int _type = C_STYLE_SINGLE_LINE_COMMENT;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:780:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:780:4: '//' ( options {greedy=false; } : . )* EOL
+            {
+            match("//"); if (failed) return ;
+
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:780:9: ( options {greedy=false; } : . )*
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( (LA16_0=='\r') ) {
+                    alt16=2;
+                }
+                else if ( (LA16_0=='\n') ) {
+                    alt16=2;
+                }
+                else if ( ((LA16_0>='\u0000' && LA16_0<='\t')||(LA16_0>='\u000B' && LA16_0<='\f')||(LA16_0>='\u000E' && LA16_0<='\uFFFE')) ) {
+                    alt16=1;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:780:36: .
+            	    {
+            	    matchAny(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop16;
+                }
+            } while (true);
+
+            mEOL(); if (failed) return ;
+            if ( backtracking==0 ) {
+               channel=HIDDEN; 
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
+
+    // $ANTLR start LEFT_PAREN
+    public final void mLEFT_PAREN() throws RecognitionException {
+        try {
+            int _type = LEFT_PAREN;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:786:2: ( '(' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:786:4: '('
+            {
+            match('('); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_PAREN
+
+    // $ANTLR start RIGHT_PAREN
+    public final void mRIGHT_PAREN() throws RecognitionException {
+        try {
+            int _type = RIGHT_PAREN;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:790:2: ( ')' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:790:4: ')'
+            {
+            match(')'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_PAREN
+
+    // $ANTLR start LEFT_SQUARE
+    public final void mLEFT_SQUARE() throws RecognitionException {
+        try {
+            int _type = LEFT_SQUARE;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:794:2: ( '[' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:794:4: '['
+            {
+            match('['); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_SQUARE
+
+    // $ANTLR start RIGHT_SQUARE
+    public final void mRIGHT_SQUARE() throws RecognitionException {
+        try {
+            int _type = RIGHT_SQUARE;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:798:2: ( ']' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:798:4: ']'
+            {
+            match(']'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_SQUARE
+
+    // $ANTLR start LEFT_CURLY
+    public final void mLEFT_CURLY() throws RecognitionException {
+        try {
+            int _type = LEFT_CURLY;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:802:2: ( '{' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:802:4: '{'
+            {
+            match('{'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_CURLY
+
+    // $ANTLR start RIGHT_CURLY
+    public final void mRIGHT_CURLY() throws RecognitionException {
+        try {
+            int _type = RIGHT_CURLY;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:806:2: ( '}' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:806:4: '}'
+            {
+            match('}'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_CURLY
+
+    // $ANTLR start TILDE
+    public final void mTILDE() throws RecognitionException {
+        try {
+            int _type = TILDE;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:809:7: ( '~' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:809:9: '~'
+            {
+            match('~'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end TILDE
+
+    // $ANTLR start AMPERSAND
+    public final void mAMPERSAND() throws RecognitionException {
+        try {
+            int _type = AMPERSAND;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:813:2: ( '&' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:813:4: '&'
+            {
+            match('&'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end AMPERSAND
+
+    // $ANTLR start PIPE
+    public final void mPIPE() throws RecognitionException {
+        try {
+            int _type = PIPE;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:817:2: ( '|' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:817:4: '|'
+            {
+            match('|'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end PIPE
+
+    // $ANTLR start ASSIGN_OP
+    public final void mASSIGN_OP() throws RecognitionException {
+        try {
+            int _type = ASSIGN_OP;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:821:2: ( '<-' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:821:4: '<-'
+            {
+            match("<-"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end ASSIGN_OP
+
+    // $ANTLR start COLON
+    public final void mCOLON() throws RecognitionException {
+        try {
+            int _type = COLON;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:824:7: ( ':' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:824:9: ':'
+            {
+            match(':'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end COLON
+
+    // $ANTLR start EQUALS
+    public final void mEQUALS() throws RecognitionException {
+        try {
+            int _type = EQUALS;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:826:8: ( '=' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:826:10: '='
+            {
+            match('='); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EQUALS
+
+    // $ANTLR start MULTI_LINE_COMMENT
+    public final void mMULTI_LINE_COMMENT() throws RecognitionException {
+        try {
+            int _type = MULTI_LINE_COMMENT;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:829:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:829:4: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); if (failed) return ;
+
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:829:9: ( options {greedy=false; } : . )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( (LA17_0=='*') ) {
+                    int LA17_1 = input.LA(2);
+
+                    if ( (LA17_1=='/') ) {
+                        alt17=2;
+                    }
+                    else if ( ((LA17_1>='\u0000' && LA17_1<='.')||(LA17_1>='0' && LA17_1<='\uFFFE')) ) {
+                        alt17=1;
+                    }
+
+
+                }
+                else if ( ((LA17_0>='\u0000' && LA17_0<=')')||(LA17_0>='+' && LA17_0<='\uFFFE')) ) {
+                    alt17=1;
+                }
+
+
+                switch (alt17) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:829:35: .
+            	    {
+            	    matchAny(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+            match("*/"); if (failed) return ;
+
+            if ( backtracking==0 ) {
+               channel=HIDDEN; 
+            }
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end MULTI_LINE_COMMENT
+
+    // $ANTLR start NAME
+    public final void mNAME() throws RecognitionException {
+        try {
+            int _type = NAME;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:833:6: ( SYMBOL )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:833:8: SYMBOL
+            {
+            mSYMBOL(); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end NAME
+
+    // $ANTLR start SYMBOL
+    public final void mSYMBOL() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:836:8: ( FIRST_SYMBOL_CHAR ( SYMBOL_CHAR )* )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:836:10: FIRST_SYMBOL_CHAR ( SYMBOL_CHAR )*
+            {
+            mFIRST_SYMBOL_CHAR(); if (failed) return ;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:836:28: ( SYMBOL_CHAR )*
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( (LA18_0=='!'||(LA18_0>='#' && LA18_0<='%')||(LA18_0>='*' && LA18_0<=':')||(LA18_0>='=' && LA18_0<='_')||(LA18_0>='a' && LA18_0<='{')||LA18_0=='}') ) {
+                    alt18=1;
+                }
+
+
+                switch (alt18) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:836:28: SYMBOL_CHAR
+            	    {
+            	    mSYMBOL_CHAR(); if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop18;
+                }
+            } while (true);
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end SYMBOL
+
+    // $ANTLR start FIRST_SYMBOL_CHAR
+    public final void mFIRST_SYMBOL_CHAR() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:841:19: ( ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '=' | '\\\\' | '/' | '@' | '#' | ':' | '>' | '<' | ',' | '.' | '[' | ']' | '{' | '}' ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:841:21: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '=' | '\\\\' | '/' | '@' | '#' | ':' | '>' | '<' | ',' | '.' | '[' | ']' | '{' | '}' )
+            {
+            if ( input.LA(1)=='!'||(input.LA(1)>='#' && input.LA(1)<='%')||(input.LA(1)>='*' && input.LA(1)<=':')||(input.LA(1)>='<' && input.LA(1)<='>')||(input.LA(1)>='@' && input.LA(1)<='_')||(input.LA(1)>='a' && input.LA(1)<='{')||input.LA(1)=='}' ) {
+                input.consume();
+            failed=false;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recover(mse);    throw mse;
+            }
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end FIRST_SYMBOL_CHAR
+
+    // $ANTLR start SYMBOL_CHAR
+    public final void mSYMBOL_CHAR() throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:846:13: ( ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '=' | '\\\\' | '/' | '@' | '#' | ':' | '>' | ',' | '.' | '[' | ']' | '{' | '}' | '?' ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:846:15: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '=' | '\\\\' | '/' | '@' | '#' | ':' | '>' | ',' | '.' | '[' | ']' | '{' | '}' | '?' )
+            {
+            if ( input.LA(1)=='!'||(input.LA(1)>='#' && input.LA(1)<='%')||(input.LA(1)>='*' && input.LA(1)<=':')||(input.LA(1)>='=' && input.LA(1)<='_')||(input.LA(1)>='a' && input.LA(1)<='{')||input.LA(1)=='}' ) {
+                input.consume();
+            failed=false;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                MismatchedSetException mse =
+                    new MismatchedSetException(null,input);
+                recover(mse);    throw mse;
+            }
+
+
+            }
+
+        }
+        finally {
+        }
+    }
+    // $ANTLR end SYMBOL_CHAR
+
+    public void mTokens() throws RecognitionException {
+        // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:8: ( T44 | T45 | WS | DEFRULE | DEFFUNCTION | OR | AND | NOT | EXISTS | TEST | NULL | DECLARE | SALIENCE | INT | FLOAT | STRING | BOOL | VAR | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | TILDE | AMPERSAND | PIPE | ASSIGN_OP | COLON | EQUALS | MULTI_LINE_COMMENT | NAME )
+        int alt19=34;
+        alt19 = dfa19.predict(input);
+        switch (alt19) {
+            case 1 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:10: T44
+                {
+                mT44(); if (failed) return ;
+
+                }
+                break;
+            case 2 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:14: T45
+                {
+                mT45(); if (failed) return ;
+
+                }
+                break;
+            case 3 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:18: WS
+                {
+                mWS(); if (failed) return ;
+
+                }
+                break;
+            case 4 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:21: DEFRULE
+                {
+                mDEFRULE(); if (failed) return ;
+
+                }
+                break;
+            case 5 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:29: DEFFUNCTION
+                {
+                mDEFFUNCTION(); if (failed) return ;
+
+                }
+                break;
+            case 6 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:41: OR
+                {
+                mOR(); if (failed) return ;
+
+                }
+                break;
+            case 7 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:44: AND
+                {
+                mAND(); if (failed) return ;
+
+                }
+                break;
+            case 8 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:48: NOT
+                {
+                mNOT(); if (failed) return ;
+
+                }
+                break;
+            case 9 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:52: EXISTS
+                {
+                mEXISTS(); if (failed) return ;
+
+                }
+                break;
+            case 10 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:59: TEST
+                {
+                mTEST(); if (failed) return ;
+
+                }
+                break;
+            case 11 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:64: NULL
+                {
+                mNULL(); if (failed) return ;
+
+                }
+                break;
+            case 12 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:69: DECLARE
+                {
+                mDECLARE(); if (failed) return ;
+
+                }
+                break;
+            case 13 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:77: SALIENCE
+                {
+                mSALIENCE(); if (failed) return ;
+
+                }
+                break;
+            case 14 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:86: INT
+                {
+                mINT(); if (failed) return ;
+
+                }
+                break;
+            case 15 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:90: FLOAT
+                {
+                mFLOAT(); if (failed) return ;
+
+                }
+                break;
+            case 16 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:96: STRING
+                {
+                mSTRING(); if (failed) return ;
+
+                }
+                break;
+            case 17 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:103: BOOL
+                {
+                mBOOL(); if (failed) return ;
+
+                }
+                break;
+            case 18 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:108: VAR
+                {
+                mVAR(); if (failed) return ;
+
+                }
+                break;
+            case 19 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:112: SH_STYLE_SINGLE_LINE_COMMENT
+                {
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 20 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:141: C_STYLE_SINGLE_LINE_COMMENT
+                {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 21 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:169: LEFT_PAREN
+                {
+                mLEFT_PAREN(); if (failed) return ;
+
+                }
+                break;
+            case 22 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:180: RIGHT_PAREN
+                {
+                mRIGHT_PAREN(); if (failed) return ;
+
+                }
+                break;
+            case 23 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:192: LEFT_SQUARE
+                {
+                mLEFT_SQUARE(); if (failed) return ;
+
+                }
+                break;
+            case 24 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:204: RIGHT_SQUARE
+                {
+                mRIGHT_SQUARE(); if (failed) return ;
+
+                }
+                break;
+            case 25 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:217: LEFT_CURLY
+                {
+                mLEFT_CURLY(); if (failed) return ;
+
+                }
+                break;
+            case 26 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:228: RIGHT_CURLY
+                {
+                mRIGHT_CURLY(); if (failed) return ;
+
+                }
+                break;
+            case 27 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:240: TILDE
+                {
+                mTILDE(); if (failed) return ;
+
+                }
+                break;
+            case 28 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:246: AMPERSAND
+                {
+                mAMPERSAND(); if (failed) return ;
+
+                }
+                break;
+            case 29 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:256: PIPE
+                {
+                mPIPE(); if (failed) return ;
+
+                }
+                break;
+            case 30 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:261: ASSIGN_OP
+                {
+                mASSIGN_OP(); if (failed) return ;
+
+                }
+                break;
+            case 31 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:271: COLON
+                {
+                mCOLON(); if (failed) return ;
+
+                }
+                break;
+            case 32 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:277: EQUALS
+                {
+                mEQUALS(); if (failed) return ;
+
+                }
+                break;
+            case 33 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:284: MULTI_LINE_COMMENT
+                {
+                mMULTI_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 34 :
+                // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:1:303: NAME
+                {
+                mNAME(); if (failed) return ;
+
+                }
+                break;
+
+        }
+
+    }
+
+    // $ANTLR start synpred1
+    public final void synpred1_fragment() throws RecognitionException {   
+        // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:725:14: ( '\\r\\n' )
+        // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:725:16: '\\r\\n'
+        {
+        match("\r\n"); if (failed) return ;
+
+
+        }
+    }
+    // $ANTLR end synpred1
+
+    public final boolean synpred1() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred1_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+
+
+    protected DFA19 dfa19 = new DFA19(this);
+    static final String DFA19_eotS =
+        "\1\uffff\1\35\1\40\1\uffff\10\35\1\54\1\uffff\1\35\1\uffff\2\35"+
+        "\2\uffff\1\62\1\63\1\64\1\65\3\uffff\1\35\1\67\1\uffff\1\35\1\71"+
+        "\1\uffff\1\35\1\74\7\35\1\54\1\35\1\uffff\2\35\1\uffff\2\35\4\uffff"+
+        "\1\113\1\uffff\1\35\1\uffff\2\35\1\uffff\1\120\1\35\1\122\4\35\1"+
+        "\127\2\35\1\uffff\1\35\1\uffff\1\35\1\uffff\4\35\1\uffff\1\136\1"+
+        "\uffff\1\35\1\140\1\141\1\35\1\uffff\1\35\1\111\4\35\1\uffff\1\35"+
+        "\2\uffff\1\35\1\140\1\152\3\35\1\156\1\35\1\uffff\1\35\1\161\1\162"+
+        "\1\uffff\2\35\2\uffff\1\165\1\35\1\uffff\1\35\1\170\1\uffff";
+    static final String DFA19_eofS =
+        "\171\uffff";
+    static final String DFA19_minS =
+        "\1\11\1\155\1\41\1\uffff\1\145\1\162\1\156\1\157\1\170\1\145\1\141"+
+        "\1\60\1\41\1\uffff\1\141\1\uffff\1\0\1\52\2\uffff\4\41\3\uffff\1"+
+        "\55\1\41\1\uffff\1\160\1\41\1\uffff\1\143\1\41\1\144\1\154\1\164"+
+        "\1\151\1\165\1\163\1\154\1\41\1\60\1\uffff\1\154\1\0\1\uffff\2\0"+
+        "\4\uffff\1\41\1\uffff\1\157\1\uffff\1\146\1\154\1\uffff\1\41\1\154"+
+        "\1\41\1\163\1\145\1\164\1\151\1\41\1\163\1\0\1\uffff\1\0\1\uffff"+
+        "\1\0\1\uffff\1\162\2\165\1\141\1\uffff\1\41\1\uffff\1\164\2\41\1"+
+        "\145\1\uffff\1\145\1\41\1\164\1\156\1\154\1\162\1\uffff\1\163\2"+
+        "\uffff\1\156\2\41\1\143\2\145\1\41\1\143\1\uffff\1\164\2\41\1\uffff"+
+        "\1\145\1\151\2\uffff\1\41\1\157\1\uffff\1\156\1\41\1\uffff";
+    static final String DFA19_maxS =
+        "\1\176\1\155\1\175\1\uffff\1\145\1\162\1\156\1\165\1\170\1\162\1"+
+        "\141\1\71\1\175\1\uffff\1\141\1\uffff\1\ufffe\1\57\2\uffff\4\175"+
+        "\3\uffff\1\55\1\175\1\uffff\1\160\1\175\1\uffff\1\146\1\175\1\144"+
+        "\1\154\1\164\1\151\1\165\1\163\1\154\1\175\1\71\1\uffff\1\154\1"+
+        "\ufffe\1\uffff\2\ufffe\4\uffff\1\175\1\uffff\1\157\1\uffff\1\162"+
+        "\1\154\1\uffff\1\175\1\154\1\175\1\163\1\145\1\164\1\151\1\175\1"+
+        "\163\1\ufffe\1\uffff\1\ufffe\1\uffff\1\ufffe\1\uffff\1\162\2\165"+
+        "\1\141\1\uffff\1\175\1\uffff\1\164\2\175\1\145\1\uffff\1\145\1\175"+
+        "\1\164\1\156\1\154\1\162\1\uffff\1\163\2\uffff\1\156\2\175\1\143"+
+        "\2\145\1\175\1\143\1\uffff\1\164\2\175\1\uffff\1\145\1\151\2\uffff"+
+        "\1\175\1\157\1\uffff\1\156\1\175\1\uffff";
+    static final String DFA19_acceptS =
+        "\3\uffff\1\3\11\uffff\1\20\1\uffff\1\22\2\uffff\1\25\1\26\4\uffff"+
+        "\1\33\1\34\1\35\2\uffff\1\42\2\uffff\1\40\13\uffff\1\16\2\uffff"+
+        "\1\23\2\uffff\1\27\1\30\1\31\1\32\1\uffff\1\37\1\uffff\1\2\2\uffff"+
+        "\1\6\12\uffff\1\24\1\uffff\1\41\1\uffff\1\36\4\uffff\1\7\1\uffff"+
+        "\1\10\4\uffff\1\17\6\uffff\1\13\1\uffff\1\21\1\12\10\uffff\1\1\3"+
+        "\uffff\1\11\2\uffff\1\4\1\14\2\uffff\1\15\2\uffff\1\5";
+    static final String DFA19_specialS =
+        "\171\uffff}>";
+    static final String[] DFA19_transitionS = {
+            "\2\3\1\uffff\2\3\22\uffff\1\3\1\35\1\15\1\20\2\35\1\31\1\15"+
+            "\1\22\1\23\3\35\1\13\1\35\1\21\12\14\1\34\1\uffff\1\33\1\2\1"+
+            "\35\1\17\33\35\1\24\1\35\1\25\2\35\1\uffff\1\6\2\35\1\4\1\10"+
+            "\1\16\2\35\1\1\4\35\1\7\1\5\3\35\1\12\1\11\6\35\1\26\1\32\1"+
+            "\27\1\30",
+            "\1\36",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\1\35\1\37\41\35\1\uffff"+
+            "\33\35\1\uffff\1\35",
+            "",
+            "\1\41",
+            "\1\42",
+            "\1\43",
+            "\1\45\5\uffff\1\44",
+            "\1\46",
+            "\1\50\14\uffff\1\47",
+            "\1\51",
+            "\12\52",
+            "\1\35\1\uffff\3\35\4\uffff\4\35\1\53\1\35\12\52\1\35\2\uffff"+
+            "\43\35\1\uffff\33\35\1\uffff\1\35",
+            "",
+            "\1\55",
+            "",
+            "\41\57\1\56\1\57\3\56\4\57\21\56\2\57\43\56\1\57\33\56\1\57"+
+            "\1\56\uff81\57",
+            "\1\61\4\uffff\1\60",
+            "",
+            "",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "",
+            "",
+            "",
+            "\1\66",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "",
+            "\1\70",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "",
+            "\1\73\2\uffff\1\72",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\75",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "\1\102",
+            "\1\103",
+            "\1\35\1\uffff\3\35\4\uffff\4\35\1\53\1\35\12\52\1\35\2\uffff"+
+            "\43\35\1\uffff\33\35\1\uffff\1\35",
+            "\12\104",
+            "",
+            "\1\105",
+            "\41\57\1\56\1\57\3\56\4\57\21\56\2\57\43\56\1\57\33\56\1\57"+
+            "\1\56\uff81\57",
+            "",
+            "\41\107\1\106\1\107\3\106\4\107\21\106\2\107\43\106\1\107\33"+
+            "\106\1\107\1\106\uff81\107",
+            "\41\111\1\112\1\111\3\112\4\111\1\110\20\112\2\111\43\112\1"+
+            "\111\33\112\1\111\1\112\uff81\111",
+            "",
+            "",
+            "",
+            "",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "",
+            "\1\114",
+            "",
+            "\1\115\13\uffff\1\116",
+            "\1\117",
+            "",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\121",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\123",
+            "\1\124",
+            "\1\125",
+            "\1\126",
+            "\1\35\1\uffff\3\35\4\uffff\6\35\12\104\1\35\2\uffff\43\35\1"+
+            "\uffff\33\35\1\uffff\1\35",
+            "\1\130",
+            "\41\107\1\106\1\107\3\106\4\107\21\106\2\107\43\106\1\107\33"+
+            "\106\1\107\1\106\uff81\107",
+            "",
+            "\41\111\1\112\1\111\3\112\4\111\1\110\4\112\1\131\13\112\2\111"+
+            "\43\112\1\111\33\112\1\111\1\112\uff81\111",
+            "",
+            "\41\111\1\112\1\111\3\112\4\111\1\110\20\112\2\111\43\112\1"+
+            "\111\33\112\1\111\1\112\uff81\111",
+            "",
+            "\1\132",
+            "\1\133",
+            "\1\134",
+            "\1\135",
+            "",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "",
+            "\1\137",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\142",
+            "",
+            "\1\143",
+            "\1\112\1\uffff\3\112\4\uffff\1\110\20\112\2\uffff\43\112\1\uffff"+
+            "\33\112\1\uffff\1\112",
+            "\1\144",
+            "\1\145",
+            "\1\146",
+            "\1\147",
+            "",
+            "\1\150",
+            "",
+            "",
+            "\1\151",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\153",
+            "\1\154",
+            "\1\155",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\157",
+            "",
+            "\1\160",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "",
+            "\1\163",
+            "\1\164",
+            "",
+            "",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            "\1\166",
+            "",
+            "\1\167",
+            "\1\35\1\uffff\3\35\4\uffff\21\35\2\uffff\43\35\1\uffff\33\35"+
+            "\1\uffff\1\35",
+            ""
+    };
+
+    static final short[] DFA19_eot = DFA.unpackEncodedString(DFA19_eotS);
+    static final short[] DFA19_eof = DFA.unpackEncodedString(DFA19_eofS);
+    static final char[] DFA19_min = DFA.unpackEncodedStringToUnsignedChars(DFA19_minS);
+    static final char[] DFA19_max = DFA.unpackEncodedStringToUnsignedChars(DFA19_maxS);
+    static final short[] DFA19_accept = DFA.unpackEncodedString(DFA19_acceptS);
+    static final short[] DFA19_special = DFA.unpackEncodedString(DFA19_specialS);
+    static final short[][] DFA19_transition;
+
+    static {
+        int numStates = DFA19_transitionS.length;
+        DFA19_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA19_transition[i] = DFA.unpackEncodedString(DFA19_transitionS[i]);
+        }
+    }
+
+    class DFA19 extends DFA {
+
+        public DFA19(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 19;
+            this.eot = DFA19_eot;
+            this.eof = DFA19_eof;
+            this.min = DFA19_min;
+            this.max = DFA19_max;
+            this.accept = DFA19_accept;
+            this.special = DFA19_special;
+            this.transition = DFA19_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( T44 | T45 | WS | DEFRULE | DEFFUNCTION | OR | AND | NOT | EXISTS | TEST | NULL | DECLARE | SALIENCE | INT | FLOAT | STRING | BOOL | VAR | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | TILDE | AMPERSAND | PIPE | ASSIGN_OP | COLON | EQUALS | MULTI_LINE_COMMENT | NAME );";
+        }
+    }
+ 
+
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELParser.java (from rev 18181, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/CLPMVELParser.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELParser.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CLPMVELParser.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,2266 @@
+// $ANTLR 3.0.1 C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g 2008-01-29 07:31:27
+
+	package org.drools.clips;
+
+    import org.drools.clips.*;
+import org.drools.clips.mvel.*;
+    
+	import java.util.List;
+	import java.util.ArrayList;
+	import java.util.Iterator;
+	import java.util.HashMap;	
+	import java.util.Set;	
+	import java.util.HashSet;			
+	import java.util.StringTokenizer;
+	import org.drools.lang.descr.*;
+	import org.drools.lang.Location;	
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+public class CLPMVELParser extends Parser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "LEFT_PAREN", "NAME", "RIGHT_PAREN", "DEFFUNCTION", "DEFRULE", "STRING", "SALIENCE", "INT", "AND", "OR", "NOT", "EXISTS", "TEST", "VAR", "ASSIGN_OP", "PIPE", "AMPERSAND", "TILDE", "COLON", "EQUALS", "FLOAT", "BOOL", "NULL", "EOL", "WS", "DECLARE", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SYMBOL_CHAR", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "LEFT_SQUARE", "RIGHT_SQUARE", "LEFT_CURLY", "RIGHT_CURLY", "MULTI_LINE_COMMENT", "SYMBOL", "FIRST_SYMBOL_CHAR", "'import'", "'=>'"
+    };
+    public static final int RIGHT_SQUARE=38;
+    public static final int RIGHT_CURLY=40;
+    public static final int EQUALS=23;
+    public static final int FLOAT=24;
+    public static final int NOT=14;
+    public static final int SYMBOL_CHAR=34;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=35;
+    public static final int AND=12;
+    public static final int EOF=-1;
+    public static final int FIRST_SYMBOL_CHAR=43;
+    public static final int HexDigit=31;
+    public static final int DEFFUNCTION=7;
+    public static final int ASSIGN_OP=18;
+    public static final int RIGHT_PAREN=6;
+    public static final int NAME=5;
+    public static final int EOL=27;
+    public static final int DEFRULE=8;
+    public static final int TILDE=21;
+    public static final int PIPE=19;
+    public static final int VAR=17;
+    public static final int EXISTS=15;
+    public static final int SYMBOL=42;
+    public static final int NULL=26;
+    public static final int BOOL=25;
+    public static final int SALIENCE=10;
+    public static final int AMPERSAND=20;
+    public static final int INT=11;
+    public static final int MULTI_LINE_COMMENT=41;
+    public static final int COLON=22;
+    public static final int WS=28;
+    public static final int UnicodeEscape=32;
+    public static final int LEFT_CURLY=39;
+    public static final int OR=13;
+    public static final int TEST=16;
+    public static final int LEFT_PAREN=4;
+    public static final int DECLARE=29;
+    public static final int LEFT_SQUARE=37;
+    public static final int EscapeSequence=30;
+    public static final int OctalEscape=33;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=36;
+    public static final int STRING=9;
+
+        public CLPMVELParser(TokenStream input) {
+            super(input);
+            ruleMemo = new HashMap[26+1];
+         }
+        
+
+    public String[] getTokenNames() { return tokenNames; }
+    public String getGrammarFileName() { return "C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g"; }
+
+    
+    	private PackageDescr packageDescr;
+    	private List errors = new ArrayList();
+    	private String source = "unknown";
+    	private int lineOffset = 0;
+    	private DescrFactory factory = new DescrFactory();
+    	private MVELBuildContext context;
+    	private boolean parserDebug = false;
+    	private Location location = new Location( Location.LOCATION_UNKNOWN );	
+    	
+    	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;
+    	}	
+    
+    	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;
+    	}
+    	
+    	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+ FIXME
+                                                               "; 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) ) );
+            	}
+            }
+          
+
+
+
+    // $ANTLR start eval
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:224:1: eval[ParserHandler handler, MVELBuildContext context] : (i= importDescr | f= deffunction | r= defrule | form= lisp_form ) ;
+    public final void eval(ParserHandler handler, MVELBuildContext context) throws RecognitionException {
+        ImportDescr i = null;
+
+        FunctionDescr f = null;
+
+        RuleDescr r = null;
+
+        LispForm form = null;
+
+
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:225:2: ( (i= importDescr | f= deffunction | r= defrule | form= lisp_form ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:226:2: (i= importDescr | f= deffunction | r= defrule | form= lisp_form )
+            {
+            if ( backtracking==0 ) {
+               this.context = context; 
+            }
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:227:2: (i= importDescr | f= deffunction | r= defrule | form= lisp_form )
+            int alt1=4;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0==LEFT_PAREN) ) {
+                switch ( input.LA(2) ) {
+                case DEFFUNCTION:
+                    {
+                    alt1=2;
+                    }
+                    break;
+                case 44:
+                    {
+                    alt1=1;
+                    }
+                    break;
+                case DEFRULE:
+                    {
+                    alt1=3;
+                    }
+                    break;
+                case NAME:
+                case VAR:
+                    {
+                    alt1=4;
+                    }
+                    break;
+                default:
+                    if (backtracking>0) {failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("227:2: (i= importDescr | f= deffunction | r= defrule | form= lisp_form )", 1, 1, input);
+
+                    throw nvae;
+                }
+
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("227:2: (i= importDescr | f= deffunction | r= defrule | form= lisp_form )", 1, 0, input);
+
+                throw nvae;
+            }
+            switch (alt1) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:227:7: i= importDescr
+                    {
+                    pushFollow(FOLLOW_importDescr_in_eval60);
+                    i=importDescr();
+                    _fsp--;
+                    if (failed) return ;
+                    if ( backtracking==0 ) {
+                       handler.importHandler( i ); 
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:228:7: f= deffunction
+                    {
+                    pushFollow(FOLLOW_deffunction_in_eval71);
+                    f=deffunction();
+                    _fsp--;
+                    if (failed) return ;
+                    if ( backtracking==0 ) {
+                       handler.functionHandler( f ); 
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:229:7: r= defrule
+                    {
+                    pushFollow(FOLLOW_defrule_in_eval84);
+                    r=defrule();
+                    _fsp--;
+                    if (failed) return ;
+                    if ( backtracking==0 ) {
+                       handler.ruleHandler( r ); 
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:230:7: form= lisp_form
+                    {
+                    pushFollow(FOLLOW_lisp_form_in_eval96);
+                    form=lisp_form();
+                    _fsp--;
+                    if (failed) return ;
+                    if ( backtracking==0 ) {
+                       handler.lispFormHandler( form ); 
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end eval
+
+
+    // $ANTLR start importDescr
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:247:1: importDescr returns [ImportDescr importDescr] : LEFT_PAREN 'import' importName= NAME RIGHT_PAREN ;
+    public final ImportDescr importDescr() throws RecognitionException {
+        ImportDescr importDescr = null;
+
+        Token importName=null;
+
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:248:2: ( LEFT_PAREN 'import' importName= NAME RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:248:4: LEFT_PAREN 'import' importName= NAME RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_importDescr123); if (failed) return importDescr;
+            match(input,44,FOLLOW_44_in_importDescr125); if (failed) return importDescr;
+            importName=(Token)input.LT(1);
+            match(input,NAME,FOLLOW_NAME_in_importDescr129); if (failed) return importDescr;
+            if ( backtracking==0 ) {
+               importDescr = new ImportDescr( importName.getText() ); 
+            }
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_importDescr133); if (failed) return importDescr;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return importDescr;
+    }
+    // $ANTLR end importDescr
+
+
+    // $ANTLR start deffunction
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:296:1: deffunction returns [FunctionDescr functionDescr] : LEFT_PAREN t= DEFFUNCTION name= lisp_atom params= lisp_form (form= lisp_form )+ RIGHT_PAREN ;
+    public final FunctionDescr deffunction() throws RecognitionException {
+        FunctionDescr functionDescr = null;
+
+        Token t=null;
+        SExpression name = null;
+
+        LispForm params = null;
+
+        LispForm form = null;
+
+
+        
+                List content = null;
+                functionDescr = null;
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:301:2: ( LEFT_PAREN t= DEFFUNCTION name= lisp_atom params= lisp_form (form= lisp_form )+ RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:301:4: LEFT_PAREN t= DEFFUNCTION name= lisp_atom params= lisp_form (form= lisp_form )+ RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_deffunction168); if (failed) return functionDescr;
+            t=(Token)input.LT(1);
+            match(input,DEFFUNCTION,FOLLOW_DEFFUNCTION_in_deffunction178); if (failed) return functionDescr;
+            pushFollow(FOLLOW_lisp_atom_in_deffunction188);
+            name=lisp_atom();
+            _fsp--;
+            if (failed) return functionDescr;
+            pushFollow(FOLLOW_lisp_form_in_deffunction198);
+            params=lisp_form();
+            _fsp--;
+            if (failed) return functionDescr;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:305:3: (form= lisp_form )+
+            int cnt2=0;
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( (LA2_0==LEFT_PAREN) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:305:4: form= lisp_form
+            	    {
+            	    pushFollow(FOLLOW_lisp_form_in_deffunction207);
+            	    form=lisp_form();
+            	    _fsp--;
+            	    if (failed) return functionDescr;
+            	    if ( backtracking==0 ) {
+            	       if ( content == null ) content = new ArrayList(); content.add( form ); 
+            	    }
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt2 >= 1 ) break loop2;
+            	    if (backtracking>0) {failed=true; return functionDescr;}
+                        EarlyExitException eee =
+                            new EarlyExitException(2, input);
+                        throw eee;
+                }
+                cnt2++;
+            } while (true);
+
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_deffunction229); if (failed) return functionDescr;
+            if ( backtracking==0 ) {
+               functionDescr = FunctionHandlers.createFunctionDescr( name, params, content ); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return functionDescr;
+    }
+    // $ANTLR end deffunction
+
+
+    // $ANTLR start defrule
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:311:1: defrule returns [RuleDescr rule] : loc= LEFT_PAREN DEFRULE ruleName= NAME documentation= STRING ruleAttribute[rule] ( ce[lhs, declarations] )* '=>' t= lisp_form RIGHT_PAREN ;
+    public final RuleDescr defrule() throws RecognitionException {
+        RuleDescr rule = null;
+
+        Token loc=null;
+        Token ruleName=null;
+        Token documentation=null;
+        LispForm t = null;
+
+
+         
+        	        rule = null; 
+        	        AndDescr lhs = null;
+        	        PatternDescr colum = null;
+        	        AttributeDescr module = null;	      
+                    Set declarations = null;  
+        	      
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:319:2: (loc= LEFT_PAREN DEFRULE ruleName= NAME documentation= STRING ruleAttribute[rule] ( ce[lhs, declarations] )* '=>' t= lisp_form RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:319:4: loc= LEFT_PAREN DEFRULE ruleName= NAME documentation= STRING ruleAttribute[rule] ( ce[lhs, declarations] )* '=>' t= lisp_form RIGHT_PAREN
+            {
+            loc=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_defrule266); if (failed) return rule;
+            match(input,DEFRULE,FOLLOW_DEFRULE_in_defrule274); if (failed) return rule;
+            ruleName=(Token)input.LT(1);
+            match(input,NAME,FOLLOW_NAME_in_defrule278); if (failed) return rule;
+            if ( backtracking==0 ) {
+               	  			  		
+              	  		debug( "start rule: " + ruleName.getText() );
+              	  		String ruleStr = ruleName.getText();
+              
+              	        if ( ruleStr.indexOf("::") >= 0 ) {
+              	            String mod = ruleStr.substring(0, ruleStr.indexOf("::"));
+              	            ruleStr = ruleStr.substring(ruleStr.indexOf("::")+2);
+              				module = new AttributeDescr( "agenda-group", mod );
+              				module.setLocation( offset(ruleName.getLine()), ruleName.getCharPositionInLine() );
+              				module.setStartCharacter( ((CommonToken)ruleName).getStartIndex() );
+              				module.setEndCharacter( ((CommonToken)ruleName).getStopIndex() );
+              			}
+              		    
+              		    rule = new RuleDescr( ruleStr, null ); 
+              		    if( module != null ) {
+              		    	rule.addAttribute( module );
+              		    }
+              		        
+              			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+              			rule.setStartCharacter( ((CommonToken)loc).getStartIndex() ); 
+              		
+              			// not sure how you define where a LHS starts in clips, so just putting it here for now
+                      	lhs = new AndDescr(); 
+                	        rule.setLhs( lhs ); 
+              	        lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+              			lhs.setStartCharacter( ((CommonToken)loc).getStartIndex() );	
+              			
+              			rule.addAttribute( new AttributeDescr( "dialect", "clips") );	
+              			
+              			declarations = new HashSet();  											
+              		
+            }
+            documentation=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_defrule290); if (failed) return rule;
+            if ( backtracking==0 ) {
+              
+              	    	// do nothing here for now
+              		
+            }
+            pushFollow(FOLLOW_ruleAttribute_in_defrule296);
+            ruleAttribute(rule);
+            _fsp--;
+            if (failed) return rule;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:358:3: ( ce[lhs, declarations] )*
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( (LA3_0==LEFT_PAREN||LA3_0==VAR) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:358:3: ce[lhs, declarations]
+            	    {
+            	    pushFollow(FOLLOW_ce_in_defrule304);
+            	    ce(lhs,  declarations);
+            	    _fsp--;
+            	    if (failed) return rule;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop3;
+                }
+            } while (true);
+
+            match(input,45,FOLLOW_45_in_defrule313); if (failed) return rule;
+            pushFollow(FOLLOW_lisp_form_in_defrule322);
+            t=lisp_form();
+            _fsp--;
+            if (failed) return rule;
+            if ( backtracking==0 ) {
+               rule.setConsequence( t ); 
+            }
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_defrule331); if (failed) return rule;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return rule;
+    }
+    // $ANTLR end defrule
+
+
+    // $ANTLR start ruleAttribute
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:368:1: ruleAttribute[RuleDescr rule] : ( LEFT_PAREN 'declare' ( LEFT_PAREN d= salience RIGHT_PAREN )? RIGHT_PAREN )? ;
+    public final void ruleAttribute(RuleDescr rule) throws RecognitionException {
+        AttributeDescr d = null;
+
+
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:369:2: ( ( LEFT_PAREN 'declare' ( LEFT_PAREN d= salience RIGHT_PAREN )? RIGHT_PAREN )? )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:370:3: ( LEFT_PAREN 'declare' ( LEFT_PAREN d= salience RIGHT_PAREN )? RIGHT_PAREN )?
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:370:3: ( LEFT_PAREN 'declare' ( LEFT_PAREN d= salience RIGHT_PAREN )? RIGHT_PAREN )?
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==LEFT_PAREN) ) {
+                int LA5_1 = input.LA(2);
+
+                if ( (LA5_1==DECLARE) ) {
+                    alt5=1;
+                }
+            }
+            switch (alt5) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:370:5: LEFT_PAREN 'declare' ( LEFT_PAREN d= salience RIGHT_PAREN )? RIGHT_PAREN
+                    {
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_ruleAttribute348); if (failed) return ;
+                    match(input,DECLARE,FOLLOW_DECLARE_in_ruleAttribute350); if (failed) return ;
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:371:4: ( LEFT_PAREN d= salience RIGHT_PAREN )?
+                    int alt4=2;
+                    int LA4_0 = input.LA(1);
+
+                    if ( (LA4_0==LEFT_PAREN) ) {
+                        alt4=1;
+                    }
+                    switch (alt4) {
+                        case 1 :
+                            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:371:6: LEFT_PAREN d= salience RIGHT_PAREN
+                            {
+                            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_ruleAttribute357); if (failed) return ;
+                            pushFollow(FOLLOW_salience_in_ruleAttribute361);
+                            d=salience();
+                            _fsp--;
+                            if (failed) return ;
+                            if ( backtracking==0 ) {
+                               rule.addAttribute( d ); 
+                            }
+                            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_ruleAttribute365); if (failed) return ;
+
+                            }
+                            break;
+
+                    }
+
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_ruleAttribute372); if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end ruleAttribute
+
+
+    // $ANTLR start salience
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:375:1: salience returns [AttributeDescr d ] : loc= SALIENCE i= INT ;
+    public final AttributeDescr salience() throws RecognitionException {
+        AttributeDescr d = null;
+
+        Token loc=null;
+        Token i=null;
+
+        
+        		d = null;
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:379:2: (loc= SALIENCE i= INT )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:380:3: loc= SALIENCE i= INT
+            {
+            loc=(Token)input.LT(1);
+            match(input,SALIENCE,FOLLOW_SALIENCE_in_salience402); if (failed) return d;
+            i=(Token)input.LT(1);
+            match(input,INT,FOLLOW_INT_in_salience406); if (failed) return d;
+            if ( backtracking==0 ) {
+              
+              			d = new AttributeDescr( "salience", i.getText() );
+              			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+              			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+              			d.setEndCharacter( ((CommonToken)i).getStopIndex() );
+              		
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return d;
+    }
+    // $ANTLR end salience
+
+
+    // $ANTLR start ce
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:390:1: ce[ConditionalElementDescr in_ce, Set declarations] : ( and_ce[in_ce, declarations] | or_ce[in_ce, declarations] | not_ce[in_ce, declarations] | exists_ce[in_ce, declarations] | eval_ce[in_ce, declarations] | normal_pattern[in_ce, declarations] | bound_pattern[in_ce, declarations] ) ;
+    public final void ce(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:391:2: ( ( and_ce[in_ce, declarations] | or_ce[in_ce, declarations] | not_ce[in_ce, declarations] | exists_ce[in_ce, declarations] | eval_ce[in_ce, declarations] | normal_pattern[in_ce, declarations] | bound_pattern[in_ce, declarations] ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:391:4: ( and_ce[in_ce, declarations] | or_ce[in_ce, declarations] | not_ce[in_ce, declarations] | exists_ce[in_ce, declarations] | eval_ce[in_ce, declarations] | normal_pattern[in_ce, declarations] | bound_pattern[in_ce, declarations] )
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:391:4: ( and_ce[in_ce, declarations] | or_ce[in_ce, declarations] | not_ce[in_ce, declarations] | exists_ce[in_ce, declarations] | eval_ce[in_ce, declarations] | normal_pattern[in_ce, declarations] | bound_pattern[in_ce, declarations] )
+            int alt6=7;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==LEFT_PAREN) ) {
+                switch ( input.LA(2) ) {
+                case NOT:
+                    {
+                    alt6=3;
+                    }
+                    break;
+                case EXISTS:
+                    {
+                    alt6=4;
+                    }
+                    break;
+                case OR:
+                    {
+                    alt6=2;
+                    }
+                    break;
+                case AND:
+                    {
+                    alt6=1;
+                    }
+                    break;
+                case NAME:
+                    {
+                    alt6=6;
+                    }
+                    break;
+                case TEST:
+                    {
+                    alt6=5;
+                    }
+                    break;
+                default:
+                    if (backtracking>0) {failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("391:4: ( and_ce[in_ce, declarations] | or_ce[in_ce, declarations] | not_ce[in_ce, declarations] | exists_ce[in_ce, declarations] | eval_ce[in_ce, declarations] | normal_pattern[in_ce, declarations] | bound_pattern[in_ce, declarations] )", 6, 1, input);
+
+                    throw nvae;
+                }
+
+            }
+            else if ( (LA6_0==VAR) ) {
+                alt6=7;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("391:4: ( and_ce[in_ce, declarations] | or_ce[in_ce, declarations] | not_ce[in_ce, declarations] | exists_ce[in_ce, declarations] | eval_ce[in_ce, declarations] | normal_pattern[in_ce, declarations] | bound_pattern[in_ce, declarations] )", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:391:8: and_ce[in_ce, declarations]
+                    {
+                    pushFollow(FOLLOW_and_ce_in_ce432);
+                    and_ce(in_ce,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:392:7: or_ce[in_ce, declarations]
+                    {
+                    pushFollow(FOLLOW_or_ce_in_ce442);
+                    or_ce(in_ce,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:393:7: not_ce[in_ce, declarations]
+                    {
+                    pushFollow(FOLLOW_not_ce_in_ce451);
+                    not_ce(in_ce,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:394:7: exists_ce[in_ce, declarations]
+                    {
+                    pushFollow(FOLLOW_exists_ce_in_ce460);
+                    exists_ce(in_ce,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 5 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:395:8: eval_ce[in_ce, declarations]
+                    {
+                    pushFollow(FOLLOW_eval_ce_in_ce474);
+                    eval_ce(in_ce,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 6 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:396:7: normal_pattern[in_ce, declarations]
+                    {
+                    pushFollow(FOLLOW_normal_pattern_in_ce488);
+                    normal_pattern(in_ce,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 7 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:397:7: bound_pattern[in_ce, declarations]
+                    {
+                    pushFollow(FOLLOW_bound_pattern_in_ce497);
+                    bound_pattern(in_ce,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end ce
+
+
+    // $ANTLR start and_ce
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:401:1: and_ce[ConditionalElementDescr in_ce, Set declarations] : LEFT_PAREN AND ( ce[andDescr, declarations] )+ RIGHT_PAREN ;
+    public final void and_ce(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        
+                AndDescr andDescr= null;        
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:405:2: ( LEFT_PAREN AND ( ce[andDescr, declarations] )+ RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:405:4: LEFT_PAREN AND ( ce[andDescr, declarations] )+ RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_and_ce524); if (failed) return ;
+            match(input,AND,FOLLOW_AND_in_and_ce529); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              	    	andDescr = new AndDescr();
+              			in_ce.addDescr( andDescr );
+              		
+            }
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:410:3: ( ce[andDescr, declarations] )+
+            int cnt7=0;
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( (LA7_0==LEFT_PAREN||LA7_0==VAR) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:410:3: ce[andDescr, declarations]
+            	    {
+            	    pushFollow(FOLLOW_ce_in_and_ce535);
+            	    ce(andDescr,  declarations);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt7 >= 1 ) break loop7;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(7, input);
+                        throw eee;
+                }
+                cnt7++;
+            } while (true);
+
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_and_ce544); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end and_ce
+
+
+    // $ANTLR start or_ce
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:414:1: or_ce[ConditionalElementDescr in_ce, Set declarations] : LEFT_PAREN OR ( ce[orDescr, declarations] )+ RIGHT_PAREN ;
+    public final void or_ce(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        
+                OrDescr orDescr= null;         
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:418:2: ( LEFT_PAREN OR ( ce[orDescr, declarations] )+ RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:418:4: LEFT_PAREN OR ( ce[orDescr, declarations] )+ RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_or_ce572); if (failed) return ;
+            match(input,OR,FOLLOW_OR_in_or_ce577); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              	    	orDescr = new OrDescr();
+              			in_ce.addDescr( orDescr );
+              		
+            }
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:423:3: ( ce[orDescr, declarations] )+
+            int cnt8=0;
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( (LA8_0==LEFT_PAREN||LA8_0==VAR) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:423:3: ce[orDescr, declarations]
+            	    {
+            	    pushFollow(FOLLOW_ce_in_or_ce583);
+            	    ce(orDescr,  declarations);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt8 >= 1 ) break loop8;
+            	    if (backtracking>0) {failed=true; return ;}
+                        EarlyExitException eee =
+                            new EarlyExitException(8, input);
+                        throw eee;
+                }
+                cnt8++;
+            } while (true);
+
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_or_ce592); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end or_ce
+
+
+    // $ANTLR start not_ce
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:427:1: not_ce[ConditionalElementDescr in_ce, Set declarations] : LEFT_PAREN NOT ce[notDescr, declarations] RIGHT_PAREN ;
+    public final void not_ce(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        
+                NotDescr notDescr= null;         
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:431:2: ( LEFT_PAREN NOT ce[notDescr, declarations] RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:431:4: LEFT_PAREN NOT ce[notDescr, declarations] RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_not_ce620); if (failed) return ;
+            match(input,NOT,FOLLOW_NOT_in_not_ce625); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              			notDescr = new NotDescr();
+              		    in_ce.addDescr( notDescr );
+              		
+            }
+            pushFollow(FOLLOW_ce_in_not_ce631);
+            ce(notDescr,  declarations);
+            _fsp--;
+            if (failed) return ;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_not_ce639); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end not_ce
+
+
+    // $ANTLR start exists_ce
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:440:1: exists_ce[ConditionalElementDescr in_ce, Set declarations] : LEFT_PAREN EXISTS ce[existsDescr, declarations] RIGHT_PAREN ;
+    public final void exists_ce(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        
+                ExistsDescr existsDescr= null;        
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:444:2: ( LEFT_PAREN EXISTS ce[existsDescr, declarations] RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:444:4: LEFT_PAREN EXISTS ce[existsDescr, declarations] RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_exists_ce668); if (failed) return ;
+            match(input,EXISTS,FOLLOW_EXISTS_in_exists_ce673); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              		    existsDescr = new ExistsDescr();
+              		    in_ce.addDescr( existsDescr );
+              		
+            }
+            pushFollow(FOLLOW_ce_in_exists_ce679);
+            ce(existsDescr,  declarations);
+            _fsp--;
+            if (failed) return ;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_exists_ce687); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end exists_ce
+
+
+    // $ANTLR start eval_ce
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:453:1: eval_ce[ConditionalElementDescr in_ce, Set declarations] : LEFT_PAREN TEST t= lisp_form RIGHT_PAREN ;
+    public final void eval_ce(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        LispForm t = null;
+
+
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:454:2: ( LEFT_PAREN TEST t= lisp_form RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:454:4: LEFT_PAREN TEST t= lisp_form RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_eval_ce706); if (failed) return ;
+            match(input,TEST,FOLLOW_TEST_in_eval_ce711); if (failed) return ;
+            pushFollow(FOLLOW_lisp_form_in_eval_ce718);
+            t=lisp_form();
+            _fsp--;
+            if (failed) return ;
+            if ( backtracking==0 ) {
+               EvalDescr evalDescr = new EvalDescr(); evalDescr.setContent( t ); in_ce.addDescr( evalDescr ); 
+            }
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_eval_ce728); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end eval_ce
+
+
+    // $ANTLR start normal_pattern
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:460:1: normal_pattern[ConditionalElementDescr in_ce, Set declarations] : LEFT_PAREN name= NAME ( field_constriant[top, declarations] )* RIGHT_PAREN ;
+    public final void normal_pattern(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        Token name=null;
+
+        
+                PatternDescr pattern = null;
+                ConditionalElementDescr top = null;
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:465:2: ( LEFT_PAREN name= NAME ( field_constriant[top, declarations] )* RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:465:4: LEFT_PAREN name= NAME ( field_constriant[top, declarations] )* RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_normal_pattern756); if (failed) return ;
+            name=(Token)input.LT(1);
+            match(input,NAME,FOLLOW_NAME_in_normal_pattern763); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              			pattern = new PatternDescr(name.getText());
+              			in_ce.addDescr( pattern );
+              			top = pattern.getConstraint();
+              			
+              		
+            }
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:472:3: ( field_constriant[top, declarations] )*
+            loop9:
+            do {
+                int alt9=2;
+                int LA9_0 = input.LA(1);
+
+                if ( (LA9_0==LEFT_PAREN) ) {
+                    alt9=1;
+                }
+
+
+                switch (alt9) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:472:3: field_constriant[top, declarations]
+            	    {
+            	    pushFollow(FOLLOW_field_constriant_in_normal_pattern769);
+            	    field_constriant(top,  declarations);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop9;
+                }
+            } while (true);
+
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_normal_pattern779); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end normal_pattern
+
+
+    // $ANTLR start bound_pattern
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:478:1: bound_pattern[ConditionalElementDescr in_ce, Set declarations] : var= VAR ASSIGN_OP LEFT_PAREN name= NAME ( field_constriant[top, declarations] )* RIGHT_PAREN ;
+    public final void bound_pattern(ConditionalElementDescr in_ce, Set declarations) throws RecognitionException {
+        Token var=null;
+        Token name=null;
+
+        
+                PatternDescr pattern = null;
+                String identifier = null;
+                ConditionalElementDescr top = null;        
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:484:2: (var= VAR ASSIGN_OP LEFT_PAREN name= NAME ( field_constriant[top, declarations] )* RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:484:4: var= VAR ASSIGN_OP LEFT_PAREN name= NAME ( field_constriant[top, declarations] )* RIGHT_PAREN
+            {
+            var=(Token)input.LT(1);
+            match(input,VAR,FOLLOW_VAR_in_bound_pattern807); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              			identifier = var.getText();
+              		
+            }
+            match(input,ASSIGN_OP,FOLLOW_ASSIGN_OP_in_bound_pattern813); if (failed) return ;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_bound_pattern815); if (failed) return ;
+            name=(Token)input.LT(1);
+            match(input,NAME,FOLLOW_NAME_in_bound_pattern819); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              			pattern = new PatternDescr(name.getText());
+              			pattern.setIdentifier( identifier );
+              			in_ce.addDescr( pattern );
+              			top = pattern.getConstraint();				    
+              		
+            }
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:494:3: ( field_constriant[top, declarations] )*
+            loop10:
+            do {
+                int alt10=2;
+                int LA10_0 = input.LA(1);
+
+                if ( (LA10_0==LEFT_PAREN) ) {
+                    alt10=1;
+                }
+
+
+                switch (alt10) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:494:3: field_constriant[top, declarations]
+            	    {
+            	    pushFollow(FOLLOW_field_constriant_in_bound_pattern828);
+            	    field_constriant(top,  declarations);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop10;
+                }
+            } while (true);
+
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_bound_pattern835); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end bound_pattern
+
+
+    // $ANTLR start field_constriant
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:498:1: field_constriant[ConditionalElementDescr base, Set declarations] : LEFT_PAREN f= NAME or_restr_connective[top, base, fc, declarations] RIGHT_PAREN ;
+    public final void field_constriant(ConditionalElementDescr base, Set declarations) throws RecognitionException {
+        Token f=null;
+
+        
+             	List list = new ArrayList();
+        		FieldBindingDescr fbd = null;
+        		FieldConstraintDescr fc = null;
+        		RestrictionConnectiveDescr top = null;		
+        		String op = "==";
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:506:2: ( LEFT_PAREN f= NAME or_restr_connective[top, base, fc, declarations] RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:507:3: LEFT_PAREN f= NAME or_restr_connective[top, base, fc, declarations] RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_field_constriant866); if (failed) return ;
+            f=(Token)input.LT(1);
+            match(input,NAME,FOLLOW_NAME_in_field_constriant870); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              			fc = new FieldConstraintDescr(f.getText());
+              			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
+              			fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
+              			base.addDescr( fc );	
+              			top = fc.getRestriction();		
+              		
+            }
+            pushFollow(FOLLOW_or_restr_connective_in_field_constriant885);
+            or_restr_connective(top,  base,  fc,  declarations);
+            _fsp--;
+            if (failed) return ;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_field_constriant891); if (failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end field_constriant
+
+
+    // $ANTLR start or_restr_connective
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:534:1: or_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ] options {backtrack=true; } : and_restr_connective[or, ceBase, fcBase, declarations] ( options {backtrack=true; } : PIPE and_restr_connective[or, ceBase, fcBase, declarations] )* ;
+    public final void or_restr_connective(RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations) throws RecognitionException {
+        
+        		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:541:2: ( and_restr_connective[or, ceBase, fcBase, declarations] ( options {backtrack=true; } : PIPE and_restr_connective[or, ceBase, fcBase, declarations] )* )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:542:3: and_restr_connective[or, ceBase, fcBase, declarations] ( options {backtrack=true; } : PIPE and_restr_connective[or, ceBase, fcBase, declarations] )*
+            {
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective930);
+            and_restr_connective(or,  ceBase,  fcBase,  declarations);
+            _fsp--;
+            if (failed) return ;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:543:3: ( options {backtrack=true; } : PIPE and_restr_connective[or, ceBase, fcBase, declarations] )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( (LA11_0==PIPE) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:545:6: PIPE and_restr_connective[or, ceBase, fcBase, declarations]
+            	    {
+            	    match(input,PIPE,FOLLOW_PIPE_in_or_restr_connective954); if (failed) return ;
+            	    if ( backtracking==0 ) {
+            	      
+            	      				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+            	      			
+            	    }
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective964);
+            	    and_restr_connective(or,  ceBase,  fcBase,  declarations);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop11;
+                }
+            } while (true);
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            
+            	        if( or.getRestrictions().size() == 1 ) {
+            	                rcBase.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
+            	        } else if ( or.getRestrictions().size() > 1 ) {
+            	        	rcBase.addRestriction( or );
+            	        }
+            	
+        }
+        return ;
+    }
+    // $ANTLR end or_restr_connective
+
+
+    // $ANTLR start and_restr_connective
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:560:1: and_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ] : restriction[and, ceBase, fcBase, declarations] ( AMPERSAND restriction[and, ceBase, fcBase, declarations] )* ;
+    public final void and_restr_connective(RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations) throws RecognitionException {
+        
+        		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:564:2: ( restriction[and, ceBase, fcBase, declarations] ( AMPERSAND restriction[and, ceBase, fcBase, declarations] )* )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:565:3: restriction[and, ceBase, fcBase, declarations] ( AMPERSAND restriction[and, ceBase, fcBase, declarations] )*
+            {
+            pushFollow(FOLLOW_restriction_in_and_restr_connective996);
+            restriction(and,  ceBase,  fcBase,  declarations);
+            _fsp--;
+            if (failed) return ;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:566:3: ( AMPERSAND restriction[and, ceBase, fcBase, declarations] )*
+            loop12:
+            do {
+                int alt12=2;
+                int LA12_0 = input.LA(1);
+
+                if ( (LA12_0==AMPERSAND) ) {
+                    alt12=1;
+                }
+
+
+                switch (alt12) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:566:5: AMPERSAND restriction[and, ceBase, fcBase, declarations]
+            	    {
+            	    match(input,AMPERSAND,FOLLOW_AMPERSAND_in_and_restr_connective1004); if (failed) return ;
+            	    pushFollow(FOLLOW_restriction_in_and_restr_connective1006);
+            	    restriction(and,  ceBase,  fcBase,  declarations);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop12;
+                }
+            } while (true);
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            
+            	        if( and.getRestrictions().size() == 1) {
+            	                rcBase.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
+            	        } else if ( and.getRestrictions().size() > 1 ) {
+            	        	rcBase.addRestriction( and );
+            	        }
+            	
+        }
+        return ;
+    }
+    // $ANTLR end and_restr_connective
+
+
+    // $ANTLR start restriction
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:585:1: restriction[RestrictionConnectiveDescr rc, ConditionalElementDescr base, FieldConstraintDescr fcBase, Set declarations ] : ( TILDE )? ( predicate_constraint[rc, op, base] | return_value_restriction[op, rc] | variable_restriction[op, rc, base, fcBase, declarations] | lc= literal_restriction ) ;
+    public final void restriction(RestrictionConnectiveDescr rc, ConditionalElementDescr base, FieldConstraintDescr fcBase, Set declarations) throws RecognitionException {
+        String lc = null;
+
+
+        
+        			String op = "==";
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:589:2: ( ( TILDE )? ( predicate_constraint[rc, op, base] | return_value_restriction[op, rc] | variable_restriction[op, rc, base, fcBase, declarations] | lc= literal_restriction ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:589:4: ( TILDE )? ( predicate_constraint[rc, op, base] | return_value_restriction[op, rc] | variable_restriction[op, rc, base, fcBase, declarations] | lc= literal_restriction )
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:589:4: ( TILDE )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==TILDE) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:589:5: TILDE
+                    {
+                    match(input,TILDE,FOLLOW_TILDE_in_restriction1039); if (failed) return ;
+                    if ( backtracking==0 ) {
+                      op = "!=";
+                    }
+
+                    }
+                    break;
+
+            }
+
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:590:3: ( predicate_constraint[rc, op, base] | return_value_restriction[op, rc] | variable_restriction[op, rc, base, fcBase, declarations] | lc= literal_restriction )
+            int alt14=4;
+            switch ( input.LA(1) ) {
+            case COLON:
+                {
+                alt14=1;
+                }
+                break;
+            case EQUALS:
+                {
+                alt14=2;
+                }
+                break;
+            case VAR:
+                {
+                alt14=3;
+                }
+                break;
+            case NAME:
+            case STRING:
+            case INT:
+            case FLOAT:
+            case BOOL:
+            case NULL:
+                {
+                alt14=4;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("590:3: ( predicate_constraint[rc, op, base] | return_value_restriction[op, rc] | variable_restriction[op, rc, base, fcBase, declarations] | lc= literal_restriction )", 14, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt14) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:590:5: predicate_constraint[rc, op, base]
+                    {
+                    pushFollow(FOLLOW_predicate_constraint_in_restriction1055);
+                    predicate_constraint(rc,  op,  base);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:591:7: return_value_restriction[op, rc]
+                    {
+                    pushFollow(FOLLOW_return_value_restriction_in_restriction1071);
+                    return_value_restriction(op,  rc);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:592:7: variable_restriction[op, rc, base, fcBase, declarations]
+                    {
+                    pushFollow(FOLLOW_variable_restriction_in_restriction1080);
+                    variable_restriction(op,  rc,  base,  fcBase,  declarations);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:593:8: lc= literal_restriction
+                    {
+                    pushFollow(FOLLOW_literal_restriction_in_restriction1092);
+                    lc=literal_restriction();
+                    _fsp--;
+                    if (failed) return ;
+                    if ( backtracking==0 ) {
+                      
+                           	    			rc.addRestriction( new LiteralRestrictionDescr(op, lc) );
+                      		      		op = "==";
+                      		        
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end restriction
+
+
+    // $ANTLR start predicate_constraint
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:600:1: predicate_constraint[RestrictionConnectiveDescr rc, String op, ConditionalElementDescr base] : COLON t= lisp_form ;
+    public final void predicate_constraint(RestrictionConnectiveDescr rc, String op, ConditionalElementDescr base) throws RecognitionException {
+        LispForm t = null;
+
+
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:601:2: ( COLON t= lisp_form )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:601:4: COLON t= lisp_form
+            {
+            match(input,COLON,FOLLOW_COLON_in_predicate_constraint1125); if (failed) return ;
+            pushFollow(FOLLOW_lisp_form_in_predicate_constraint1131);
+            t=lisp_form();
+            _fsp--;
+            if (failed) return ;
+            if ( backtracking==0 ) {
+               rc.addRestriction( new PredicateDescr( t ) ); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end predicate_constraint
+
+
+    // $ANTLR start return_value_restriction
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:607:1: return_value_restriction[String op, RestrictionConnectiveDescr rc] : EQUALS t= lisp_form ;
+    public final void return_value_restriction(String op, RestrictionConnectiveDescr rc) throws RecognitionException {
+        LispForm t = null;
+
+
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:608:2: ( EQUALS t= lisp_form )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:608:4: EQUALS t= lisp_form
+            {
+            match(input,EQUALS,FOLLOW_EQUALS_in_return_value_restriction1150); if (failed) return ;
+            pushFollow(FOLLOW_lisp_form_in_return_value_restriction1157);
+            t=lisp_form();
+            _fsp--;
+            if (failed) return ;
+            if ( backtracking==0 ) {
+              rc.addRestriction( new ReturnValueRestrictionDescr (op, t ) ); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end return_value_restriction
+
+
+    // $ANTLR start variable_restriction
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:613:1: variable_restriction[String op, RestrictionConnectiveDescr rc, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ] : VAR ;
+    public final void variable_restriction(String op, RestrictionConnectiveDescr rc, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations) throws RecognitionException {
+        Token VAR1=null;
+
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:614:2: ( VAR )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:614:4: VAR
+            {
+            VAR1=(Token)input.LT(1);
+            match(input,VAR,FOLLOW_VAR_in_variable_restriction1176); if (failed) return ;
+            if ( backtracking==0 ) {
+              
+              	        if ( declarations.contains( VAR1.getText() ) ) {
+              				rc.addRestriction( new VariableRestrictionDescr(op, VAR1.getText()) );
+              		 	} else {
+              		 		FieldBindingDescr fbd = new FieldBindingDescr();
+              		 		fbd.setIdentifier( VAR1.getText() );		
+              		 		fbd.setFieldName( fcBase.getFieldName() ); 		
+              		 		ceBase.insertBeforeLast( FieldConstraintDescr.class, fbd );
+              		 		declarations.add( VAR1.getText() );
+              		 	}
+              		
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end variable_restriction
+
+
+    // $ANTLR start literal_restriction
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:628:1: literal_restriction returns [String text] : t= literal ;
+    public final String literal_restriction() throws RecognitionException {
+        String text = null;
+
+        String t = null;
+
+
+        
+        		text = null;
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:632:2: (t= literal )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:633:6: t= literal
+            {
+            pushFollow(FOLLOW_literal_in_literal_restriction1209);
+            t=literal();
+            _fsp--;
+            if (failed) return text;
+            if ( backtracking==0 ) {
+              
+              	    	text = t;
+              	    
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return text;
+    }
+    // $ANTLR end literal_restriction
+
+
+    // $ANTLR start lisp_form
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:650:1: lisp_form returns [LispForm lispForm] : LEFT_PAREN (t= NAME | t= VAR ) (a= lisp_atom | l= lisp_form )* RIGHT_PAREN ;
+    public final LispForm lisp_form() throws RecognitionException {
+        LispForm lispForm = null;
+
+        Token t=null;
+        SExpression a = null;
+
+        LispForm l = null;
+
+
+        
+                List list = new ArrayList();
+                lispForm = null;
+            
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:655:2: ( LEFT_PAREN (t= NAME | t= VAR ) (a= lisp_atom | l= lisp_form )* RIGHT_PAREN )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:655:4: LEFT_PAREN (t= NAME | t= VAR ) (a= lisp_atom | l= lisp_form )* RIGHT_PAREN
+            {
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lisp_form1237); if (failed) return lispForm;
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:657:3: (t= NAME | t= VAR )
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==NAME) ) {
+                alt15=1;
+            }
+            else if ( (LA15_0==VAR) ) {
+                alt15=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return lispForm;}
+                NoViableAltException nvae =
+                    new NoViableAltException("657:3: (t= NAME | t= VAR )", 15, 0, input);
+
+                throw nvae;
+            }
+            switch (alt15) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:658:7: t= NAME
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,NAME,FOLLOW_NAME_in_lisp_form1254); if (failed) return lispForm;
+                    if ( backtracking==0 ) {
+                       list.add( new SymbolLispAtom( t.getText() ) ); 
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:660:7: t= VAR
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,VAR,FOLLOW_VAR_in_lisp_form1274); if (failed) return lispForm;
+                    if ( backtracking==0 ) {
+                       list.add( new VariableLispAtom( t.getText(), context ) ); 
+                    }
+
+                    }
+                    break;
+
+            }
+
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:662:3: (a= lisp_atom | l= lisp_form )*
+            loop16:
+            do {
+                int alt16=3;
+                int LA16_0 = input.LA(1);
+
+                if ( (LA16_0==NAME||LA16_0==STRING||LA16_0==INT||LA16_0==VAR||(LA16_0>=FLOAT && LA16_0<=NULL)) ) {
+                    alt16=1;
+                }
+                else if ( (LA16_0==LEFT_PAREN) ) {
+                    alt16=2;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:662:6: a= lisp_atom
+            	    {
+            	    pushFollow(FOLLOW_lisp_atom_in_lisp_form1297);
+            	    a=lisp_atom();
+            	    _fsp--;
+            	    if (failed) return lispForm;
+            	    if ( backtracking==0 ) {
+            	       list.add( a ); 
+            	    }
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:663:6: l= lisp_form
+            	    {
+            	    pushFollow(FOLLOW_lisp_form_in_lisp_form1308);
+            	    l=lisp_form();
+            	    _fsp--;
+            	    if (failed) return lispForm;
+            	    if ( backtracking==0 ) {
+            	       list.add( l ); 
+            	    }
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop16;
+                }
+            } while (true);
+
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lisp_form1335); if (failed) return lispForm;
+            if ( backtracking==0 ) {
+               lispForm = new LispForm( (org.drools.clips.SExpression[] ) list.toArray( new SExpression[ list.size () ] ) ); 
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return lispForm;
+    }
+    // $ANTLR end lisp_form
+
+
+    // $ANTLR start lisp_atom
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:669:1: lisp_atom returns [SExpression sExpression] : (t= VAR | t= STRING | t= FLOAT | t= INT | t= BOOL | t= NULL | t= NAME ) ;
+    public final SExpression lisp_atom() throws RecognitionException {
+        SExpression sExpression = null;
+
+        Token t=null;
+
+        
+        		sExpression  =  null;		
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:673:2: ( (t= VAR | t= STRING | t= FLOAT | t= INT | t= BOOL | t= NULL | t= NAME ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:674:3: (t= VAR | t= STRING | t= FLOAT | t= INT | t= BOOL | t= NULL | t= NAME )
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:674:3: (t= VAR | t= STRING | t= FLOAT | t= INT | t= BOOL | t= NULL | t= NAME )
+            int alt17=7;
+            switch ( input.LA(1) ) {
+            case VAR:
+                {
+                alt17=1;
+                }
+                break;
+            case STRING:
+                {
+                alt17=2;
+                }
+                break;
+            case FLOAT:
+                {
+                alt17=3;
+                }
+                break;
+            case INT:
+                {
+                alt17=4;
+                }
+                break;
+            case BOOL:
+                {
+                alt17=5;
+                }
+                break;
+            case NULL:
+                {
+                alt17=6;
+                }
+                break;
+            case NAME:
+                {
+                alt17=7;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return sExpression;}
+                NoViableAltException nvae =
+                    new NoViableAltException("674:3: (t= VAR | t= STRING | t= FLOAT | t= INT | t= BOOL | t= NULL | t= NAME )", 17, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt17) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:675:6: t= VAR
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,VAR,FOLLOW_VAR_in_lisp_atom1379); if (failed) return sExpression;
+                    if ( backtracking==0 ) {
+                       sExpression = new VariableLispAtom( t.getText(), context ); 
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:676:6: t= STRING
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_lisp_atom1391); if (failed) return sExpression;
+                    if ( backtracking==0 ) {
+                       sExpression = new StringLispAtom( getString( t ) ); 
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:677:6: t= FLOAT
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,FLOAT,FOLLOW_FLOAT_in_lisp_atom1413); if (failed) return sExpression;
+                    if ( backtracking==0 ) {
+                       sExpression = new FloatLispAtom( t.getText() ); 
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:678:6: t= INT
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_lisp_atom1425); if (failed) return sExpression;
+                    if ( backtracking==0 ) {
+                       sExpression = new IntLispAtom( t.getText() ); 
+                    }
+
+                    }
+                    break;
+                case 5 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:679:7: t= BOOL
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_lisp_atom1438); if (failed) return sExpression;
+                    if ( backtracking==0 ) {
+                       sExpression = new BoolLispAtom( t.getText() ); 
+                    }
+
+                    }
+                    break;
+                case 6 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:680:7: t= NULL
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,NULL,FOLLOW_NULL_in_lisp_atom1454); if (failed) return sExpression;
+                    if ( backtracking==0 ) {
+                       sExpression = new NullLispAtom( null ); 
+                    }
+
+                    }
+                    break;
+                case 7 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:681:14: t= NAME
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,NAME,FOLLOW_NAME_in_lisp_atom1480); if (failed) return sExpression;
+                    if ( backtracking==0 ) {
+                       sExpression = new SymbolLispAtom( "\"" +t.getText() + "\""); 
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return sExpression;
+    }
+    // $ANTLR end lisp_atom
+
+
+    // $ANTLR start literal
+    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:686:1: literal returns [String text] : (t= STRING | t= NAME | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
+    public final String literal() throws RecognitionException {
+        String text = null;
+
+        Token t=null;
+
+        
+        		text = null;
+        	
+        try {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:690:2: ( (t= STRING | t= NAME | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:690:4: (t= STRING | t= NAME | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            {
+            // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:690:4: (t= STRING | t= NAME | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            int alt18=6;
+            switch ( input.LA(1) ) {
+            case STRING:
+                {
+                alt18=1;
+                }
+                break;
+            case NAME:
+                {
+                alt18=2;
+                }
+                break;
+            case INT:
+                {
+                alt18=3;
+                }
+                break;
+            case FLOAT:
+                {
+                alt18=4;
+                }
+                break;
+            case BOOL:
+                {
+                alt18=5;
+                }
+                break;
+            case NULL:
+                {
+                alt18=6;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return text;}
+                NoViableAltException nvae =
+                    new NoViableAltException("690:4: (t= STRING | t= NAME | t= INT | t= FLOAT | t= BOOL | t= NULL )", 18, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt18) {
+                case 1 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:690:8: t= STRING
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,STRING,FOLLOW_STRING_in_literal1524); if (failed) return text;
+                    if ( backtracking==0 ) {
+                       text = getString( t ); 
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:691:7: t= NAME
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,NAME,FOLLOW_NAME_in_literal1537); if (failed) return text;
+                    if ( backtracking==0 ) {
+                       text = t.getText(); 
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:692:7: t= INT
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_literal1553); if (failed) return text;
+                    if ( backtracking==0 ) {
+                       text = t.getText(); 
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:693:7: t= FLOAT
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal1568); if (failed) return text;
+                    if ( backtracking==0 ) {
+                       text = t.getText(); 
+                    }
+
+                    }
+                    break;
+                case 5 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:694:7: t= BOOL
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_literal1581); if (failed) return text;
+                    if ( backtracking==0 ) {
+                       text = t.getText(); 
+                    }
+
+                    }
+                    break;
+                case 6 :
+                    // C:\\dev\\drools\\trunk\\drools-clips\\src\\main\\resources\\org\\drools\\clp\\CLPMVEL.g:695:7: t= NULL
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,NULL,FOLLOW_NULL_in_literal1595); if (failed) return text;
+                    if ( backtracking==0 ) {
+                       text = null; 
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return text;
+    }
+    // $ANTLR end literal
+
+
+ 
+
+    public static final BitSet FOLLOW_importDescr_in_eval60 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_deffunction_in_eval71 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_defrule_in_eval84 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lisp_form_in_eval96 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_importDescr123 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_44_in_importDescr125 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_NAME_in_importDescr129 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_importDescr133 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_deffunction168 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_DEFFUNCTION_in_deffunction178 = new BitSet(new long[]{0x0000000007020A20L});
+    public static final BitSet FOLLOW_lisp_atom_in_deffunction188 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_lisp_form_in_deffunction198 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_lisp_form_in_deffunction207 = new BitSet(new long[]{0x0000000000000050L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_deffunction229 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_defrule266 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_DEFRULE_in_defrule274 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_NAME_in_defrule278 = new BitSet(new long[]{0x0000000000000200L});
+    public static final BitSet FOLLOW_STRING_in_defrule290 = new BitSet(new long[]{0x0000200000020010L});
+    public static final BitSet FOLLOW_ruleAttribute_in_defrule296 = new BitSet(new long[]{0x0000200000020010L});
+    public static final BitSet FOLLOW_ce_in_defrule304 = new BitSet(new long[]{0x0000200000020010L});
+    public static final BitSet FOLLOW_45_in_defrule313 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_lisp_form_in_defrule322 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_defrule331 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_ruleAttribute348 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_DECLARE_in_ruleAttribute350 = new BitSet(new long[]{0x0000000000000050L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_ruleAttribute357 = new BitSet(new long[]{0x0000000000000400L});
+    public static final BitSet FOLLOW_salience_in_ruleAttribute361 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_ruleAttribute365 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_ruleAttribute372 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SALIENCE_in_salience402 = new BitSet(new long[]{0x0000000000000800L});
+    public static final BitSet FOLLOW_INT_in_salience406 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_ce_in_ce432 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_ce_in_ce442 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_ce_in_ce451 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_ce_in_ce460 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_ce_in_ce474 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_normal_pattern_in_ce488 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_bound_pattern_in_ce497 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_and_ce524 = new BitSet(new long[]{0x0000000000001000L});
+    public static final BitSet FOLLOW_AND_in_and_ce529 = new BitSet(new long[]{0x0000000000020010L});
+    public static final BitSet FOLLOW_ce_in_and_ce535 = new BitSet(new long[]{0x0000000000020050L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_and_ce544 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_or_ce572 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_OR_in_or_ce577 = new BitSet(new long[]{0x0000000000020010L});
+    public static final BitSet FOLLOW_ce_in_or_ce583 = new BitSet(new long[]{0x0000000000020050L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_or_ce592 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_not_ce620 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_NOT_in_not_ce625 = new BitSet(new long[]{0x0000000000020010L});
+    public static final BitSet FOLLOW_ce_in_not_ce631 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_not_ce639 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_exists_ce668 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_EXISTS_in_exists_ce673 = new BitSet(new long[]{0x0000000000020010L});
+    public static final BitSet FOLLOW_ce_in_exists_ce679 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_exists_ce687 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_eval_ce706 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_TEST_in_eval_ce711 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_lisp_form_in_eval_ce718 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_eval_ce728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_normal_pattern756 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_NAME_in_normal_pattern763 = new BitSet(new long[]{0x0000000000000050L});
+    public static final BitSet FOLLOW_field_constriant_in_normal_pattern769 = new BitSet(new long[]{0x0000000000000050L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_normal_pattern779 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VAR_in_bound_pattern807 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_ASSIGN_OP_in_bound_pattern813 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_bound_pattern815 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_NAME_in_bound_pattern819 = new BitSet(new long[]{0x0000000000000050L});
+    public static final BitSet FOLLOW_field_constriant_in_bound_pattern828 = new BitSet(new long[]{0x0000000000000050L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_bound_pattern835 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_field_constriant866 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_NAME_in_field_constriant870 = new BitSet(new long[]{0x0000000007E20A20L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constriant885 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_field_constriant891 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective930 = new BitSet(new long[]{0x0000000000080002L});
+    public static final BitSet FOLLOW_PIPE_in_or_restr_connective954 = new BitSet(new long[]{0x0000000007E20A20L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective964 = new BitSet(new long[]{0x0000000000080002L});
+    public static final BitSet FOLLOW_restriction_in_and_restr_connective996 = new BitSet(new long[]{0x0000000000100002L});
+    public static final BitSet FOLLOW_AMPERSAND_in_and_restr_connective1004 = new BitSet(new long[]{0x0000000007E20A20L});
+    public static final BitSet FOLLOW_restriction_in_and_restr_connective1006 = new BitSet(new long[]{0x0000000000100002L});
+    public static final BitSet FOLLOW_TILDE_in_restriction1039 = new BitSet(new long[]{0x0000000007C20A20L});
+    public static final BitSet FOLLOW_predicate_constraint_in_restriction1055 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_return_value_restriction_in_restriction1071 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_variable_restriction_in_restriction1080 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_restriction_in_restriction1092 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLON_in_predicate_constraint1125 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_lisp_form_in_predicate_constraint1131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUALS_in_return_value_restriction1150 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_lisp_form_in_return_value_restriction1157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VAR_in_variable_restriction1176 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_in_literal_restriction1209 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lisp_form1237 = new BitSet(new long[]{0x0000000000020020L});
+    public static final BitSet FOLLOW_NAME_in_lisp_form1254 = new BitSet(new long[]{0x0000000007020A70L});
+    public static final BitSet FOLLOW_VAR_in_lisp_form1274 = new BitSet(new long[]{0x0000000007020A70L});
+    public static final BitSet FOLLOW_lisp_atom_in_lisp_form1297 = new BitSet(new long[]{0x0000000007020A70L});
+    public static final BitSet FOLLOW_lisp_form_in_lisp_form1308 = new BitSet(new long[]{0x0000000007020A70L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lisp_form1335 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VAR_in_lisp_atom1379 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_lisp_atom1391 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_lisp_atom1413 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_lisp_atom1425 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_lisp_atom1438 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_lisp_atom1454 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NAME_in_lisp_atom1480 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal1524 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NAME_in_literal1537 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal1553 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal1568 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal1581 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_literal1595 = new BitSet(new long[]{0x0000000000000002L});
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CreateListFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CreateListFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/CreateListFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,25 @@
+package org.drools.clips;
+
+public class CreateListFunction implements Function {
+    private static final String name = "create$";
+
+    public String getName() {
+        return name;
+    }
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        SExpression[] sExpressions = lispForm.getSExpressions();
+        
+        appendable.append("[");
+        
+        for ( int i = 1, length = sExpressions.length; i < length; i++) {
+            
+            FunctionHandlers.dump( sExpressions[i], appendable, context );        
+            
+            if ( i != length -1 ) { 
+                appendable.append( "," );
+            }
+        }
+        appendable.append("]");
+    }
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/EqFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/EqFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/EqFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,16 @@
+package org.drools.clips;
+
+import org.drools.clips.functions.BaseInfixFunction;
+
+public class EqFunction  extends BaseInfixFunction  {
+    private static final String name = "eq";
+    private static final String mappedSymbol = "==";
+        
+    public String getName() {
+        return name;
+    }
+
+    public String getMappedSymbol() {
+        return mappedSymbol;
+    }
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FloatLispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FloatLispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FloatLispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,12 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class FloatLispAtom extends LispAtom {
+    
+    public FloatLispAtom(String value) {
+        super(value);
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Function.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Function.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/Function.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,9 @@
+package org.drools.clips;
+
+public interface Function {
+
+    public abstract String getName();
+
+    public abstract void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context);
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionContext.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionContext.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,15 @@
+package org.drools.clips;
+
+import java.util.Map;
+
+import org.mvel.ast.Function;
+
+public interface FunctionContext {
+
+    public abstract void addFunction(Function function);
+
+    public abstract boolean removeFunction(String functionName);
+
+    public abstract Map<String, Function> getFunctions();
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionHandlers.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionHandlers.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/FunctionHandlers.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,72 @@
+package org.drools.clips;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.lang.descr.FunctionDescr;
+
+public class FunctionHandlers {
+    public static final FunctionHandlers INSTANCE = new FunctionHandlers();
+    
+    public static FunctionHandlers getInstance() {
+        return INSTANCE;
+    }
+    
+    private Map<String, Function> map = new HashMap<String, Function>();
+    
+    private FunctionHandlers() {
+        
+    }
+    
+    public Function getFunction(String name) {
+        return this.map.get( name );
+    }
+    
+    public void registerFunction(Function function) {
+        this.map.put( function.getName(), function );
+    }
+    
+    public static void dump(SExpression sExpression, Appendable appendable, MVELBuildContext context) {              
+        if ( sExpression instanceof LispAtom ) {
+            appendable.append( ( ( LispAtom ) sExpression).getValue() );
+        } else {
+            LispForm form = (LispForm) sExpression;
+            String functionName =  ( (LispAtom) form.getSExpressions()[0]).getValue();
+            Function function = FunctionHandlers.getInstance().getFunction( functionName );
+            if ( function != null ) {
+                function.dump(form, appendable, context );                
+            } else {
+                // execute as user function
+                appendable.append( functionName + "(" );
+                for ( int i = 1, length = form.getSExpressions().length; i < length; i++ ) {
+                    dump( form.getSExpressions()[i], appendable, context );
+                    if ( i < length -1 ) {
+                        appendable.append( ", " );
+                    }
+                }
+                appendable.append( ")" );                
+            }
+        }           
+    }
+    
+    public static FunctionDescr createFunctionDescr(SExpression name, LispForm params, List<SExpression> content) {
+        FunctionDescr descr = new FunctionDescr(((LispAtom)name).getValue(), "Object" );
+        for ( SExpression sExpr  : params.getSExpressions() ) {
+            String param = ((LispAtom)sExpr).getValue().trim();
+            if ( param.charAt( 0 ) == '"' ) {
+                param = param.substring( 1 );
+            }
+            
+            if ( param.charAt( param.length()-1 ) == '"' ) {
+                param = param.substring( 0, param.length()-1 );
+            }
+            descr.addParameter(  "Object",  param );
+        }
+        
+        descr.setContent( content );
+        
+        return descr;
+    }
+    
+}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/GeneralParseException.java (from rev 18083, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/GeneralParseException.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/GeneralParseException.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/GeneralParseException.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,39 @@
+package org.drools.clips;
+
+/*
+ * 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.
+ */
+
+import org.antlr.runtime.RecognitionException;
+
+public class GeneralParseException extends RecognitionException {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 400L;
+    private String            message;
+
+    public GeneralParseException(final String message,
+                                 final int line) {
+        this.message = message;
+        this.line = line;
+    }
+
+    public String getMessage() {
+        return this.message;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/IntLispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/IntLispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/IntLispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,12 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class IntLispAtom extends LispAtom {
+    
+    public IntLispAtom(String value) {
+        super(value);
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,24 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class LispAtom implements SExpression {
+    private String value;
+
+    public LispAtom(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }    
+    
+    public String toString() {
+        return value;
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispForm.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispForm.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/LispForm.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,46 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class LispForm
+ implements SExpression {
+    private SExpression[] sExpressions;
+    
+    public LispForm(SExpression[] sExpressions) {
+        this.sExpressions = sExpressions;
+    }
+
+    public SExpression[] getSExpressions() {
+        return sExpressions;
+    }
+
+    public void setSExpressions(SExpression[] sExpressions) {
+        this.sExpressions = sExpressions;
+    }
+    
+//    public String toString() {
+//        StringBuilder builder = new StringBuilder();
+//        
+//        builder.append("(");
+//        for ( int i = 0, length = sExpressions.length; i < length; i++) {
+//            builder.append(" " + sExpressions[i] + " ");
+//        }
+//        builder.append(")");
+//        return builder.toString();
+//    }    
+    public int size() {
+        return this.sExpressions.length;
+    }
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        
+        builder.append("(");
+        for ( SExpression sExpression : sExpressions) {
+            builder.append(" " + sExpression + " ");
+        }
+        builder.append(")");
+        return builder.toString();
+    }  
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/MVELBuildContext.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/MVELBuildContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/MVELBuildContext.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,9 @@
+package org.drools.clips;
+
+import java.util.Map;
+
+public interface MVELBuildContext {
+    Map<String, String> getVariableNameMap();
+    
+    String makeValid(String var);
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/NullLispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/NullLispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/NullLispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,12 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class NullLispAtom extends LispAtom {
+    
+    public NullLispAtom(String value) {
+        super(value);
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/OldShell.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/OldShell.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/OldShell.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,282 @@
+package org.drools.clips;
+
+import java.io.PrintStream;
+import java.io.Reader;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.antlr.runtime.ANTLRReaderStream;
+import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.Lexer;
+import org.antlr.runtime.TokenStream;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.clips.valuehandlers.FunctionCaller;
+import org.drools.clips.valuehandlers.IndexedLocalVariableValue;
+import org.drools.clips.valuehandlers.TempTokenVariable;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.compiler.PackageBuilder;
+import org.drools.lang.DRLLexer;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.reteoo.ReteTuple;
+import org.drools.spi.GlobalResolver;
+
+public class OldShell
+    implements
+    ParserHandler,
+    //GlobalResolver,
+    BuildContext,
+    ExecutionContext {
+    private static final long serialVersionUID = 1L;
+    private XFunctionRegistry registry;
+
+    private ValueHandler[]   variables;
+    private Map              vars       = new HashMap();
+
+    private Map              properties = Collections.EMPTY_MAP;
+
+    private RuleBase         ruleBase;
+    private StatefulSession  session;
+
+    private Map              printoutRouters;
+    
+    private Set              imports;
+    
+    private int              index;
+
+    public OldShell() {
+        this.ruleBase = RuleBaseFactory.newRuleBase();
+        this.session = this.ruleBase.newStatefulSession();
+        //this.session.setGlobalResolver( this );
+        this.variables = new ValueHandler[50];
+        
+        this.imports = new HashSet();
+
+        this.registry = new XFunctionRegistry( BuiltinFunctions.getInstance() );
+    }
+
+    public void evalReader(Reader reader) {
+        try {
+            CLPParser parser = new CLPParser( new CommonTokenStream( new DRLLexer( new ANTLRReaderStream( reader ) ) ) );
+            evalParser( parser );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "Unable to parser Reader",
+                                        e );
+        }
+    }
+
+    public void evalString(String text) {
+        CLPParser parser = new CLPParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
+        evalParser( parser );
+    }
+
+    private void evalParser(CLPParser parser) {
+        parser.setFunctionRegistry( this.registry );
+        try {
+            parser.eval_script( this );
+        } catch ( Exception e ) {
+            throw new RuntimeException( e );
+        }
+        
+        //parser.setF
+    }
+
+    //    public void functionHandler(FunctionDescr ruleDescr) {
+    //        throw new RuntimeException( "Drools Clips does not support FunctionDescr" );
+    //    }    
+
+    //    public void functionHandler(FunctionCaller functionCaller) {
+    //        
+    //    }
+
+    public void lispFormHandler(ValueHandler valueHandler) {
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                          null,
+                                                          0 );
+        valueHandler.getValue( context );
+    }
+
+    public void ruleDescrHandler(RuleDescr ruleDescr) {        
+        String module = getModuleName( ruleDescr.getAttributes() );
+
+        PackageDescr pkg = new PackageDescr( module );
+        
+        for ( Iterator it = this.imports.iterator(); it.hasNext(); ) {
+            pkg.addImport( (ImportDescr) it.next() );
+        }
+        
+        pkg.addRule( ruleDescr );
+
+        PackageBuilder builder = new PackageBuilder();
+        builder.addPackage( pkg );                
+        
+        try {
+            this.ruleBase.addPackage( builder.getPackage() );
+        } catch ( Exception e ) {
+            e.printStackTrace();
+        }
+    }
+    
+    public void importDescrHandler(ImportDescr importDescr) {        
+        this.imports.add( importDescr );
+    }
+
+    public String getModuleName(List list) {
+        for ( Iterator it = list.iterator(); it.hasNext(); ) {
+            AttributeDescr attr = (AttributeDescr) it.next();
+            if ( attr.getName().equals( "agenda-group" ) ) {
+                return attr.getValue();
+            }
+        }
+        return "MAIN";
+    }
+
+    //    public PackageBuilder getBuilder(String namespace) {
+    //        PackageBuilder builder = (PackageBuilder) this.packageBulders.get( namespace );
+    //        if ( builder == null ) {
+    //            builder = new PackageBuilder();
+    //            this.packageBulders.put( namespace, builder );
+    //        }
+    //        return builder;
+    //        
+    //    }
+
+    private CharStream newCharStream(final String text) {
+        return new ANTLRStringStream( text );
+    }
+
+    private CLPLexer newLexer(final CharStream charStream) {
+        return new CLPLexer( charStream );
+    }
+
+    private TokenStream newTokenStream(final Lexer lexer) {
+        return new CommonTokenStream( lexer );
+    }
+
+    public void addFunction(FunctionCaller function) {
+        //function.getValue( this );
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.ExecutionContext#getLocalVariable(int)
+     */
+    public ValueHandler getLocalVariable(int index) {
+        return variables[index];
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.ExecutionContext#setLocalVariable(int, org.drools.clp.ValueHandler)
+     */
+    public void setLocalVariable(int index,
+                                 ValueHandler valueHandler) {
+        this.variables[index] = valueHandler;
+    }
+
+    public XFunctionRegistry getFunctionRegistry() {
+        return this.registry;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.BuildContext#setProperty(java.lang.Object, java.lang.Object)
+     */
+    public Object setProperty(Object key,
+                              Object value) {
+        if ( this.properties == Collections.EMPTY_MAP ) {
+            this.properties = new HashMap();
+        }
+        return this.properties.put( key,
+                                    value );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.BuildContext#getProperty(java.lang.Object)
+     */
+    public Object getProperty(Object key) {
+        return this.properties.get( key );
+    }
+
+    public Object getObject() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public InternalWorkingMemory getWorkingMemory() {
+        return ( InternalWorkingMemory) this.session;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.ExecutionContext#setPrintoutRouters(java.util.Map)
+     */
+    public void setPrintoutRouters(Map printoutRouters) {
+        this.printoutRouters = printoutRouters;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.ExecutionContext#addPrintoutRouter(java.lang.String, java.io.PrintStream)
+     */
+    public void addPrintoutRouter(String identifier,
+                                  PrintStream stream) {
+        this.printoutRouters.put( identifier,
+                                  stream );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.ExecutionContext#getPrintoutRouters(java.lang.String)
+     */
+    public PrintStream getPrintoutRouters(String identifier) {
+        return (PrintStream) this.printoutRouters.get( identifier );
+    }
+    
+    public ValueHandler createLocalVariable(String identifier) {
+        return new IndexedLocalVariableValue( identifier,
+                                              this.index++ );
+    }
+    
+    public void addVariable(VariableValueHandler var) {
+        this.vars.put( var.getIdentifier(), var);
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.clp.BuildContext#getVariableValueHandler(java.lang.String)
+     */
+    public ValueHandler getVariableValueHandler(String identifier) {
+        ValueHandler var = (ValueHandler) this.vars.get( identifier );
+        if ( var == null ) {
+            var = new TempTokenVariable( identifier );
+        }
+        return var;
+    }
+
+    public Object resolve(String identifier) {
+        ValueHandler var = (ValueHandler) this.vars.get( identifier );
+        return var.getObject( this );
+    }
+
+//    public Object resolveGlobal(String arg0) {
+//        // TODO Auto-generated method stub
+//        return null;
+//    }
+//
+//    public void setGlobal(String arg0,
+//                          Object arg1) {
+//        // TODO Auto-generated method stub
+//        
+//    }
+
+    public ReteTuple getTuple() {
+        return null;
+    }    
+
+}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/ParserHandler.java (from rev 18181, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/ParserHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/ParserHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/ParserHandler.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,16 @@
+package org.drools.clips;
+
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.RuleDescr;
+
+public interface ParserHandler {  
+    
+    public void importHandler(ImportDescr descr);
+    
+    public void functionHandler(FunctionDescr ruleDescr);
+    
+    public void ruleHandler(RuleDescr ruleDescr);
+    
+    public void lispFormHandler(LispForm lispForm);  
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/PrintRouterContext.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/PrintRouterContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/PrintRouterContext.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,16 @@
+package org.drools.clips;
+
+import java.io.PrintStream;
+import java.util.Map;
+
+import org.mvel.ast.Function;
+
+public interface PrintRouterContext {
+
+    public abstract void addRouter(String name, PrintStream out);
+
+    public abstract boolean removeRouter(String name);
+
+    public abstract Map<String, PrintStream> getRouters();
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SExpression.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SExpression.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SExpression.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,8 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public interface SExpression {
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringBuilderAppendable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringBuilderAppendable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringBuilderAppendable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips;
+
+public class StringBuilderAppendable implements Appendable {
+    public StringBuilder builder = new StringBuilder();
+    
+
+    public void append(String string) {
+        this.builder.append(  string );
+    }
+    
+    public String toString() {
+        return builder.toString();
+    }
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringLispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringLispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/StringLispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,13 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class StringLispAtom extends LispAtom {
+    
+    public StringLispAtom(String value) {
+        super("\"" + value + "\"");
+    }
+    
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SymbolLispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SymbolLispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/SymbolLispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,12 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+public class SymbolLispAtom extends LispAtom {
+    
+    public SymbolLispAtom(String value) {
+        super(value);
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableContext.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableContext.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableContext.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,7 @@
+package org.drools.clips;
+
+public interface VariableContext {
+    public void addVariable(String name, Object value);
+    
+    public void removeVariable(String name);
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableLispAtom.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableLispAtom.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/VariableLispAtom.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,24 @@
+/**
+ * 
+ */
+package org.drools.clips;
+
+import java.util.Map;
+
+public class VariableLispAtom extends LispAtom {
+    
+    public VariableLispAtom(String var, MVELBuildContext context) {
+        super(var);
+        Map<String, String> map = context.getVariableNameMap();
+        String temp = map.get( var );
+        if ( temp == null ) {
+            temp = context.makeValid( var );
+            if ( !temp.equals( var ) ) {
+                map.put( var, temp );
+            }
+        } 
+        setValue( temp );        
+    }
+
+    
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions (from rev 18083, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions)

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BaseFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/BaseFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BaseFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,33 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.BuildContext;
-import org.drools.clp.Function;
-import org.drools.clp.LispForm;
-import org.drools.clp.LispList;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.FunctionCaller;
-
-public abstract class BaseFunction
-    implements
-    Function {
-
-    public void initCallback(BuildContext context) {
-
-    }
-
-    public ValueHandler addParameterCallback(int index,
-                                             FunctionCaller caller,
-                                             ValueHandler valueHandler,
-                                             BuildContext context) {
-        caller.addParameter( valueHandler );
-        return valueHandler;
-    }
-
-    public LispList createList(int index) {
-        return new LispForm();
-    }
-
-    public String toString() {
-        return "[Function '" + getName() + "']";
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BaseInfixFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BaseInfixFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BaseInfixFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,27 @@
+package org.drools.clips.functions;
+
+import org.drools.clips.Appendable;
+import org.drools.clips.Function;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+import org.drools.clips.SExpression;
+
+public abstract class BaseInfixFunction implements Function {
+    public abstract String getMappedSymbol();
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        SExpression[] sExpressions = lispForm.getSExpressions();        
+        
+        appendable.append("(");
+        for ( int i = 1, length = sExpressions.length; i < length; i++) {
+            
+            FunctionHandlers.dump( sExpressions[i], appendable, context );          
+            
+            if ( i != length -1 ) { 
+                appendable.append( getMappedSymbol() );
+            }
+        }
+        appendable.append(")");
+    }
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BindFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/BindFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BindFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,49 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.BuildContext;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.FunctionCaller;
-import org.drools.clp.valuehandlers.TempTokenVariable;
-
-public class BindFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "bind";
-
-    public BindFunction() {
-
-    }
-
-    public ValueHandler addParameterCallback(int index,
-                                             FunctionCaller caller,
-                                             ValueHandler valueHandler,
-                                             BuildContext context) {
-        // The first index in the 'bind' function is the variable
-        // register the variable, if it doesn't already exist, will be a TempTokenVariable if it does not already exist
-        if ( index == 0 && (valueHandler instanceof TempTokenVariable) ) {
-            TempTokenVariable temp = (TempTokenVariable) valueHandler;
-            valueHandler = context.createLocalVariable( temp.getIdentifier() );
-        }
-
-        caller.addParameter( valueHandler );
-        
-        return valueHandler;
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        ValueHandler nested = args[1].getValue( context );
-        ValueHandler value = (nested != null ) ? nested : args[1];
-    
-        args[0].setValue( context,
-                          value );
-        return args[0];
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BreakFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/BreakFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/BreakFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,26 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BaseValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-
-public class BreakFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "break";
-
-    public BreakFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        return BaseValueHandler.BREAK;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/CreateListFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/CreateListFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/CreateListFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,28 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ListValueHandler;
-
-public class CreateListFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "create$";
-
-    public CreateListFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        ListValueHandler list = new ListValueHandler();
-        list.add( args,
-                  context );
-        return list;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/DivideFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/DivideFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/DivideFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,33 +0,0 @@
-package org.drools.clp.functions;
-
-import java.math.BigDecimal;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ObjectValueHandler;
-
-public class DivideFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "/";
-
-    public DivideFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        BigDecimal bdval = args[0].getBigDecimalValue( context );
-        for ( int i = 1, length = args.length; i < length; i++ ) {
-            bdval = bdval.divide( args[i].getBigDecimalValue( context ), BigDecimal.ROUND_DOWN );
-        }
-
-        return new ObjectValueHandler( bdval );   
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/EqFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,26 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-
-public class EqFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "eq";
-
-    public EqFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-
-        return new BooleanValueHandler( args[0].equals( args[1], context ) );
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrLessThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrLessThanFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrLessThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips.functions;
+
+public class EqOrLessThanFunction  extends BaseInfixFunction  {
+    private static final String name = "<=";
+    private static final String mappedSymbol = "<=";
+    
+    public String getName() {
+        return name;
+    }
+    
+    public String getMappedSymbol() {
+        return mappedSymbol;
+    }    
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrMoreThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrMoreThanFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/EqOrMoreThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips.functions;
+
+public class EqOrMoreThanFunction  extends BaseInfixFunction  {
+    private static final String name = ">=";
+    private static final String mappedSymbol = ">=";
+
+    public String getName() {
+        return name;
+    }
+    
+    public String getMappedSymbol() {
+        return mappedSymbol;
+    }    
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ForeachFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/ForeachFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ForeachFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,75 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.BuildContext;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BaseValueHandler;
-import org.drools.clp.valuehandlers.FunctionCaller;
-import org.drools.clp.valuehandlers.ListValueHandler;
-import org.drools.clp.valuehandlers.TempTokenVariable;
-
-public class ForeachFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "foreach";
-
-    public ForeachFunction() {
-
-    }
-    
-    public ValueHandler addParameterCallback(int index,
-                                             FunctionCaller caller,
-                                             ValueHandler valueHandler,
-                                             BuildContext context) {
-        // The first index in the 'foreach' function is the variable
-        // register the variable, if it doesn't already exist, will be a TempTokenVariable if it does not already exist
-        if ( index == 0 && (valueHandler instanceof TempTokenVariable) ) {
-            TempTokenVariable temp = (TempTokenVariable) valueHandler;
-            valueHandler = context.createLocalVariable( temp.getIdentifier() );
-        }
-        
-        caller.addParameter( valueHandler );
-
-        return valueHandler;
-    }    
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        ValueHandler result = null;
-        
-        BindFunction bind = new BindFunction();
-        ValueHandler[] bindArgs = new ValueHandler[2];
-        bindArgs[0] = args[0];
-  
-        // Check if the arg is a List or a variable resolving to a list
-        ValueHandler value = args[1];
-        if ( !(value instanceof ListValueHandler ) ) {
-           value = value.getValue( context ); 
-        }
-        ValueHandler[] list  = (( ListValueHandler ) value).getList();
-      
-        for (int i = 0, length1 = list.length; i < length1; i++ ) {
-            bindArgs[1] = list[i];
-            bind.execute( bindArgs, context );
-            for (int j = 2, length2 = args.length; j < length2; j++ ) {
-                // iterate for each action
-                result = args[j].getValue( context );
-                if ( result == BaseValueHandler.BREAK ) {
-                    break;
-                }
-            }
-            if ( result == BaseValueHandler.BREAK ) {
-                // need to do this twice as its a nested loop here, a single loop in the lisp
-                break;
-            }            
-        }
-
-        return result;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/GreaterThanOrEqualFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/GreaterThanOrEqualFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/GreaterThanOrEqualFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,26 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-
-public class GreaterThanOrEqualFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = ">=";
-
-    public GreaterThanOrEqualFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        return new BooleanValueHandler( args[0].getBigDecimalValue( context ).compareTo( args[1].getBigDecimalValue( context ) ) >= 0 );
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/IfFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/IfFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/IfFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,78 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.BuildContext;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.LispForm;
-import org.drools.clp.LispList;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-import org.drools.clp.valuehandlers.FunctionCaller;
-import org.drools.clp.valuehandlers.ListValueHandler;
-import org.drools.clp.valuehandlers.LongValueHandler;
-import org.drools.clp.valuehandlers.ObjectValueHandler;
-import org.drools.clp.valuehandlers.TempTokenVariable;
-
-public class IfFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "if";
-
-    public IfFunction() {
-
-    }
-    
-    public ValueHandler addParameterCallback(int index,
-                                             FunctionCaller caller,
-                                             ValueHandler valueHandler,
-                                             BuildContext context) {
-        // We need to determine and store the 'else' location so that we don't have to "seach" for it at runtime
-        // we rewrite the conditional function into a list, the first element stores the original
-        
-        if ( index == 0 ) {
-            // we are at the conditional element, rewrite it so it can hold the 'else' position
-            ListValueHandler list = new ListValueHandler();
-            list.add( valueHandler );
-            valueHandler = list;
-        } else if ( valueHandler instanceof ObjectValueHandler ) {
-            String token = valueHandler.getStringValue( null );
-            if ( token.equals( "else" ) ) {
-                ((ListValueHandler) caller.getParameters()[0]).add( new LongValueHandler( index ) );
-            }
-        }
-        
-        caller.addParameter( valueHandler );
-
-        return valueHandler;
-    }    
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        ValueHandler[] list = ((ListValueHandler)args[0]).getList();
-        
-         ValueHandler result = null;      
-        
-        int elseIndex = -1;
-        if ( list.length == 2 ) {
-            elseIndex = list[1].getIntValue( context );
-        }
-        
-        if ( list[0].getBooleanValue( context ) ) {
-            for ( int i = 2; i < elseIndex; i++ ) {
-                result = args[i].getValue( context );
-            }
-        } else if ( elseIndex != -1) {
-            for ( int i = elseIndex+1; i < args.length; i++ ) {
-                result = args[i].getValue( context );
-            }            
-        } else {
-            result = new BooleanValueHandler( false );
-        }
-        
-        return result;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/IfFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/IfFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/IfFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,51 @@
+package org.drools.clips.functions;
+
+import org.drools.clips.Appendable;
+import org.drools.clips.Function;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispAtom;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+import org.drools.clips.SExpression;
+
+public class IfFunction implements Function {
+    private static final String name = "if";       
+
+    public String getName() {
+        return name;
+    }
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        SExpression[] sExpressions = lispForm.getSExpressions();
+
+        appendable.append( "if " );
+        
+        FunctionHandlers.dump( sExpressions[1], appendable, context );
+        
+        appendable.append( "{" );
+        int i = 3;
+        for ( int length = sExpressions.length; i < length; i++ ) {
+            SExpression sExpr = ( SExpression ) sExpressions[i];
+            if ( ( sExpr instanceof LispAtom ) && "\"else\"".equals( ((LispAtom)sExpr).getValue() ) ) {
+                i++;
+                break;
+            }
+            FunctionHandlers.dump( sExpressions[i], appendable, context );
+        }  
+        appendable.append( "}" );
+        
+        
+        while ( i < sExpressions.length ) {        
+            appendable.append( " else {" );
+            for ( int length = sExpressions.length; i < length; i++ ) {
+                SExpression sExpr = ( SExpression ) sExpressions[i];
+                if ( ( sExpr instanceof LispAtom ) && "\"else\"".equals( ((LispAtom)sExpr).getValue() ) ) {
+                    i++;
+                    break;
+                }
+                FunctionHandlers.dump( sExpressions[i], appendable, context );
+            }        
+            appendable.append( "}" );  
+        }             
+    }
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/LessThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/LessThanFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/LessThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,26 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-
-public class LessThanFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "<";
-
-    public LessThanFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        return new BooleanValueHandler( args[0].getBigDecimalValue( context ).compareTo( args[1].getBigDecimalValue( context ) ) < 0 );
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/LessThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/LessThanFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/LessThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips.functions;
+
+public class LessThanFunction  extends BaseInfixFunction  {
+    private static final String name = "<";
+    private static final String mappedSymbol = "<";
+
+    public String getName() {
+        return name;
+    }
+    
+    public String getMappedSymbol() {
+        return mappedSymbol;
+    }    
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MinusFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MinusFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MinusFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,32 +0,0 @@
-package org.drools.clp.functions;
-
-import java.math.BigDecimal;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ObjectValueHandler;
-
-public class MinusFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "-";
-
-    public MinusFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        BigDecimal bdval = args[0].getBigDecimalValue( context );
-        for ( int i = 1, length = args.length; i < length; i++ ) {
-            bdval = bdval.subtract( args[i].getBigDecimalValue( context ) );
-        }
-
-        return new ObjectValueHandler( bdval );
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ModifyFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/ModifyFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ModifyFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,38 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.LispData;
-import org.drools.clp.LispList;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ListValueHandler;
-import org.mvel.PropertyAccessor;
-
-public class ModifyFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "modify";
-
-    public ModifyFunction() {
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        Object object = args[0].getObject( context );
-        for ( int i = 1, length = args.length; i < length; i++ ) {
-            ValueHandler[] list = ((ListValueHandler) args[i]).getList();
-            PropertyAccessor.set( object,
-                                  list[0].getStringValue( context ),
-                                  list[1].getObject( context ) );
-        }
-        return null;
-    }   
-
-    public LispList createList(int index) {
-        return new LispData();
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ModifyFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ModifyFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ModifyFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,37 @@
+package org.drools.clips.functions;
+
+import org.drools.clips.Appendable;
+import org.drools.clips.Function;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispAtom;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+import org.drools.clips.SExpression;
+
+public class ModifyFunction implements Function {
+    private static final String name = "modify";
+
+    public String getName() {
+        return name;
+    }
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        SExpression[] sExpressions = lispForm.getSExpressions();
+        
+        appendable.append("modify (" + ( (LispAtom) lispForm.getSExpressions()[1]).getValue() + ") {");
+        
+        for ( int i = 2, length = sExpressions.length; i < length; i++) {
+            LispForm setter = (LispForm) sExpressions[i];
+            appendable.append( ( ( LispAtom ) setter.getSExpressions()[0]).getValue() );            
+            
+            appendable.append( " = " );
+            
+            FunctionHandlers.dump( setter.getSExpressions()[1], appendable, context);  
+            
+            if ( i != length -1 ) { 
+                appendable.append( "," );
+            }
+        }
+        appendable.append("};");
+    }
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MoreThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MoreThanFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MoreThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips.functions;
+
+public class MoreThanFunction  extends BaseInfixFunction  {
+    private static final String name = ">";
+    private static final String mappedSymbol = ">";
+
+    public String getName() {
+        return name;
+    }
+    
+    public String getMappedSymbol() {
+        return mappedSymbol;
+    }    
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MultiplyFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/MultiplyFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MultiplyFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,33 +0,0 @@
-package org.drools.clp.functions;
-
-import java.math.BigDecimal;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ObjectValueHandler;
-
-public class MultiplyFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "*";
-
-    public MultiplyFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {        
-        BigDecimal bdval = args[0].getBigDecimalValue( context );
-        for ( int i = 1, length = args.length; i < length; i++ ) {
-            bdval = bdval.multiply( args[i].getBigDecimalValue( context ) );
-        }
-
-        return new ObjectValueHandler( bdval );        
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MultiplyFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MultiplyFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/MultiplyFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips.functions;
+
+public class MultiplyFunction  extends BaseInfixFunction  {
+    private static final String name = "*";
+    private static final String mappedSymbol = "*";
+
+    public String getName() {
+        return name;
+    }
+    
+    public String getMappedSymbol() {
+        return mappedSymbol;
+    }    
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PlusFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PlusFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PlusFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,32 +0,0 @@
-package org.drools.clp.functions;
-
-import java.math.BigDecimal;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ObjectValueHandler;
-
-public class PlusFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "+";
-
-    public PlusFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        BigDecimal bdval = args[0].getBigDecimalValue( context );
-        for ( int i = 1, length = args.length; i < length; i++ ) {
-            bdval = bdval.add( args[i].getBigDecimalValue( context ) );
-        }
-
-        return new ObjectValueHandler( bdval );
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PlusFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PlusFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PlusFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips.functions;
+
+public class PlusFunction  extends BaseInfixFunction {
+    private static final String name = "+";
+    private static final String mappedSymbol = "+";
+
+    public String getName() {
+        return name;
+    }  
+    
+    public String getMappedSymbol() {
+        return mappedSymbol;
+    }    
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrintoutFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PrintoutFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrintoutFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,46 +0,0 @@
-package org.drools.clp.functions;
-
-import java.io.PrintStream;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.ListValueHandler;
-
-public class PrintoutFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "printout";
-
-    public PrintoutFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        PrintStream route = context.getPrintoutRouters( args[0].getStringValue( context ) );        
-        
-        if ( route == null ) {
-            throw new RuntimeException("printout route '" + args[0].getStringValue( context ) + "' does not exists" );
-        }        
-        
-        for ( int i = 1; i < args.length; i++ ) {
-            ValueHandler value = args[i].getValue( context );
-            if ( value != null && value.getValueType( context ) == SimpleValueType.LIST ) {
-                ValueHandler[] list = ((ListValueHandler)value).getList();
-                for ( int j = 0; j < list.length; j++ ) {
-                    route.print( list[j].getStringValue( context ) );
-                }
-            } else {
-                route.print( args[i].getStringValue( context ) );
-            }
-        }
-        
-        return null;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrintoutFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrintoutFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrintoutFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,33 @@
+package org.drools.clips.functions;
+
+import org.drools.clips.Appendable;
+import org.drools.clips.Function;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispAtom;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+import org.drools.clips.SExpression;
+
+public class PrintoutFunction implements Function {
+    private static final String name = "printout";
+    
+    private static final int route = 1;
+
+    public String getName() {
+        return name;
+    }
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        SExpression[] sExpressions = lispForm.getSExpressions();
+        appendable.append( "printrouters.get(" + ( ( LispAtom ) lispForm.getSExpressions()[route]).getValue()+ ").print(" );
+        //appendable.append( "routers.get(" + ( ( LispAtom2 ) lispForm.getSExpressions()[route]).getValue()+ ").print(" );
+        for ( int i = 2, length = sExpressions.length; i < length; i++) {            
+            FunctionHandlers.dump( sExpressions[i], appendable, context );         
+            
+            if ( i != length -1 ) { 
+                appendable.append( "+" );
+            }
+        }        
+        appendable.append( ");" );
+    }
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrognFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/PrognFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrognFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,30 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-
-public class PrognFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "progn";
-
-    public PrognFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-
-        ValueHandler result = null;
-        for ( int i = 0, length = args.length; i < length; i++ ) {
-            result = args[i].getValue( context );
-        }
-
-        return result;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrognFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrognFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/PrognFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,40 @@
+package org.drools.clips.functions;
+
+import org.drools.clips.Appendable;
+import org.drools.clips.Function;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispAtom;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+import org.drools.clips.SExpression;
+
+public class PrognFunction implements Function {
+    private static final String name = "progn";       
+
+    public String getName() {
+        return name;
+    }
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        Function createList = FunctionHandlers.getInstance().getFunction( "create$" );
+        
+        SExpression[] sExpressions = lispForm.getSExpressions();
+        
+        LispForm listSpec = (LispForm) sExpressions[1];
+        
+        String var = ( ( LispAtom ) listSpec.getSExpressions()[0] ).getValue();        
+        
+        appendable.append( "foreach( " + var + " : " );        
+        
+        createList.dump( (LispForm) listSpec.getSExpressions()[1], appendable, context );
+        
+        appendable.append( " ) {" );
+        
+        for ( int i = 2, length = sExpressions.length; i < length; i++ ) {
+            FunctionHandlers.dump( sExpressions[i], appendable, context );
+        }          
+        
+        appendable.append( "}" );
+                        
+    }
+}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ReturnFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ReturnFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/ReturnFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,21 @@
+package org.drools.clips.functions;
+
+import org.drools.clips.Appendable;
+import org.drools.clips.Function;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+
+public class ReturnFunction implements Function {
+    private static final String name = "return";
+
+    public String getName() {
+        return name;
+    }
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        appendable.append( "return " );
+        FunctionHandlers.dump( lispForm.getSExpressions()[1], appendable, context );
+        appendable.append( ";\n" );
+    }
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchCaseFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/SwitchCaseFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchCaseFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,61 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.BuildContext;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.LispForm;
-import org.drools.clp.LispList;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BaseValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-import org.drools.clp.valuehandlers.FunctionCaller;
-import org.drools.clp.valuehandlers.TempTokenVariable;
-
-public class SwitchCaseFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "case";
-
-    public SwitchCaseFunction() {
-
-    }
-
-    public ValueHandler addParameterCallback(int index,
-                                             FunctionCaller caller,
-                                             ValueHandler valueHandler,
-                                             BuildContext context) {
-        if ( index == 0 ) {
-            // swap the element for an equality check        
-            FunctionCaller switchCaller  = new FunctionCaller( context.getFunctionRegistry().getFunction( "eq" ) );
-            switchCaller.addParameter( (ValueHandler) context.getProperty( "switch-variable"  ) );
-            switchCaller.addParameter( valueHandler );
-            valueHandler = switchCaller;
-        }
-        
-        caller.addParameter( valueHandler );
-        
-        return valueHandler;
-    }      
-    
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        ValueHandler result = null;
-        
-        if ( args[0].getBooleanValue( context ) ) {
-            for (int i = 2, length = args.length; i < length; i++ ) {
-                result = args[i].getValue( context );   
-                if ( result == BaseValueHandler.BREAK ) {
-                    break;
-                }
-            }
-        } else {
-            result = new BooleanValueHandler( false );
-        }
-        
-        return result;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchDefaultFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/SwitchDefaultFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchDefaultFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,30 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionBuildContext;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.LispForm;
-import org.drools.clp.LispList;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-import org.drools.clp.valuehandlers.FunctionCaller;
-import org.drools.clp.valuehandlers.TempTokenVariable;
-
-public class SwitchDefaultFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "default";
-
-    public SwitchDefaultFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        return args[0].getValue( context );
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/SwitchFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,63 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.BuildContext;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.LispForm;
-import org.drools.clp.LispList;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BaseValueHandler;
-import org.drools.clp.valuehandlers.BooleanValueHandler;
-import org.drools.clp.valuehandlers.FunctionCaller;
-import org.drools.clp.valuehandlers.IndexedLocalVariableValue;
-import org.drools.clp.valuehandlers.TempTokenVariable;
-
-public class SwitchFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "switch";
-
-    public SwitchFunction() {
-
-    }
-    
-    public ValueHandler addParameterCallback(int index,
-                                             FunctionCaller caller,
-                                             ValueHandler valueHandler,
-                                             BuildContext context) {
-        if ( index == 0 ) {
-            if ( !(valueHandler instanceof IndexedLocalVariableValue ) ) {
-                // this should already be bound as a local variable
-                throw new RuntimeException( "The variable must already have been declared to use it in a switch statement" );
-            } else {
-                context.setProperty( "switch-variable", valueHandler );
-            }
-        }
-        
-        caller.addParameter( valueHandler );
-
-        return valueHandler;
-    }     
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {        
-        ValueHandler result = null;
-        
-        // binds the variable for the case function to use
-        args[0].getValue( context );
-        
-        // now its bound we can execute each case statement in turn
-        for (int i = 1, length = args.length; i < length; i++ ) {
-            result = args[i].getValue( context );   
-            if ( result == BaseValueHandler.BREAK ) {
-                break;
-            }
-        }   
-        
-        return result;
-    }
-
-    public String getName() {
-        return name;
-    }
-}

Added: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchFunction.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/SwitchFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,72 @@
+package org.drools.clips.functions;
+
+import org.drools.clips.Appendable;
+import org.drools.clips.Function;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispAtom;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+import org.drools.clips.SExpression;
+
+public class SwitchFunction implements Function {     
+    private static String name = "switch";
+    
+    public String getName() {
+        return name;
+    }
+    
+    public void dump(LispForm lispForm, Appendable appendable, MVELBuildContext context) {
+        SExpression[] sExpressions = lispForm.getSExpressions();
+
+        appendable.append( "switchvar = " );
+        LispForm expr = ( LispForm ) sExpressions[1];
+        if ( expr.getSExpressions().length > 1 ) {
+            FunctionHandlers.dump( expr, appendable, context );
+        } else {
+            FunctionHandlers.dump( expr.getSExpressions()[0], appendable, context );
+        }
+        appendable.append( ";\n" );
+        
+        LispForm caseForm = ( LispForm ) sExpressions[2];
+        
+        appendable.append( "if ( switchvar == " );            
+        
+        FunctionHandlers.dump( caseForm.getSExpressions()[1], appendable, context );            
+        appendable.append( ") {" );
+        for ( int j = 3, jlength = caseForm.getSExpressions().length; j < jlength; j++ ) {
+            FunctionHandlers.dump( caseForm.getSExpressions()[j], appendable, context );
+        }        
+        appendable.append( "}" );
+        
+        for ( int i = 3, length = sExpressions.length-1; i < length; i++ ) {
+            caseForm = ( LispForm ) sExpressions[i];
+            
+            appendable.append( " else if ( switchvar == " );            
+            FunctionHandlers.dump( caseForm.getSExpressions()[1], appendable, context );            
+            appendable.append( ") {" );
+            
+            for ( int j = 3, jlength = caseForm.getSExpressions().length; j < jlength; j++ ) {
+                FunctionHandlers.dump( caseForm.getSExpressions()[j], appendable, context );
+            }
+            appendable.append( "}" );
+        }
+        
+        caseForm = ( LispForm ) sExpressions[ sExpressions.length-1 ];
+        if ( "case".equals( ((LispAtom)caseForm.getSExpressions()[0]).getValue() ) ) {
+            appendable.append( " else if ( switchvar == " );            
+            FunctionHandlers.dump( caseForm.getSExpressions()[1], appendable, context );            
+            appendable.append( ") {" );
+            for ( int j = 3, length = caseForm.getSExpressions().length; j < length; j++ ) {
+                FunctionHandlers.dump( caseForm.getSExpressions()[j], appendable, context );
+            }        
+            appendable.append( "}" );            
+        } else {
+            appendable.append( " else { " ); 
+            for ( int j = 1, length = caseForm.getSExpressions().length; j < length; j++ ) {
+                FunctionHandlers.dump( caseForm.getSExpressions()[j], appendable, context );
+            }        
+            appendable.append( "}" );            
+        }        
+    }
+    
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/WhileFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/functions/WhileFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/functions/WhileFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,44 +0,0 @@
-package org.drools.clp.functions;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.valuehandlers.BaseValueHandler;
-
-public class WhileFunction extends BaseFunction
-    implements
-    Function {
-    private static final String name = "while";
-
-    public WhileFunction() {
-
-    }
-
-    public ValueHandler execute(ValueHandler[] args,
-                                ExecutionContext context) {
-        ValueHandler result = null;
-
-        ValueHandler doLoop = args[0];
-        
-        while ( doLoop.getBooleanValue( context ) ) {
-            for (int i = 2, length = args.length; i < length; i++ ) {
-                // iterate for each action                
-                result = args[i].getValue( context );
-                if ( result == BaseValueHandler.BREAK ) {
-                    break;
-                }                  
-            }
-            if ( result == BaseValueHandler.BREAK ) {
-                // need to do this twice as its a nested loop here, a single loop in the lisp
-                break;
-            }              
-        }
-
-        return result;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers (from rev 18083, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers)

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/BaseValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/BaseValueHandler.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/BaseValueHandler.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,76 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-
-public abstract class BaseValueHandler implements ValueHandler {        
-    public static final ObjectValueHandler NULL = new ObjectValueHandler( "null" );    
-    public static final ObjectValueHandler BREAK = new ObjectValueHandler( "break" );    
-    
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        Object object = getObject( context );        
-        if ( object instanceof BigDecimal ) {
-            return (BigDecimal) object;
-        } else {
-            return new BigDecimal( object.toString() );
-        }
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        Object object = getObject( context );
-        if ( object instanceof BigInteger ) {
-            return (BigInteger) object;
-        } else {
-            return new BigInteger( object.toString() );
-        }
-    }
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        return ((Boolean) getObject(context)).booleanValue();
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        return ((Double) getObject(context)).doubleValue();
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        return ((Float) getObject(context)).floatValue();
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        return ((Integer) getObject(context)).intValue();
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        return ((Long) getObject(context)).longValue();
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        return ((Short) getObject(context)).shortValue();
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        return getObject(context).toString();
-    }      
-    
-    public String toString() {
-        String name = getClass().getName();
-        name = name.substring( name.lastIndexOf( "." ) + 1 );
-        try {
-            return "[" + name + " value = '" + getObject(null) + "']";
-        } catch (Exception e) {
-            return "[" + name + " value = N/A]";
-        }
-    }
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        Object o1 = getObject(context);
-        Object o2 = other.getObject( context );
-        return o1.equals(o2);
-    }
-    
-    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/BooleanValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/BooleanValueHandler.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/BooleanValueHandler.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,96 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-
-public class BooleanValueHandler implements ValueHandler {
-    private boolean booleanValue;    
-    
-    public BooleanValueHandler(String booleanValue) {
-        this.booleanValue = Boolean.valueOf( booleanValue ).booleanValue();
-    } 
-    
-    public BooleanValueHandler(boolean booleanValue) {
-        this.booleanValue = booleanValue;
-    } 
-
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }    
-    
-    public int getValueType(ExecutionContext context) {
-        return SimpleValueType.BOOLEAN;
-    }
-
-    public void setValue(ExecutionContext context, Object value) {
-        throw new RuntimeException( "LiteralValues cannot be set");
-    }
-    
-    public Object getObject(ExecutionContext context) {
-        return new Boolean( this.booleanValue );
-    }
-    
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "Boolean format exception, cannot be cast to BitDecimal" );
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "Boolean format exception, cannot be cast to BitInteger" );
-    }
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        return this.booleanValue;
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "Boolean format exception, cannot be cast to double" );
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "Boolean format exception, cannot be cast to float" );
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "Boolean format exception, cannot be cast to int" );
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "Boolean format exception, cannot be cast to long" );
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "Boolean format exception, cannot be cast to short" ); 
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        return Boolean.toString( this.booleanValue );
-    }      
-    
-    public String toString() {
-        return "[BooleanLiteralValue value='" + this.booleanValue + "']";
-    }
-
-    public int hashCode() {
-        final int PRIME = 31;
-        int result = 1;
-        result = PRIME * result + (booleanValue ? 1231 : 1237);
-        return result;
-    }
-
-    public boolean equals(Object obj) {
-        if ( this == obj ) return true;
-        if ( obj == null ) return false;
-        if ( !(obj instanceof BooleanValueHandler) ) return false;
-        final BooleanValueHandler other = (BooleanValueHandler) obj;
-        if ( booleanValue != other.booleanValue ) return false;
-        return true;
-    }
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        return getBooleanValue( context ) == other.getBooleanValue( context );
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPGlobalVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/CLPGlobalVariable.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPGlobalVariable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,55 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import org.drools.clp.CLPFactory;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.VariableValueHandler;
-
-
-public class CLPGlobalVariable extends BaseValueHandler implements VariableValueHandler  {
-    
-    private String identifier;
-    private Class knownType;
-    private int simpleType;
-    private CLPFactory factory;
-       
-    public CLPGlobalVariable(String identifier,
-                                    Class knownType,
-                                    int simpleType,
-                                    CLPFactory factory ) {
-        this.identifier = identifier;
-        this.factory =  factory;
-        this.knownType = knownType;
-    }    
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }    
-    
-    public String getIdentifier() {
-        return this.identifier;
-    }
-    
-    public int getValueType(ExecutionContext context) {
-        return this.simpleType;
-    }    
-
-    public Class getKnownType() {
-        return this.knownType;
-    }
-
-    public Object getObject(ExecutionContext context) {
-        return this.factory.getValue( this.identifier );
-    }
-
-    public void setValue(ExecutionContext context, Object value) {
-        throw new UnsupportedOperationException( "External Variable identifer='" + getIdentifier() + "' type='" + getKnownType() + "' is final, it cannot be set" );
-    }       
-    
-    public String toString() {
-        String name = getClass().getName();
-        name = name.substring( name.lastIndexOf( "." ) + 1 );
-        return "[" + name + " identifier = '" + getIdentifier()  + "']";
-    }        
-
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPLocalDeclarationVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/CLPLocalDeclarationVariable.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPLocalDeclarationVariable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,103 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.VariableValueHandler;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.rule.Declaration;
-
-public class CLPLocalDeclarationVariable implements VariableValueHandler {
-    
-    private Declaration declaration;
-	private InternalWorkingMemory workingmemory;
-       
-    public CLPLocalDeclarationVariable(Declaration declaration, InternalWorkingMemory workingMemory) {
-    	this.workingmemory = workingMemory;
-        this.declaration = declaration;
-    }  
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }    
-    
-    public String getIdentifier() {
-        return this.declaration.getIdentifier();
-    }
-
-    public Class getKnownType() {
-        return declaration.getExtractor().getExtractToClass();
-    }
-    
-    public int getValueType(ExecutionContext context) {
-        return this.declaration.getValueType().getSimpleType(); 
-    }
-
-    public void setValue(ExecutionContext context,
-                         Object object) {
-        throw new UnsupportedOperationException( "External Variable identifer='" + getIdentifier() + "' type='" + getKnownType() + "' is final, it cannot be set" );
-    }
-    
-    public Object getObject(ExecutionContext context) {
-        return declaration.getValue(workingmemory, context.getObject());
-    }
-    
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        Object object = declaration.getValue(workingmemory, context.getObject() );
-        if ( object instanceof BigDecimal ) {
-            return (BigDecimal) object;
-        } else {
-            return new BigDecimal( object.toString() );
-        }
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        Object object = declaration.getValue(workingmemory, context.getObject() );
-        if ( object instanceof BigInteger ) {
-            return (BigInteger) object;
-        } else {
-            return new BigInteger( object.toString() );
-        }
-    }    
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        return declaration.getBooleanValue(workingmemory, context.getObject() );
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        return declaration.getDoubleValue(workingmemory, context.getObject() );
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        return declaration.getFloatValue( workingmemory,context.getObject() );
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        return declaration.getIntValue( workingmemory, context.getObject() );
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        return declaration.getLongValue(workingmemory, context.getObject() );
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        return declaration.getShortValue(workingmemory, context.getObject() );
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        return (String) declaration.getValue(workingmemory, context.getObject() );
-    }
-    
-    public String toString() {
-        String name = getClass().getName();
-        name = name.substring( name.lastIndexOf( "." ) + 1 );
-        return "[" + name + " identifier = '" + getIdentifier()  + "']";
-    }  
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        // FIXME
-        return false;
-    }    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPPreviousDeclarationVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/CLPPreviousDeclarationVariable.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/CLPPreviousDeclarationVariable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,115 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.VariableValueHandler;
-import org.drools.common.InternalFactHandle;
-import org.drools.common.InternalWorkingMemory;
-import org.drools.rule.Declaration;
-
-public class CLPPreviousDeclarationVariable implements VariableValueHandler {
-
-    private Declaration declaration;
-	private InternalWorkingMemory workingmemory;
-    
-    public CLPPreviousDeclarationVariable(Declaration declaration, InternalWorkingMemory workingmemory) {
-        this.declaration = declaration;
-        this.workingmemory = workingmemory;
-    }
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }    
-
-    public String getIdentifier() {
-        return this.declaration.getIdentifier();
-    }
-
-    public Class getKnownType() {
-        return declaration.getExtractor().getExtractToClass();
-    }
-    
-    public int getValueType(ExecutionContext context) {
-        return this.declaration.getValueType().getSimpleType(); 
-    }
-
-    public void setValue(ExecutionContext context,
-                         Object object) {
-        throw new UnsupportedOperationException( "External Variable identifer='" + getIdentifier() + "' type='" + getKnownType() + "' is final, it cannot be set" );
-    }
-    
-    public Object getObject(ExecutionContext context) {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return declaration.getValue( workingmemory, handle.getObject() );
-    }
-    
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        Object object = declaration.getValue(workingmemory,  handle.getObject() );
-        if ( object instanceof BigDecimal ) {
-            return (BigDecimal) object;
-        } else {
-            return new BigDecimal( object.toString() );
-        }
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        Object object = declaration.getValue(workingmemory,  handle.getObject() );
-        if ( object instanceof BigInteger ) {
-            return (BigInteger) object;
-        } else {
-            return new BigInteger( object.toString() );
-        }
-    }    
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return declaration.getBooleanValue(workingmemory, handle.getObject() );
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return declaration.getDoubleValue(workingmemory, handle.getObject() );
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return declaration.getFloatValue(workingmemory, handle.getObject() );
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return declaration.getIntValue(workingmemory, handle.getObject() );
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return declaration.getLongValue(workingmemory, handle.getObject() );
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return declaration.getShortValue(workingmemory, handle.getObject() );
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        InternalFactHandle handle = context.getTuple().get( this.declaration );
-        return (String) declaration.getValue(workingmemory, handle.getObject() );
-    }
-    
-    public String toString() {
-        String name = getClass().getName();
-        name = name.substring( name.lastIndexOf( "." ) + 1 );
-        return "[" + name + " identifier = '" + getIdentifier()  + "']";
-    }    
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        // FIXME
-        return false;
-    }        
-        
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/DoubleValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/DoubleValueHandler.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/DoubleValueHandler.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,100 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-
-public class DoubleValueHandler implements ValueHandler {
-    private double doubleValue;
-    
-    public DoubleValueHandler(String doubleValue) {
-        this.doubleValue = Double.valueOf( doubleValue ).doubleValue();
-    }
-    
-    public DoubleValueHandler(double doubleValue) {
-        this.doubleValue = doubleValue;
-    }   
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }    
-    
-    public int getValueType(ExecutionContext context) {
-        return SimpleValueType.DECIMAL;
-    }
-
-    public void setValue(ExecutionContext context, Object value) {
-        throw new RuntimeException( "LiteralValues cannot be set");
-    }
-    
-    public Object getObject(ExecutionContext context) {
-        return new Double( this.doubleValue );
-    }
-    
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        return new BigDecimal( this.doubleValue );
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        return BigInteger.valueOf( (long) this.doubleValue );
-    }
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        return ( this.doubleValue == 0 ) ? false : true;
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        return this.doubleValue;
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        return (float) this.doubleValue;
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        return (int) this.doubleValue;
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        return (long) this.doubleValue;
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        return (short) this.doubleValue;
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        return Double.toString( this.doubleValue );
-    }
-
-    public String toString() {
-        return "[DoubleLiteralValue value='" + this.doubleValue + "']";
-    }    
-    
-    public int hashCode() {
-        final int PRIME = 31;
-        int result = 1;
-        long temp;
-        temp = Double.doubleToLongBits( doubleValue );
-        result = PRIME * result + (int) (temp ^ (temp >>> 32));
-        return result;
-    }
-
-    public boolean equals(Object obj) {
-        if ( this == obj ) return true;
-        if ( obj == null ) return false;
-        if ( !(obj instanceof DoubleValueHandler) ) return false;
-        final DoubleValueHandler other = (DoubleValueHandler) obj;
-        if ( Double.doubleToLongBits( doubleValue ) != Double.doubleToLongBits( other.doubleValue ) ) return false;
-        return true;
-    }
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        return getDoubleValue( context ) == other.getDoubleValue( context );        
-    }     
-    
-    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/FunctionCaller.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/FunctionCaller.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/FunctionCaller.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,141 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.Function;
-import org.drools.clp.LispList;
-import org.drools.clp.ValueHandler;
-
-public class FunctionCaller
-    implements
-    ValueHandler {
-    private Function         function;
-
-    protected ValueHandler[] parameters;
-
-    public FunctionCaller() {
-        this( null );
-    }
-
-    public FunctionCaller(Function function) {
-        this.function = function;
-    }
-
-    public ValueHandler getValue(ExecutionContext context) {
-        return this.function.execute( this.parameters,
-                                      context );
-    }
-
-    public int getValueType(ExecutionContext context) {
-        return SimpleValueType.FUNCTION;
-    }
-
-    public void setFunction(Function function) {
-        this.function = function;
-    }
-
-    public Function getFunction() {
-        return this.function;
-    }
-
-    public String getName() {
-        return (this.function == null) ? null : this.function.getName();
-    }
-
-    public LispList createList(int index) {
-        return this.function.createList( index );
-    }
-
-    public void addParameter(ValueHandler valueHandler) {
-        if ( this.parameters == null ) {
-            this.parameters = new ValueHandler[]{valueHandler};
-        } else {
-            ValueHandler[] temp = new ValueHandler[parameters.length + 1];
-            System.arraycopy( this.parameters,
-                              0,
-                              temp,
-                              0,
-                              this.parameters.length );
-            temp[temp.length - 1] = valueHandler;
-            this.parameters = temp;
-        }
-    }
-
-    public ValueHandler[] getParameters() {
-        return this.parameters;
-    }
-
-    public Object getObject(ExecutionContext context) {
-        return getValue( context ).getObject( context );
-    }
-
-    public void setValue(ExecutionContext context,
-                         Object object) {
-        throw new RuntimeException( "You cannot set the value on a Function" );
-    }
-
-    public void replaceTempTokens(Map variables) {
-        if ( this.parameters == null ) {
-            return;
-        }
-        for ( int i = 0, length = this.parameters.length; i < length; i++ ) {
-            if ( this.parameters[i] instanceof TempTokenVariable ) {
-                TempTokenVariable var = (TempTokenVariable) this.parameters[i];
-                this.parameters[i] = (ValueHandler) variables.get( var.getIdentifier() );
-            } else if ( this.parameters[i] instanceof FunctionCaller ) {
-                ((FunctionCaller) parameters[i]).replaceTempTokens( variables );
-            } else if ( this.parameters[i] instanceof ListValueHandler ) {
-                ((ListValueHandler) parameters[i]).replaceTempTokens( variables );
-            }
-        }
-    }
-
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        return getValue( context ).getBigDecimalValue( context );
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        return getValue( context ).getBigIntegerValue( context );
-    }
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        return getValue( context ).getBooleanValue( context );
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        return getValue( context ).getDoubleValue( context );
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        return getValue( context ).getFloatValue( context );
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        return getValue( context ).getIntValue( context );
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        return getValue( context ).getLongValue( context );
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        return getValue( context ).getShortValue( context );
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        return getValue( context ).getStringValue( context );
-    }
-
-    public String toString() {
-        return "[FunctionCaller " + this.function + "]";
-    }
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        return this == other;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/IndexedLocalVariableValue.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/IndexedLocalVariableValue.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/IndexedLocalVariableValue.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,64 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.VariableValueHandler;
-
-
-public class IndexedLocalVariableValue extends BaseValueHandler implements VariableValueHandler {
-    private static final long serialVersionUID = 400L;    
-
-    /** The identifier for the variable. */
-    private final String      identifier;    
-    private final int         index;
-    
-    /**
-     * Construct.
-     * 
-     * @param identifier
-     *            The name of the variable.
-     */
-    public IndexedLocalVariableValue(final String identifier, final int index) {
-        this.identifier = identifier;
-        this.index = index;
-    }
-        
-    /**
-     * Retrieve the variable's identifier.
-     * 
-     * @return The variable's identifier.
-     */
-    public String getIdentifier() {
-        return this.identifier;
-    }
-    
-    public int getValueType(ExecutionContext context) {
-        return context.getLocalVariable( this.index ).getValueType( context );
-    }
-    
-    public Object getObject(ExecutionContext context) {        
-        return getValue(context).getObject( context );
-    }        
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        ValueHandler valueHandler = context.getLocalVariable( this.index );
-        ValueHandler nested; 
-        while ( (nested = valueHandler.getValue( context ) ) != valueHandler ) {
-            valueHandler = nested;
-        }
-        return valueHandler;
-    }
-
-    public void setValue(ExecutionContext context,
-                         Object object) {
-        context.setLocalVariable( this.index, (ValueHandler) object );        
-    }        
-    
-    public String toString() {
-        String name = getClass().getName();
-        name = name.substring( name.lastIndexOf( "." ) + 1 );
-        return "[" + name + " identifier = '" + getIdentifier()  + "']";
-    }    
-        
-}
-

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/ListValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/ListValueHandler.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/ListValueHandler.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,163 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Map;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-
-public class ListValueHandler
-    implements
-    ValueHandler {
-    private ValueHandler[] list;
-
-    public ListValueHandler() {
-
-    }
-
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }
-
-    public int getValueType(ExecutionContext context) {
-        return SimpleValueType.LIST;
-    }
-
-    public void add(ListValueHandler list,
-                    ExecutionContext context) {
-        add( list.getList(),
-             context );
-    }
-
-    public void add(ValueHandler[] valueHandlers,
-                    ExecutionContext context) {
-        for ( int i = 0, length = valueHandlers.length; i < length; i++ ) {
-            add( valueHandlers[i],
-                 context );
-        }
-    }
-
-    public void add(ValueHandler valueHandler,
-                    ExecutionContext context) {
-        ValueHandler nested = valueHandler.getValue( context );
-        valueHandler = (nested != null ) ? nested : valueHandler;
-        if ( valueHandler instanceof ListValueHandler ) {
-            add( (ListValueHandler) valueHandler,
-                 context );
-        } else {
-            add( valueHandler );
-        }
-    }
-
-    public void add(ValueHandler valueHandler) {
-        if ( this.list == null ) {
-            this.list = new ValueHandler[]{valueHandler};
-        } else {
-            ValueHandler[] temp = new ValueHandler[this.list.length + 1];
-            System.arraycopy( this.list,
-                              0,
-                              temp,
-                              0,
-                              this.list.length );
-            temp[temp.length - 1] = valueHandler;
-            this.list = temp;
-        }
-    }
-
-    public ValueHandler[] getList() {
-        return this.list;
-    }
-
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "ListValueHandler cannot return BigDecimal" );
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "ListValueHandler cannot return BigInteger" );
-    }
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        throw new RuntimeException( "ListValueHandler cannot return Boolean" );
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "ListValueHandler cannot return Double" );
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "ListValueHandler cannot return Float" );
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "ListValueHandler cannot return Int" );
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "ListValueHandler cannot return Long" );
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        throw new RuntimeException( "ListValueHandler cannot return Short" );
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        throw new RuntimeException( "ListValueHandler cannot return String" );
-    }
-
-    public Object getObject(ExecutionContext context) {
-        Object[] objects = new Object[this.list.length];
-        for ( int i = 0, length = this.list.length; i < length; i++ ) {
-            objects[i] = this.list[i].getObject( context );
-        }
-
-        return objects;
-    }
-
-    public void setValue(ExecutionContext context,
-                         Object object) {
-        throw new RuntimeException( "cannot set value on ListValueHandler" );
-    }
-
-    public void replaceTempTokens(Map variables) {
-        for ( int i = 0, length = this.list.length; i < length; i++ ) {
-            if ( this.list[i] instanceof TempTokenVariable ) {
-                TempTokenVariable var = (TempTokenVariable) this.list[i];
-                this.list[i] = (ValueHandler) variables.get( var.getIdentifier() );
-            } else if ( this.list[i] instanceof FunctionCaller ) {
-                ((FunctionCaller) list[i]).replaceTempTokens( variables );
-            } else if ( this.list[i] instanceof ListValueHandler ) {
-                ((ListValueHandler) list[i]).replaceTempTokens( variables );
-            }
-        }
-    }
-
-    public int size() {
-        return (this.list == null) ? 0 : this.list.length;
-    }
-
-    public boolean isEmpty() {
-        return (this.list == null) ? true : this.list.length > 0;
-    }
-
-    public String toString() {
-        StringBuffer b = new StringBuffer();
-        b.append( "[ListValueHandler " );
-        for ( int i = 0, length = this.list.length; i < length; i++ ) {
-            b.append( this.list[i] + " " );
-        }
-        b.append( "]" );
-
-        return b.toString();
-    }
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        for ( int i = 0, length = this.list.length; i < length; i++ ) {
-            if ( !getValue( context ).equals( other.getValue( context ), context) ) {
-                return false;
-            }
-        }         
-        return true;
-    }     
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/LongValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/LongValueHandler.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/LongValueHandler.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,97 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-
-public class LongValueHandler implements ValueHandler {
-    private long longValue;
-    
-    public LongValueHandler(String longValue) {
-        this.longValue = Long.valueOf( longValue ).longValue();
-    } 
-    
-    public int getValueType(ExecutionContext context) {
-        return SimpleValueType.INTEGER;
-    }    
-    
-    public LongValueHandler(long longValue) {
-        this.longValue = longValue;
-    }   
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }      
-
-    public void setValue(ExecutionContext context, Object value) {
-        throw new RuntimeException( "LiteralValues cannot be set");
-    }
-    
-    public Object getObject(ExecutionContext context) {
-        return new Long( this.longValue );
-    }
-    
-    public BigDecimal getBigDecimalValue(ExecutionContext context) throws NumberFormatException {
-        return new BigDecimal( this.longValue );
-    }
-
-    public BigInteger getBigIntegerValue(ExecutionContext context) throws NumberFormatException {
-        return BigInteger.valueOf( this.longValue );
-    }
-
-    public boolean getBooleanValue(ExecutionContext context) throws ClassCastException {
-        return ( this.longValue == 0 ) ? false : true;
-    }
-
-    public double getDoubleValue(ExecutionContext context) throws NumberFormatException {
-        return this.longValue;
-    }
-
-    public float getFloatValue(ExecutionContext context) throws NumberFormatException {
-        return this.longValue;
-    }
-
-    public int getIntValue(ExecutionContext context) throws NumberFormatException {
-        return (int) this.longValue;
-    }
-
-    public long getLongValue(ExecutionContext context) throws NumberFormatException {
-        return this.longValue;
-    }
-
-    public short getShortValue(ExecutionContext context) throws NumberFormatException {
-        return (short) this.longValue;
-    }
-
-    public String getStringValue(ExecutionContext context) {
-        return Long.toString( this.longValue );
-    }
-    
-    public String toString() {
-        return "[LongLiteralValue value='" + this.longValue + "']";
-    }
-
-    public int hashCode() {
-        final int PRIME = 31;
-        int result = 1;
-        result = PRIME * result + (int) (longValue ^ (longValue >>> 32));
-        return result;
-    }
-
-    public boolean equals(Object obj) {
-        if ( this == obj ) return true;
-        if ( obj == null ) return false;
-        if ( ! ( obj instanceof LongValueHandler ) ) return false;
-        final LongValueHandler other = (LongValueHandler) obj;
-        if ( longValue != other.longValue ) return false;
-        return true;
-    }      
-    
-    public boolean equals(ValueHandler other, ExecutionContext context) {
-        return getLongValue( context ) == other.getLongValue( context );        
-    } 
-    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/ObjectValueHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/ObjectValueHandler.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/ObjectValueHandler.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,30 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-
-public class ObjectValueHandler extends BaseValueHandler {    
-    private Object objectValue;       
-    
-    public ObjectValueHandler(Object objectValue) {
-        this.objectValue = objectValue;
-    }
-    
-    public int getValueType(ExecutionContext context) {
-        return SimpleValueType.OBJECT;
-    }
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }    
-    
-    public void setValue(ExecutionContext context, Object value) {
-        throw new RuntimeException( "LiteralValues cannot be set");
-    }
-    
-    public Object getObject(ExecutionContext context) {
-        return this.objectValue;
-    }    
-    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/TempTokenVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clp/valuehandlers/TempTokenVariable.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/clips/valuehandlers/TempTokenVariable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,41 +0,0 @@
-package org.drools.clp.valuehandlers;
-
-import org.drools.base.SimpleValueType;
-import org.drools.clp.ExecutionContext;
-import org.drools.clp.ValueHandler;
-import org.drools.clp.VariableValueHandler;
-
-
-public class TempTokenVariable extends BaseValueHandler implements VariableValueHandler {
-
-    private String identifier;
-    
-    public TempTokenVariable(String identifier) {
-        this.identifier = identifier;
-    }
-    
-    public ValueHandler getValue(ExecutionContext context) {
-        return this;
-    }    
-
-    public String getIdentifier() {
-        return this.identifier;
-    }
-    
-    public int getValueType(ExecutionContext context) {
-        return SimpleValueType.UNKNOWN;
-    }    
-
-    public Object getObject(ExecutionContext context) {
-        throw new UnsupportedOperationException( "TempTokenVariable Variable identifer='" + getIdentifier() + " cannot be read" );
-    }
-
-    public void setValue(ExecutionContext context, Object value) {
-        throw new UnsupportedOperationException( "TempTokenVariable Variable identifer='" + getIdentifier() + " cannot be set" );
-    }
-
-    public void setContext(ExecutionContext context) {
-
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips (from rev 18083, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp)

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp/ClipsDialect.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,291 +0,0 @@
-package org.drools.rule.builder.dialect.clp;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.drools.base.ClassFieldExtractorCache;
-import org.drools.base.TypeResolver;
-import org.drools.compiler.Dialect;
-import org.drools.compiler.PackageBuilder;
-import org.drools.lang.descr.AccumulateDescr;
-import org.drools.lang.descr.AndDescr;
-import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.EvalDescr;
-import org.drools.lang.descr.ExistsDescr;
-import org.drools.lang.descr.ForallDescr;
-import org.drools.lang.descr.FromDescr;
-import org.drools.lang.descr.FunctionDescr;
-import org.drools.lang.descr.NotDescr;
-import org.drools.lang.descr.OrDescr;
-import org.drools.lang.descr.PatternDescr;
-import org.drools.lang.descr.ProcessDescr;
-import org.drools.lang.descr.QueryDescr;
-import org.drools.lang.descr.RuleDescr;
-import org.drools.rule.Package;
-import org.drools.rule.builder.AccumulateBuilder;
-import org.drools.rule.builder.ActionBuilder;
-import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.EntryPointBuilder;
-import org.drools.rule.builder.FromBuilder;
-import org.drools.rule.builder.GroupElementBuilder;
-import org.drools.rule.builder.PackageBuildContext;
-import org.drools.rule.builder.PatternBuilder;
-import org.drools.rule.builder.PredicateBuilder;
-import org.drools.rule.builder.ProcessBuildContext;
-import org.drools.rule.builder.ProcessClassBuilder;
-import org.drools.rule.builder.QueryBuilder;
-import org.drools.rule.builder.ReturnValueBuilder;
-import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
-import org.drools.rule.builder.RuleBuildContext;
-import org.drools.rule.builder.RuleClassBuilder;
-import org.drools.rule.builder.RuleConditionBuilder;
-import org.drools.rule.builder.SalienceBuilder;
-import org.drools.rule.builder.dialect.mvel.MVELDialectConfiguration;
-public class ClipsDialect implements Dialect {
-
-    public final static String                ID                      = "clips";
-
-    private final static String               EXPRESSION_DIALECT_NAME = "mvel";    
-    
-    private final PatternBuilder              pattern                 = new PatternBuilder();    
-    private final ClpConsequenceBuilder      consequence             = new ClpConsequenceBuilder();    
-    
-    private Package                           pkg;
-    private ClipsDialectConfiguration          configuration;
-    private TypeResolver                      typeResolver;
-    private ClassFieldExtractorCache          classFieldExtractorCache;
-
-    // a map of registered builders
-    private Map builders;    
-    
-    public void init(PackageBuilder builder) {
-        this.pkg = builder.getPackage();
-        this.configuration = (ClipsDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "clips" );
-        this.typeResolver = builder.getTypeResolver();
-        this.classFieldExtractorCache = builder.getClassFieldExtractorCache();           
-        
-        initBuilder();
-    }
-    
-    public void initBuilder() {
-        // statically adding all builders to the map
-        // but in the future we can move that to a configuration
-        // if we want to
-        this.builders = new HashMap();
-
-        final GroupElementBuilder gebuilder = new GroupElementBuilder();
-
-        this.builders.put( AndDescr.class,
-                           gebuilder );
-
-        this.builders.put( OrDescr.class,
-                           gebuilder );
-
-        this.builders.put( NotDescr.class,
-                           gebuilder );
-
-        this.builders.put( ExistsDescr.class,
-                           gebuilder );
-
-        this.builders.put( PatternDescr.class,
-                           getPatternBuilder() );
-
-//        this.builders.put( FromDescr.class,
-//                           getFromBuilder() );
-//
-//        this.builders.put( QueryDescr.class,
-//                           getQueryBuilder() );
-//
-//        this.builders.put( AccumulateDescr.class,
-//                           getAccumulateBuilder() );
-//
-//        this.builders.put( EvalDescr.class,
-//                           getEvalBuilder() );
-//        
-//        this.builders.put( CollectDescr.class,
-//                           collect );
-//
-//        this.builders.put( ForallDescr.class,
-//                           forall );
-//
-//        this.builders.put( FunctionDescr.class,
-//                           function );
-   }    
-
-    public void init(Package pkg) {
-        // TODO Auto-generated method stub
-        
-    }
-
-    public void init(RuleDescr ruleDescr) {
-        // TODO Auto-generated method stub
-        
-    }    
-    
-    public void addFunction(FunctionDescr functionDescr,
-                            TypeResolver typeResolver) {
-        // TODO Auto-generated method stub        
-    }
-
-    public void addImport(String importEntry) {
-        // TODO Auto-generated method stub
-        
-    }
-
-    public void addRule(RuleBuildContext context) {
-        // TODO Auto-generated method stub
-        
-    }
-
-    public void addStaticImport(String importEntry) {
-        // TODO Auto-generated method stub
-        
-    }
-
-    public AnalysisResult analyzeBlock(RuleBuildContext context,
-                                       BaseDescr descr,
-                                       String text) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public AnalysisResult analyzeExpression(RuleBuildContext context,
-                                            BaseDescr descr,
-                                            Object content) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public void compileAll() {
-        // TODO Auto-generated method stub
-        
-    }
-
-    public AccumulateBuilder getAccumulateBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public RuleConditionBuilder getBuilder(final Class clazz) {
-        return (RuleConditionBuilder) this.builders.get( clazz );
-    }
-
-    public Map getBuilders() {
-        return this.builders;
-    }
-
-    public ClassFieldExtractorCache getClassFieldExtractorCache() {
-        return this.classFieldExtractorCache;
-    }
-
-    public ConsequenceBuilder getConsequenceBuilder() {
-        return consequence;
-    }
-
-    public RuleConditionBuilder getEvalBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public String getExpressionDialectName() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public FromBuilder getFromBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public String getId() {
-        return ID;
-    }
-
-    public PatternBuilder getPatternBuilder() {
-        return this.pattern;
-    }
-
-    public PredicateBuilder getPredicateBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public QueryBuilder getQueryBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public List getResults() {
-        return new ArrayList();
-    }
-
-    public ReturnValueBuilder getReturnValueBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public RuleClassBuilder getRuleClassBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public SalienceBuilder getSalienceBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public TypeResolver getTypeResolver() {
-        return this.typeResolver;
-    }
-
-    public void addProcess(ProcessBuildContext context) {
-        // TODO Auto-generated method stub
-        
-    }
-
-    public AnalysisResult analyzeBlock(PackageBuildContext context,
-                                       BaseDescr descr,
-                                       String text,
-                                       Set[] availableIdentifiers) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public AnalysisResult analyzeExpression(PackageBuildContext context,
-                                            BaseDescr descr,
-                                            Object content,
-                                            Set[] availableIdentifiers) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public ActionBuilder getActionBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public EntryPointBuilder getEntryPointBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public ProcessClassBuilder getProcessClassBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public ReturnValueEvaluatorBuilder getReturnValueEvaluatorBuilder() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    public void init(ProcessDescr processDescr) {
-        // TODO Auto-generated method stub
-        
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java (from rev 18196, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp/ClipsDialect.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialect.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,291 @@
+package org.drools.rule.builder.dialect.clips;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.drools.base.ClassFieldExtractorCache;
+import org.drools.base.TypeResolver;
+import org.drools.compiler.Dialect;
+import org.drools.compiler.PackageBuilder;
+import org.drools.lang.descr.AccumulateDescr;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.CollectDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.ForallDescr;
+import org.drools.lang.descr.FromDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.ProcessDescr;
+import org.drools.lang.descr.QueryDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.Package;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.ActionBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.EntryPointBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.GroupElementBuilder;
+import org.drools.rule.builder.PackageBuildContext;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.ProcessBuildContext;
+import org.drools.rule.builder.ProcessClassBuilder;
+import org.drools.rule.builder.QueryBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.rule.builder.SalienceBuilder;
+import org.drools.rule.builder.dialect.mvel.MVELDialectConfiguration;
+public class ClipsDialect implements Dialect {
+
+    public final static String                ID                      = "clips";
+
+    private final static String               EXPRESSION_DIALECT_NAME = "mvel";    
+    
+    private final PatternBuilder              pattern                 = new PatternBuilder();    
+    private final ClpConsequenceBuilder      consequence             = new ClpConsequenceBuilder();    
+    
+    private Package                           pkg;
+    private ClipsDialectConfiguration          configuration;
+    private TypeResolver                      typeResolver;
+    private ClassFieldExtractorCache          classFieldExtractorCache;
+
+    // a map of registered builders
+    private Map builders;    
+    
+    public void init(PackageBuilder builder) {
+        this.pkg = builder.getPackage();
+        this.configuration = (ClipsDialectConfiguration) builder.getPackageBuilderConfiguration().getDialectConfiguration( "clips" );
+        this.typeResolver = builder.getTypeResolver();
+        this.classFieldExtractorCache = builder.getClassFieldExtractorCache();           
+        
+        initBuilder();
+    }
+    
+    public void initBuilder() {
+        // statically adding all builders to the map
+        // but in the future we can move that to a configuration
+        // if we want to
+        this.builders = new HashMap();
+
+        final GroupElementBuilder gebuilder = new GroupElementBuilder();
+
+        this.builders.put( AndDescr.class,
+                           gebuilder );
+
+        this.builders.put( OrDescr.class,
+                           gebuilder );
+
+        this.builders.put( NotDescr.class,
+                           gebuilder );
+
+        this.builders.put( ExistsDescr.class,
+                           gebuilder );
+
+        this.builders.put( PatternDescr.class,
+                           getPatternBuilder() );
+
+//        this.builders.put( FromDescr.class,
+//                           getFromBuilder() );
+//
+//        this.builders.put( QueryDescr.class,
+//                           getQueryBuilder() );
+//
+//        this.builders.put( AccumulateDescr.class,
+//                           getAccumulateBuilder() );
+//
+//        this.builders.put( EvalDescr.class,
+//                           getEvalBuilder() );
+//        
+//        this.builders.put( CollectDescr.class,
+//                           collect );
+//
+//        this.builders.put( ForallDescr.class,
+//                           forall );
+//
+//        this.builders.put( FunctionDescr.class,
+//                           function );
+   }    
+
+    public void init(Package pkg) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void init(RuleDescr ruleDescr) {
+        // TODO Auto-generated method stub
+        
+    }    
+    
+    public void addFunction(FunctionDescr functionDescr,
+                            TypeResolver typeResolver) {
+        // TODO Auto-generated method stub        
+    }
+
+    public void addImport(String importEntry) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void addRule(RuleBuildContext context) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public void addStaticImport(String importEntry) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public AnalysisResult analyzeBlock(RuleBuildContext context,
+                                       BaseDescr descr,
+                                       String text) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public AnalysisResult analyzeExpression(RuleBuildContext context,
+                                            BaseDescr descr,
+                                            Object content) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void compileAll() {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public AccumulateBuilder getAccumulateBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public RuleConditionBuilder getBuilder(final Class clazz) {
+        return (RuleConditionBuilder) this.builders.get( clazz );
+    }
+
+    public Map getBuilders() {
+        return this.builders;
+    }
+
+    public ClassFieldExtractorCache getClassFieldExtractorCache() {
+        return this.classFieldExtractorCache;
+    }
+
+    public ConsequenceBuilder getConsequenceBuilder() {
+        return consequence;
+    }
+
+    public RuleConditionBuilder getEvalBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getExpressionDialectName() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public FromBuilder getFromBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public String getId() {
+        return ID;
+    }
+
+    public PatternBuilder getPatternBuilder() {
+        return this.pattern;
+    }
+
+    public PredicateBuilder getPredicateBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public QueryBuilder getQueryBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public List getResults() {
+        return new ArrayList();
+    }
+
+    public ReturnValueBuilder getReturnValueBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public RuleClassBuilder getRuleClassBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public SalienceBuilder getSalienceBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public TypeResolver getTypeResolver() {
+        return this.typeResolver;
+    }
+
+    public void addProcess(ProcessBuildContext context) {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public AnalysisResult analyzeBlock(PackageBuildContext context,
+                                       BaseDescr descr,
+                                       String text,
+                                       Set[] availableIdentifiers) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public AnalysisResult analyzeExpression(PackageBuildContext context,
+                                            BaseDescr descr,
+                                            Object content,
+                                            Set[] availableIdentifiers) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ActionBuilder getActionBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public EntryPointBuilder getEntryPointBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ProcessClassBuilder getProcessClassBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public ReturnValueEvaluatorBuilder getReturnValueEvaluatorBuilder() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void init(ProcessDescr processDescr) {
+        // TODO Auto-generated method stub
+        
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialectConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp/ClipsDialectConfiguration.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialectConfiguration.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,35 +0,0 @@
-package org.drools.rule.builder.dialect.clp;
-
-import org.drools.compiler.Dialect;
-import org.drools.compiler.DialectConfiguration;
-import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.PackageBuilderConfiguration;
-
-/**
- * The Clips dialect.
- * 
- *
- */
-public class ClipsDialectConfiguration
-    implements
-    DialectConfiguration {
-
-    private ClipsDialect                dialect;
-    private PackageBuilderConfiguration conf;
-
-    public Dialect getDialect() {
-        if ( this.dialect == null ) {
-            this.dialect = new ClipsDialect();
-        }
-        return this.dialect;
-    }
-
-    public void init(PackageBuilderConfiguration conf) {
-        this.conf = conf;
-    }
-
-    public PackageBuilderConfiguration getPackageBuilderConfiguration() {
-        return this.conf;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialectConfiguration.java (from rev 18196, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp/ClipsDialectConfiguration.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialectConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClipsDialectConfiguration.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,35 @@
+package org.drools.rule.builder.dialect.clips;
+
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+
+/**
+ * The Clips dialect.
+ * 
+ *
+ */
+public class ClipsDialectConfiguration
+    implements
+    DialectConfiguration {
+
+    private ClipsDialect                dialect;
+    private PackageBuilderConfiguration conf;
+
+    public Dialect getDialect() {
+        if ( this.dialect == null ) {
+            this.dialect = new ClipsDialect();
+        }
+        return this.dialect;
+    }
+
+    public void init(PackageBuilderConfiguration conf) {
+        this.conf = conf;
+    }
+
+    public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+        return this.conf;
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClpConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp/ClpConsequenceBuilder.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClpConsequenceBuilder.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,28 +0,0 @@
-package org.drools.rule.builder.dialect.clp;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.clp.BlockExecutionEngine;
-import org.drools.clp.ExecutionEngine;
-import org.drools.rule.Declaration;
-import org.drools.rule.Rule;
-import org.drools.rule.builder.ConsequenceBuilder;
-import org.drools.rule.builder.RuleBuildContext;
-
-public class ClpConsequenceBuilder implements ConsequenceBuilder {
-
-    public void build(RuleBuildContext context) {
-        Rule rule = context.getRule();
-        BlockExecutionEngine rhs = ( BlockExecutionEngine ) context.getRuleDescr().getConsequence();
-        Map vars = new HashMap();
-        
-        for(Declaration declaration : rule.getDeclarations() ) {
-            vars.put( declaration.getIdentifier(), declaration );
-        }
-        
-        rhs.replaceTempTokens( vars );
-        rule.setConsequence( rhs );        
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClpConsequenceBuilder.java (from rev 18196, labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clp/ClpConsequenceBuilder.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClpConsequenceBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/java/org/drools/rule/builder/dialect/clips/ClpConsequenceBuilder.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,28 @@
+package org.drools.rule.builder.dialect.clips;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.clips.BlockExecutionEngine;
+import org.drools.clips.ExecutionEngine;
+import org.drools.rule.Declaration;
+import org.drools.rule.Rule;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+
+public class ClpConsequenceBuilder implements ConsequenceBuilder {
+
+    public void build(RuleBuildContext context) {
+        Rule rule = context.getRule();
+        BlockExecutionEngine rhs = ( BlockExecutionEngine ) context.getRuleDescr().getConsequence();
+        Map vars = new HashMap();
+        
+        for(Declaration declaration : rule.getDeclarations() ) {
+            vars.put( declaration.getIdentifier(), declaration );
+        }
+        
+        rhs.replaceTempTokens( vars );
+        rule.setConsequence( rhs );        
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips (from rev 18083, labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp)

Deleted: labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLP.g
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/CLP.g	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLP.g	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,820 +0,0 @@
-grammar CLP;
-
- at parser::header {
-	package org.drools.clp;
-	
-	import org.drools.clp.valuehandlers.*;
-	import java.util.List;
-	import java.util.ArrayList;
-	import java.util.Iterator;
-	import java.util.HashMap;	
-	import java.util.Set;	
-	import java.util.HashSet;			
-	import java.util.StringTokenizer;
-	import org.drools.lang.descr.*;
-	import org.drools.lang.Location;	
-}
-
- at parser::members {
-	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;
-	private FunctionRegistry functionRegistry;	
-	private Location location = new Location( Location.LOCATION_UNKNOWN );	
-	
-	public void setFunctionRegistry(FunctionRegistry functionRegistry) {
-		this.functionRegistry = functionRegistry;
-	}
-	
-	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;
-	}	
-
-	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;
-	}
-	
-	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+ FIXME
-                                                           "; 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) ) );
-        	}
-        }
-      
-}
-
- at lexer::header {
-	package org.drools.clp;
-}
-
-/*
-opt_semicolon
-	: ';'?
-	;
-
-
-compilation_unit
-	:	
-		( statement )+
-	;
-*/
-/*
-statement
-	:
-	//later we add the other possible statements here 
-	(  //do something with the returned rule here )
-	;
-*/		
-/* prolog
-	@init {
-		String packageName = "";
-	}
-	:	( n=package_statement { packageName = n; } )?
-		{ 
-			this.packageDescr = factory.createPackage( packageName ); 
-		}
-	;
-	
-statement
-	:
-	(	import_statement 
-	|       function_import_statement 
-	|	global 
-	|	function 
-	|       t=template {this.packageDescr.addFactTemplate( t ); }
-	|	r=rule { if( r != null ) this.packageDescr.addRule( r ); }			
-	|	q=query	{ if( q != null ) this.packageDescr.addRule( q ); }
-	) 
-	;
-
-package_statement returns [String packageName]
-	@init{
-		packageName = null;
-	}
-	:	
-		PACKAGE n=dotted_name[null] opt_semicolon
-		{
-			packageName = n;
-		}
-	;	
-*/
-
-eval_script[Shell  shell]
-	:	(		  i=importDescr{ shell.importDescrHandler( i ); }
-				| r=defrule { shell.ruleDescrHandler( r ); }
-				//e=execution_block { parserHandler.lispFormHandler( e ); }
-				| fc=lisp_list[shell, new LispForm(shell) ] { shell.lispFormHandler(fc); }
-		)*
-	;
-	
-importDescr returns[ImportDescr importDescr]
-	: LEFT_PAREN 'import' importName=NAME { importDescr = new ImportDescr( importName.getText() ); }RIGHT_PAREN
-	;	
-/*	
-
-execution_list returns[ExecutionEngine engine]
-	@init {
-	        engine = new BlockExecutionEngine();
-			BuildContext context = new ExecutionBuildContext( engine, functionRegistry );  	
-	}
-	
-	:
-		(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })
-	;	
-*/	
-
-deffunction returns[Deffunction function]
-	@init {
-			BuildContext context = null;  	
-	}
-	:	loc=LEFT_PAREN	 
-	  	DEFFUNCTION 
-	  	ruleName=NAME {
-	    	function = new Deffunction( ruleName.getText() );
-			functionRegistry.addFunction( function );
-	      	context = new ExecutionBuildContext( function, functionRegistry );
-	  	}
-		loc=LEFT_PAREN	 
-		 (v=VAR {
-			context.addVariable( function.addParameter( v.getText() ) );
-		 })*	  
-	 	 RIGHT_PAREN
-	  	(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })*
-	  	RIGHT_PAREN
-	;
-	
-/*	
-deffunction_params[BuildContext context]
-	:	loc=LEFT_PAREN	 
-		 (v=VAR {
-		    // this creates a parameter on the underlying function
-		 	context.createLocalVariable( v.getText() );
-		 })*	  
-	 	 RIGHT_PAREN	
-	;	
-*/
-defrule returns [RuleDescr rule]
-	@init { 
-	        rule = null; 
-	        AndDescr lhs = null;
-	        PatternDescr colum = null;
-	        AttributeDescr module = null;	      
-            Set declarations = null;  
-	      }
-	:	loc=LEFT_PAREN 
-		
-		DEFRULE ruleName=NAME
-	  	{ 	  			  		
-	  		debug( "start rule: " + ruleName.getText() );
-	  		String ruleStr = ruleName.getText();
-
-	        if ( ruleStr.indexOf("::") >= 0 ) {
-	            String mod = ruleStr.substring(0, ruleStr.indexOf("::"));
-	            ruleStr = ruleStr.substring(ruleStr.indexOf("::")+2);
-				module = new AttributeDescr( "agenda-group", mod );
-				module.setLocation( offset(ruleName.getLine()), ruleName.getCharPositionInLine() );
-				module.setStartCharacter( ((CommonToken)ruleName).getStartIndex() );
-				module.setEndCharacter( ((CommonToken)ruleName).getStopIndex() );
-			}
-		    
-		    rule = new RuleDescr( ruleStr, null ); 
-		    if( module != null ) {
-		    	rule.addAttribute( module );
-		    }
-		        
-			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			rule.setStartCharacter( ((CommonToken)loc).getStartIndex() ); 
-		
-			// not sure how you define where a LHS starts in clips, so just putting it here for now
-        	lhs = new AndDescr(); 
-  	        rule.setLhs( lhs ); 
-	        lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			lhs.setStartCharacter( ((CommonToken)loc).getStartIndex() );	
-			
-			rule.addAttribute( new AttributeDescr( "dialect", "clips") );	
-			
-			declarations = new HashSet();  											
-		}
-		documentation=STRING {
-	    	// do nothing here for now
-		}
-		ruleAttribute[rule]
-		
-		ce[lhs, declarations]*
-		
-		'=>'
-		
-		engine=execution_block { rule.setConsequence( engine ); }
-		
-		RIGHT_PAREN
-	;
-
-
-ruleAttribute[RuleDescr rule]
-	:
-		( LEFT_PAREN 'declare'
-			( LEFT_PAREN d=salience { rule.addAttribute( d ); } RIGHT_PAREN )?
-		RIGHT_PAREN )?
-	;	
-
-salience returns [AttributeDescr d ]
-	@init {
-		d = null;
-	}
-	:	
-		loc=SALIENCE i=INT   
-		{
-			d = new AttributeDescr( "salience", i.getText() );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
-			d.setEndCharacter( ((CommonToken)i).getStopIndex() );
-		}
-	;
-		
-
-ce[ConditionalElementDescr in_ce, Set declarations]
-	:	(   and_ce[in_ce, declarations]	
-		  | or_ce[in_ce, declarations]
-		  | not_ce[in_ce, declarations]
-		  | exists_ce[in_ce, declarations]		  
- 		  | eval_ce[in_ce, declarations] 		  
-		  | normal_pattern[in_ce, declarations]
-		  | bound_pattern[in_ce, declarations]
-		)
-	;
-
-execution_block returns[ExecutionEngine engine]
-	@init {
-	        engine = new BlockExecutionEngine();
-			BuildContext context = new ExecutionBuildContext( engine, functionRegistry );  	
-	}
-	
-	:
-		(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })*
-	;	
-	
-and_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        AndDescr andDescr= null;        
-    }
-	:	LEFT_PAREN	
-		AND {
-	    	andDescr = new AndDescr();
-			in_ce.addDescr( andDescr );
-		}
-		ce[andDescr, declarations]+		 
-		RIGHT_PAREN					
-	;	
-	
-or_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        OrDescr orDescr= null;         
-    }
-	:	LEFT_PAREN	
-		OR {
-	    	orDescr = new OrDescr();
-			in_ce.addDescr( orDescr );
-		}
-		ce[orDescr, declarations]+		 
-		RIGHT_PAREN					
-	;	
-	
-not_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        NotDescr notDescr= null;         
-    }
-	:	LEFT_PAREN	
-		NOT {
-			notDescr = new NotDescr();
-		    in_ce.addDescr( notDescr );
-		}
-		ce[notDescr, declarations]		 
-		RIGHT_PAREN					
-	;		
-	
-exists_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        ExistsDescr existsDescr= null;        
-    }
-	:	LEFT_PAREN	
-		EXISTS {
-		    existsDescr = new ExistsDescr();
-		    in_ce.addDescr( existsDescr );
-		}
-		ce[existsDescr, declarations]		 
-		RIGHT_PAREN					
-	;		
-
-eval_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        EvalDescr evalDescr= null;    
-   		ExecutionEngine engine = new CLPEval();     
-		BuildContext context = new ExecutionBuildContext( engine, functionRegistry );   		         
-    }
-	:	LEFT_PAREN	
-		TEST {
-		    evalDescr = new EvalDescr();
-		    in_ce.addDescr( evalDescr );
-		}
-		fc=lisp_list[context, new LispForm(context)] {					
-		    engine.addFunction( (FunctionCaller) fc );		
-			evalDescr.setContent( engine );			
-		}			 
-		RIGHT_PAREN					
-	;		
-
-normal_pattern[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        PatternDescr pattern = null;
-        ConditionalElementDescr top = null;
-    }
-	:	LEFT_PAREN 
-		name=NAME {
-			pattern = new PatternDescr(name.getText());
-			in_ce.addDescr( pattern );
-			top = pattern.getConstraint();
-			
-		}
-		field_constriant[top, declarations]* 	  
-		RIGHT_PAREN
-	;		
-	
-
-
-bound_pattern[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        PatternDescr pattern = null;
-        String identifier = null;
-        ConditionalElementDescr top = null;        
-    }
-	:	var=VAR {
-			identifier = var.getText();
-		}
-		ASSIGN_OP LEFT_PAREN name=NAME 
-		{
-			pattern = new PatternDescr(name.getText());
-			pattern.setIdentifier( identifier );
-			in_ce.addDescr( pattern );
-			top = pattern.getConstraint();				    
-		}
-		field_constriant[top, declarations]* 
-		RIGHT_PAREN	
-	;			
-	
-field_constriant[ConditionalElementDescr base, Set declarations] 
-	@init {
-     	List list = new ArrayList();
-		FieldBindingDescr fbd = null;
-		FieldConstraintDescr fc = null;
-		RestrictionConnectiveDescr top = null;		
-		String op = "==";
-	}    
-	:	
-		LEFT_PAREN f=NAME 
-		{
-			fc = new FieldConstraintDescr(f.getText());
-			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-			fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
-			base.addDescr( fc );	
-			top = fc.getRestriction();		
-		}	  
-		
-		or_restr_connective[top, base, fc, declarations] 
-		RIGHT_PAREN		
-	;
-/*	
-connected_constraint[RestrictionConnectiveDescr rc, ConditionalElementDescr base]
-	:
-	restriction[rc, base]
-	( 
-	    AMPERSAND { rc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND)); }
-	    connected_constraint[rc, base]
-	| 
-	    PIPE {rc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR)); }
-	    connected_constraint[rc, base]
-	)?
-	;	
-*/
-
-
-or_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
-	options { 
-		backtrack=true;
-	}
-	@init {
-		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
-	}
-	:
-		and_restr_connective[or, ceBase, fcBase, declarations] 
-		( 
-			options {backtrack=true;}
-			: PIPE
-			{
-				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-			}
-			and_restr_connective[or, ceBase, fcBase, declarations] 
-		)*
-	;
-	finally {
-	        if( or.getRestrictions().size() == 1 ) {
-	                $rcBase.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
-	        } else if ( or.getRestrictions().size() > 1 ) {
-	        	$rcBase.addRestriction( or );
-	        }
-	}
-
-and_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
-	@init {
-		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
-	}
-	:
-		restriction[and, ceBase, fcBase, declarations] 
-		( AMPERSAND restriction[and, ceBase, fcBase, declarations] )*
-		/*
-		(	options {backtrack=true;}
-		:	t=AMPERSAND 
-			{
-				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-			}
-			restriction[and, ceBase] 
-		)*
-		*/
-	;
-	finally {
-	        if( and.getRestrictions().size() == 1) {
-	                $rcBase.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
-	        } else if ( and.getRestrictions().size() > 1 ) {
-	        	$rcBase.addRestriction( and );
-	        }
-	}
-	
-restriction[RestrictionConnectiveDescr rc, ConditionalElementDescr base, FieldConstraintDescr fcBase, Set declarations ]
-	@init {
-			String op = "==";
-	}
-	:	(TILDE{op = "!=";})?	 	  	 
-		(	predicate_constraint[rc, op, base]	  	  	
-	  	|	return_value_restriction[op, rc]
-	  	|	variable_restriction[op, rc, base, fcBase, declarations]
-	  	| 	lc=literal_restriction {
-     	    			rc.addRestriction( new LiteralRestrictionDescr(op, lc) );
-		      		op = "==";
-		        } 	  	  	  
-		)		
-	;		
-
-predicate_constraint[RestrictionConnectiveDescr rc, String op, ConditionalElementDescr base]	
-    @init {
-   		ExecutionEngine engine = new CLPPredicate();
-		BuildContext context = new ExecutionBuildContext( engine, functionRegistry );    
-    }
-	:	COLON
-		fc=lisp_list[context, new LispForm(context)] {	
-		        engine.addFunction( (FunctionCaller) fc );
-			$rc.addRestriction( new PredicateDescr( engine ) );
-		}	
-		
-	;
-
-
-return_value_restriction[String op, RestrictionConnectiveDescr rc]
-	@init {
-		ExecutionEngine engine = new CLPReturnValue();
-		BuildContext context = new ExecutionBuildContext( engine, functionRegistry );
-	}
-	:	EQUALS 
-		func=lisp_list[context, new LispForm(context)] {					
-   		    engine.addFunction( (FunctionCaller) func );
-			rc.addRestriction( new ReturnValueRestrictionDescr (op, engine ) );
-		}		
-	;
-		
-//will add a declaration field binding, if this is the first time the name  is used		
-variable_restriction[String op, RestrictionConnectiveDescr rc, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
-	:	VAR {
-	        if ( declarations.contains( $VAR.text ) ) {
-				rc.addRestriction( new VariableRestrictionDescr(op, $VAR.text) );
-		 	} else {
-		 		FieldBindingDescr fbd = new FieldBindingDescr();
-		 		fbd.setIdentifier( $VAR.text );		
-		 		fbd.setFieldName( fcBase.getFieldName() ); 		
-		 		ceBase.insertBeforeLast( FieldConstraintDescr.class, fbd );
-		 		declarations.add( $VAR.text );
-		 	}
-		}
-	;	
-
-	
-literal_restriction returns [String text]
-	@init {
-		text = null;
-	}
-	:
-	    t=literal {
-	    	text = t;
-	    }
-	;		
-
-lisp_list[BuildContext context, LispList list] returns[ValueHandler valueHandler]
-	:	LEFT_PAREN	
-		(		a=lisp_atom[context]					{ list.add( a ); }
-			|	a=lisp_list[context, list.createList()]	{ list.add( a ); }
-		)*										    	
-	    RIGHT_PAREN
-	    { valueHandler = list.getValueHandler(); }
-	;
-	
-lisp_atom[BuildContext context] returns[ValueHandler value] 
-	@init {
-		value  =  null;		
-	}
-	:
-		(		t=VAR		{ value = context.getVariableValueHandler(t.getText() ); }
-			|	t=STRING	{ value = new ObjectValueHandler( getString( t ) ); }
-			| 	t=NAME		{ value = new ObjectValueHandler( t.getText() ); }			
-			|	t=FLOAT		{ value = new DoubleValueHandler( t.getText() ); }
-			|	t=INT 		{ value = new LongValueHandler( t.getText() ); }			
-			|	t=BOOL		{ value = new BooleanValueHandler( t.getText() ); }						
-			|	t=NULL		{ value = ObjectValueHandler.NULL; }
-		)	
-	;
-	
-literal returns [String text]
-	@init {
-		text = null;
-	}
-	:	(   t=STRING { text = getString( t ); } 
-		  | t=NAME     { text = t.getText(); }
-		  | t=INT    { text = t.getText(); }
-		  | t=FLOAT	 { text = t.getText(); }
-		  | t=BOOL 	 { text = t.getText(); }
-		  | t=NULL   { text = null; }
-		)
-	;
-	
-WS      :       (	' '
-                |	'\t'
-                |	'\f'
-                |	EOL
-                )
-                { $channel=HIDDEN; }
-        ;                      
-        
-DEFRULE		:	'defrule';
-DEFFUNCTION :	'deffunction';
-OR 			:	'or';
-AND 		:	'and';
-NOT 		:	'not';
-EXISTS 		:	'exists';
-TEST 		:	'test';
-
-NULL		:	'null';
-
-DECLARE 	:	'declare';        		
-
-SALIENCE	:	'salience';
-
-//MODIFY  :	'modify';
-
-fragment
-EOL 	:	     
-   		(       ( '\r\n' )=> '\r\n'  // Evil DOS
-                |       '\r'    // Macintosh
-                |       '\n'    // Unix (the right way)
-                )
-        ;  
-        
-INT	
-	:	('-')?('0'..'9')+
-	;
-
-FLOAT
-	:	('-')?('0'..'9')+ '.' ('0'..'9')+
-	;
-
-STRING
-    :  ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
-     | ('\'' ( EscapeSequence | ~('\\'|'\'') )* '\'')
-    ;
-
-fragment
-HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
-
-fragment
-EscapeSequence
-    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
-    |   UnicodeEscape
-    |   OctalEscape
-    ;
-
-fragment
-OctalEscape
-    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
-    |   '\\' ('0'..'7') ('0'..'7')
-    |   '\\' ('0'..'7')
-    ;
-
-fragment
-UnicodeEscape
-    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
-    ;
-
-BOOL
-	:	('true'|'false') 
-	;
-	
-VAR 	: '?'('a'..'z'|'A'..'Z'|'_'|'$')SYMBOL* 
-        ;
-
-SH_STYLE_SINGLE_LINE_COMMENT	
-	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
-                { $channel=HIDDEN; }
-	;
-        
-        
-C_STYLE_SINGLE_LINE_COMMENT	
-	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
-                { $channel=HIDDEN; }
-	;
-
-
-LEFT_PAREN
-	:	'('
-	;
-
-RIGHT_PAREN
-	:	')'
-	;
-        
-LEFT_SQUARE
-	:	'['
-	;
-
-RIGHT_SQUARE
-	:	']'
-	;        
-
-LEFT_CURLY
-	:	'{'
-	;
-
-RIGHT_CURLY
-	:	'}'
-	;
-	
-TILDE	:	'~'
-	;	
-	
-AMPERSAND 
-	:	'&'
-	;
-	
-PIPE
-	:	'|'
-	;		
-	
-ASSIGN_OP 
-	:	'<-'	
-	;
-
-COLON	:	':';
-
-EQUALS	:	'=';	
-        
-MULTI_LINE_COMMENT
-	:	'/*' (options{greedy=false;} : .)* '*/'
-                { $channel=HIDDEN; }
-	;
-
-NAME	:	SYMBOL	;
-	
-fragment	
-SYMBOL
-	:	((~(' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'?'|'$'))|('$' ~('?'|' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'<'))) 
-	         (~(' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'<'|'?'))*
-	;
-

Deleted: labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLPMVEL.g
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/CLPMVEL.g	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLPMVEL.g	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,891 +0,0 @@
-grammar CLPMVEL;
-
- at parser::header {
-	package org.drools.clp;
-	
-    import org.drools.clp.mvel.*;	
-    
-	import org.drools.clp.valuehandlers.*;
-	import java.util.List;
-	import java.util.ArrayList;
-	import java.util.Iterator;
-	import java.util.HashMap;	
-	import java.util.Set;	
-	import java.util.HashSet;			
-	import java.util.StringTokenizer;
-	import org.drools.lang.descr.*;
-	import org.drools.lang.Location;	
-}
-
- at parser::members {
-	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;
-	private FunctionRegistry functionRegistry;	
-	private Location location = new Location( Location.LOCATION_UNKNOWN );	
-	
-	public void setFunctionRegistry(FunctionRegistry functionRegistry) {
-		this.functionRegistry = functionRegistry;
-	}
-	
-	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;
-	}	
-
-	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;
-	}
-	
-	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+ FIXME
-                                                           "; 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) ) );
-        	}
-        }
-      
-}
-
- at lexer::header {
-	package org.drools.clp;
-}
-
-/*
-opt_semicolon
-	: ';'?
-	;
-
-
-compilation_unit
-	:	
-		( statement )+
-	;
-*/
-/*
-statement
-	:
-	//later we add the other possible statements here 
-	(  //do something with the returned rule here )
-	;
-*/		
-/* prolog
-	@init {
-		String packageName = "";
-	}
-	:	( n=package_statement { packageName = n; } )?
-		{ 
-			this.packageDescr = factory.createPackage( packageName ); 
-		}
-	;
-	
-statement
-	:
-	(	import_statement 
-	|       function_import_statement 
-	|	global 
-	|	function 
-	|       t=template {this.packageDescr.addFactTemplate( t ); }
-	|	r=rule { if( r != null ) this.packageDescr.addRule( r ); }			
-	|	q=query	{ if( q != null ) this.packageDescr.addRule( q ); }
-	) 
-	;
-
-package_statement returns [String packageName]
-	@init{
-		packageName = null;
-	}
-	:	
-		PACKAGE n=dotted_name[null] opt_semicolon
-		{
-			packageName = n;
-		}
-	;	
-*/
-
-eval_script[Shell  shell]
-	:	(		  i=importDescr{ shell.importDescrHandler( i ); }
-				| r=defrule { shell.ruleDescrHandler( r ); }
-				//e=execution_block { parserHandler.lispFormHandler( e ); }
-				| fc=lisp_list[shell, new LispForm(shell) ] { shell.lispFormHandler(fc); }
-		)*
-	;
-	
-importDescr returns[ImportDescr importDescr]
-	: LEFT_PAREN 'import' importName=NAME { importDescr = new ImportDescr( importName.getText() ); }RIGHT_PAREN
-	;	
-/*	
-
-execution_list returns[ExecutionEngine engine]
-	@init {
-	        engine = new BlockExecutionEngine();
-			BuildContext context = new ExecutionBuildContext( engine, functionRegistry );  	
-	}
-	
-	:
-		(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })
-	;	
-*/	
-
-deffunction returns[Deffunction function]
-	@init {
-			BuildContext context = null;  	
-	}
-	:	loc=LEFT_PAREN	 
-	  	DEFFUNCTION 
-	  	ruleName=NAME {
-	    	function = new Deffunction( ruleName.getText() );
-			functionRegistry.addFunction( function );
-	      	context = new ExecutionBuildContext( function, functionRegistry );
-	  	}
-		loc=LEFT_PAREN	 
-		 (v=VAR {
-			context.addVariable( function.addParameter( v.getText() ) );
-		 })*	  
-	 	 RIGHT_PAREN
-	  	(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })*
-	  	RIGHT_PAREN
-	;
-	
-/*	
-deffunction_params[BuildContext context]
-	:	loc=LEFT_PAREN	 
-		 (v=VAR {
-		    // this creates a parameter on the underlying function
-		 	context.createLocalVariable( v.getText() );
-		 })*	  
-	 	 RIGHT_PAREN	
-	;	
-*/
-defrule returns [RuleDescr rule]
-	@init { 
-	        rule = null; 
-	        AndDescr lhs = null;
-	        PatternDescr colum = null;
-	        AttributeDescr module = null;	      
-            Set declarations = null;  
-	      }
-	:	loc=LEFT_PAREN 
-		
-		DEFRULE ruleName=NAME
-	  	{ 	  			  		
-	  		debug( "start rule: " + ruleName.getText() );
-	  		String ruleStr = ruleName.getText();
-
-	        if ( ruleStr.indexOf("::") >= 0 ) {
-	            String mod = ruleStr.substring(0, ruleStr.indexOf("::"));
-	            ruleStr = ruleStr.substring(ruleStr.indexOf("::")+2);
-				module = new AttributeDescr( "agenda-group", mod );
-				module.setLocation( offset(ruleName.getLine()), ruleName.getCharPositionInLine() );
-				module.setStartCharacter( ((CommonToken)ruleName).getStartIndex() );
-				module.setEndCharacter( ((CommonToken)ruleName).getStopIndex() );
-			}
-		    
-		    rule = new RuleDescr( ruleStr, null ); 
-		    if( module != null ) {
-		    	rule.addAttribute( module );
-		    }
-		        
-			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			rule.setStartCharacter( ((CommonToken)loc).getStartIndex() ); 
-		
-			// not sure how you define where a LHS starts in clips, so just putting it here for now
-        	lhs = new AndDescr(); 
-  	        rule.setLhs( lhs ); 
-	        lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			lhs.setStartCharacter( ((CommonToken)loc).getStartIndex() );	
-			
-			rule.addAttribute( new AttributeDescr( "dialect", "clips") );	
-			
-			declarations = new HashSet();  											
-		}
-		documentation=STRING {
-	    	// do nothing here for now
-		}
-		ruleAttribute[rule]
-		
-		ce[lhs, declarations]*
-		
-		'=>'
-		
-		engine=execution_block { rule.setConsequence( engine ); }
-		
-		RIGHT_PAREN
-	;
-
-
-ruleAttribute[RuleDescr rule]
-	:
-		( LEFT_PAREN 'declare'
-			( LEFT_PAREN d=salience { rule.addAttribute( d ); } RIGHT_PAREN )?
-		RIGHT_PAREN )?
-	;	
-
-salience returns [AttributeDescr d ]
-	@init {
-		d = null;
-	}
-	:	
-		loc=SALIENCE i=INT   
-		{
-			d = new AttributeDescr( "salience", i.getText() );
-			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
-			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
-			d.setEndCharacter( ((CommonToken)i).getStopIndex() );
-		}
-	;
-		
-
-ce[ConditionalElementDescr in_ce, Set declarations]
-	:	(   and_ce[in_ce, declarations]	
-		  | or_ce[in_ce, declarations]
-		  | not_ce[in_ce, declarations]
-		  | exists_ce[in_ce, declarations]		  
- 		  | eval_ce[in_ce, declarations] 		  
-		  | normal_pattern[in_ce, declarations]
-		  | bound_pattern[in_ce, declarations]
-		)
-	;
-
-execution_block returns[ExecutionEngine engine]
-	@init {
-	        engine = new BlockExecutionEngine();
-			BuildContext context = new ExecutionBuildContext( engine, functionRegistry );  	
-	}
-	
-	:
-		(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })*
-	;	
-	
-and_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        AndDescr andDescr= null;        
-    }
-	:	LEFT_PAREN	
-		AND {
-	    	andDescr = new AndDescr();
-			in_ce.addDescr( andDescr );
-		}
-		ce[andDescr, declarations]+		 
-		RIGHT_PAREN					
-	;	
-	
-or_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        OrDescr orDescr= null;         
-    }
-	:	LEFT_PAREN	
-		OR {
-	    	orDescr = new OrDescr();
-			in_ce.addDescr( orDescr );
-		}
-		ce[orDescr, declarations]+		 
-		RIGHT_PAREN					
-	;	
-	
-not_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        NotDescr notDescr= null;         
-    }
-	:	LEFT_PAREN	
-		NOT {
-			notDescr = new NotDescr();
-		    in_ce.addDescr( notDescr );
-		}
-		ce[notDescr, declarations]		 
-		RIGHT_PAREN					
-	;		
-	
-exists_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        ExistsDescr existsDescr= null;        
-    }
-	:	LEFT_PAREN	
-		EXISTS {
-		    existsDescr = new ExistsDescr();
-		    in_ce.addDescr( existsDescr );
-		}
-		ce[existsDescr, declarations]		 
-		RIGHT_PAREN					
-	;		
-
-eval_ce[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        EvalDescr evalDescr= null;    
-   		ExecutionEngine engine = new CLPEval();     
-		BuildContext context = new ExecutionBuildContext( engine, functionRegistry );   		         
-    }
-	:	LEFT_PAREN	
-		TEST {
-		    evalDescr = new EvalDescr();
-		    in_ce.addDescr( evalDescr );
-		}
-		fc=lisp_list[context, new LispForm(context)] {					
-		    engine.addFunction( (FunctionCaller) fc );		
-			evalDescr.setContent( engine );			
-		}			 
-		RIGHT_PAREN					
-	;		
-
-normal_pattern[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        PatternDescr pattern = null;
-        ConditionalElementDescr top = null;
-    }
-	:	LEFT_PAREN 
-		name=NAME {
-			pattern = new PatternDescr(name.getText());
-			in_ce.addDescr( pattern );
-			top = pattern.getConstraint();
-			
-		}
-		field_constriant[top, declarations]* 	  
-		RIGHT_PAREN
-	;		
-	
-
-
-bound_pattern[ConditionalElementDescr in_ce, Set declarations]
-    @init {
-        PatternDescr pattern = null;
-        String identifier = null;
-        ConditionalElementDescr top = null;        
-    }
-	:	var=VAR {
-			identifier = var.getText();
-		}
-		ASSIGN_OP LEFT_PAREN name=NAME 
-		{
-			pattern = new PatternDescr(name.getText());
-			pattern.setIdentifier( identifier );
-			in_ce.addDescr( pattern );
-			top = pattern.getConstraint();				    
-		}
-		field_constriant[top, declarations]* 
-		RIGHT_PAREN	
-	;			
-	
-field_constriant[ConditionalElementDescr base, Set declarations] 
-	@init {
-     	List list = new ArrayList();
-		FieldBindingDescr fbd = null;
-		FieldConstraintDescr fc = null;
-		RestrictionConnectiveDescr top = null;		
-		String op = "==";
-	}    
-	:	
-		LEFT_PAREN f=NAME 
-		{
-			fc = new FieldConstraintDescr(f.getText());
-			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
-			fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
-			base.addDescr( fc );	
-			top = fc.getRestriction();		
-		}	  
-		
-		or_restr_connective[top, base, fc, declarations] 
-		RIGHT_PAREN		
-	;
-/*	
-connected_constraint[RestrictionConnectiveDescr rc, ConditionalElementDescr base]
-	:
-	restriction[rc, base]
-	( 
-	    AMPERSAND { rc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND)); }
-	    connected_constraint[rc, base]
-	| 
-	    PIPE {rc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR)); }
-	    connected_constraint[rc, base]
-	)?
-	;	
-*/
-
-
-or_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
-	options { 
-		backtrack=true;
-	}
-	@init {
-		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
-	}
-	:
-		and_restr_connective[or, ceBase, fcBase, declarations] 
-		( 
-			options {backtrack=true;}
-			: PIPE
-			{
-				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-			}
-			and_restr_connective[or, ceBase, fcBase, declarations] 
-		)*
-	;
-	finally {
-	        if( or.getRestrictions().size() == 1 ) {
-	                $rcBase.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
-	        } else if ( or.getRestrictions().size() > 1 ) {
-	        	$rcBase.addRestriction( or );
-	        }
-	}
-
-and_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
-	@init {
-		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
-	}
-	:
-		restriction[and, ceBase, fcBase, declarations] 
-		( AMPERSAND restriction[and, ceBase, fcBase, declarations] )*
-		/*
-		(	options {backtrack=true;}
-		:	t=AMPERSAND 
-			{
-				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
-			}
-			restriction[and, ceBase] 
-		)*
-		*/
-	;
-	finally {
-	        if( and.getRestrictions().size() == 1) {
-	                $rcBase.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
-	        } else if ( and.getRestrictions().size() > 1 ) {
-	        	$rcBase.addRestriction( and );
-	        }
-	}
-	
-restriction[RestrictionConnectiveDescr rc, ConditionalElementDescr base, FieldConstraintDescr fcBase, Set declarations ]
-	@init {
-			String op = "==";
-	}
-	:	(TILDE{op = "!=";})?	 	  	 
-		(	predicate_constraint[rc, op, base]	  	  	
-	  	|	return_value_restriction[op, rc]
-	  	|	variable_restriction[op, rc, base, fcBase, declarations]
-	  	| 	lc=literal_restriction {
-     	    			rc.addRestriction( new LiteralRestrictionDescr(op, lc) );
-		      		op = "==";
-		        } 	  	  	  
-		)		
-	;		
-
-predicate_constraint[RestrictionConnectiveDescr rc, String op, ConditionalElementDescr base]	
-    @init {
-   		ExecutionEngine engine = new CLPPredicate();
-		BuildContext context = new ExecutionBuildContext( engine, functionRegistry );    
-    }
-	:	COLON
-		fc=lisp_list[context, new LispForm(context)] {	
-		        engine.addFunction( (FunctionCaller) fc );
-			$rc.addRestriction( new PredicateDescr( engine ) );
-		}	
-		
-	;
-
-
-return_value_restriction[String op, RestrictionConnectiveDescr rc]
-	@init {
-		ExecutionEngine engine = new CLPReturnValue();
-		BuildContext context = new ExecutionBuildContext( engine, functionRegistry );
-	}
-	:	EQUALS 
-		func=lisp_list[context, new LispForm(context)] {					
-   		    engine.addFunction( (FunctionCaller) func );
-			rc.addRestriction( new ReturnValueRestrictionDescr (op, engine ) );
-		}		
-	;
-		
-//will add a declaration field binding, if this is the first time the name  is used		
-variable_restriction[String op, RestrictionConnectiveDescr rc, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
-	:	VAR {
-	        if ( declarations.contains( $VAR.text ) ) {
-				rc.addRestriction( new VariableRestrictionDescr(op, $VAR.text) );
-		 	} else {
-		 		FieldBindingDescr fbd = new FieldBindingDescr();
-		 		fbd.setIdentifier( $VAR.text );		
-		 		fbd.setFieldName( fcBase.getFieldName() ); 		
-		 		ceBase.insertBeforeLast( FieldConstraintDescr.class, fbd );
-		 		declarations.add( $VAR.text );
-		 	}
-		}
-	;	
-
-	
-literal_restriction returns [String text]
-	@init {
-		text = null;
-	}
-	:
-	    t=literal {
-	    	text = t;
-	    }
-	;
-
- 
-eval_sExpressions returns[List<SExpression> list]
-    @init {
-		list = new ArrayList<SExpression>();
-    }
-	:
-		(a=lisp_list2 { list.add( a ); })*
-//		{ sExpressions = ( SExpression[] ) list.toArray( new SExpression[ list.size () ] ); }
-	;
-	
-lisp_list2 returns[SExpression sExpression]
-    @init {
-        List list = new ArrayList();
-        sExpression = null;
-    }
-	:	LEFT_PAREN	
-	    t=NAME { list.add( new SymbolLispAtom2(  t.getText() ) ); }
-		(		a=lisp_atom2	{ list.add( a ); }
-			|	a=lisp_list2	{ list.add( a ); }
-		)+									    	
-	    RIGHT_PAREN
-	    { sExpression = new LispForm2( ( SExpression[] ) list.toArray( new SExpression[ list.size () ] ) ); }
-	;
-	
-lisp_atom2 returns[SExpression sExpression] 
-	@init {
-		sExpression  =  null;		
-	}
-	:
-		/*(		
-			 	t=FLOAT		{ sExpression = new LispAtom2( t.getText() ); }
-			|	t=INT 		{ sExpression = new LispAtom2( t.getText() ); }			
-			|	t=BOOL		{ sExpression = new LispAtom2( t.getText() ); }						
-			|	t=NULL		{ sExpression = new LispAtom2( null ); }
-			|	t=STRING	{ sExpression = new LispAtom2( getString( t ) ); }
-			| 	t=NAME		{ sExpression = new LispAtom2( t.getText() ); }			
-
-		)*/	
-		
-		(		
-			 	t=VAR		{ sExpression = new VariableLispAtom2( t.getText() ); }
-			|	t=STRING	{ sExpression = new StringLispAtom2( getString( t ) ); }											
-			|	t=FLOAT		{ sExpression = new FloatLispAtom2( t.getText() ); }
-			|	t=INT		{ sExpression = new IntLispAtom2( t.getText() ); }
-			| 	t=BOOL		{ sExpression = new BoolLispAtom2( t.getText() ); }			
-			| 	t=NULL		{ sExpression = new NullLispAtom2( null ); }						
-	        | t=NAME	{ sExpression = new SymbolLispAtom2( t.getText() ); }				
-
-		)		
-	;		
-
-lisp_list[BuildContext context, LispList list] returns[ValueHandler valueHandler]
-	:	LEFT_PAREN	
-		(		a=lisp_atom[context]					{ list.add( a ); }
-			|	a=lisp_list[context, list.createList()]	{ list.add( a ); }
-		)*										    	
-	    RIGHT_PAREN
-	    { valueHandler = list.getValueHandler(); }
-	;
-	
-lisp_atom[BuildContext context] returns[ValueHandler value] 
-	@init {
-		value  =  null;		
-	}
-	:
-		(		t=VAR		{ value = context.getVariableValueHandler(t.getText() ); }
-			|	t=STRING	{ value = new ObjectValueHandler( getString( t ) ); }
-			| 	t=NAME		{ value = new ObjectValueHandler( t.getText() ); }			
-			|	t=FLOAT		{ value = new DoubleValueHandler( t.getText() ); }
-			|	t=INT 		{ value = new LongValueHandler( t.getText() ); }			
-			|	t=BOOL		{ value = new BooleanValueHandler( t.getText() ); }						
-			|	t=NULL		{ value = ObjectValueHandler.NULL; }
-		)	
-	;
-	
-literal returns [String text]
-	@init {
-		text = null;
-	}
-	:	(   t=STRING { text = getString( t ); } 
-		  | t=NAME     { text = t.getText(); }
-		  | t=INT    { text = t.getText(); }
-		  | t=FLOAT	 { text = t.getText(); }
-		  | t=BOOL 	 { text = t.getText(); }
-		  | t=NULL   { text = null; }
-		)
-	;
-	
-WS      :       (	' '
-                |	'\t'
-                |	'\f'
-                |	EOL
-                )
-                { $channel=HIDDEN; }
-        ;                      
-        
-DEFRULE		:	'defrule';
-DEFFUNCTION :	'deffunction';
-OR 			:	'or';
-AND 		:	'and';
-NOT 		:	'not';
-EXISTS 		:	'exists';
-TEST 		:	'test';
-
-NULL		:	'null';
-
-DECLARE 	:	'declare';        		
-
-SALIENCE	:	'salience';
-
-//MODIFY  :	'modify';
-
-fragment
-EOL 	:	     
-   		(       ( '\r\n' )=> '\r\n'  // Evil DOS
-                |       '\r'    // Macintosh
-                |       '\n'    // Unix (the right way)
-                )
-        ;  
-        
-INT	
-	:	('-')?('0'..'9')+
-	;
-
-FLOAT
-	:	('-')?('0'..'9')+ '.' ('0'..'9')+
-	;
-
-STRING
-    :  ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
-     | ('\'' ( EscapeSequence | ~('\\'|'\'') )* '\'')
-    ;
-
-fragment
-HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
-
-fragment
-EscapeSequence
-    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
-    |   UnicodeEscape
-    |   OctalEscape
-    ;
-
-fragment
-OctalEscape
-    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
-    |   '\\' ('0'..'7') ('0'..'7')
-    |   '\\' ('0'..'7')
-    ;
-
-fragment
-UnicodeEscape
-    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
-    ;
-
-BOOL
-	:	('true'|'false') 
-	;
-	
-VAR 	: '?'~DELIM+
-        ;
-
-SH_STYLE_SINGLE_LINE_COMMENT	
-	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
-                { $channel=HIDDEN; }
-	;
-        
-        
-C_STYLE_SINGLE_LINE_COMMENT	
-	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
-                { $channel=HIDDEN; }
-	;
-
-
-LEFT_PAREN
-	:	'('
-	;
-
-RIGHT_PAREN
-	:	')'
-	;
-        
-LEFT_SQUARE
-	:	'['
-	;
-
-RIGHT_SQUARE
-	:	']'
-	;        
-
-LEFT_CURLY
-	:	'{'
-	;
-
-RIGHT_CURLY
-	:	'}'
-	;
-	
-TILDE	:	'~'
-	;	
-	
-AMPERSAND 
-	:	'&'
-	;
-	
-PIPE
-	:	'|'
-	;		
-	
-ASSIGN_OP 
-	:	'<-'	
-	;
-
-COLON	:	':';
-
-EQUALS	:	'=';	
-        
-MULTI_LINE_COMMENT
-	:	'/*' (options{greedy=false;} : .)* '*/'
-                { $channel=HIDDEN; }
-	;
-
-NAME :	SYMBOL ;
-
-fragment
-SYMBOL : CHAR* ;	
-
-fragment
-START_DELIM	:	' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'?';	
-
-fragment
-DELIM	    :	' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'<';	
-
-fragment
-CHAR : ('a'..'z'|'A'..'Z'|'0'..'9'|'!'|'$'|'%'|'^'|'*'|'_'|'-'|'+'|'='|'\\'|'/'|'@'|'#'|':'|'>'|','|'.'|'['|']'|'{'|'}');	
-
-	
-/*	
-fragment	
-SYMBOL
-	:	((~(' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'?'|'$'))|('$' ~('?'|' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'<'))) 
-	         (~(' '|'\t'|'\n'|'\r'|'"'|'('|')'|';'|'&'|'|'|'~'|'<'|'?'))*
-	;
-*/
-	
-
-
-

Copied: labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLPMVEL.g (from rev 18196, labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/CLPMVEL.g)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLPMVEL.g	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/CLPMVEL.g	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,849 @@
+grammar CLPMVEL;
+
+ at parser::header {
+	package org.drools.clp;
+
+    import org.drools.clp.*;		
+    import org.drools.clp.mvel.*;	
+    
+	import java.util.List;
+	import java.util.ArrayList;
+	import java.util.Iterator;
+	import java.util.HashMap;	
+	import java.util.Set;	
+	import java.util.HashSet;			
+	import java.util.StringTokenizer;
+	import org.drools.lang.descr.*;
+	import org.drools.lang.Location;	
+}
+
+ at parser::members {
+	private PackageDescr packageDescr;
+	private List errors = new ArrayList();
+	private String source = "unknown";
+	private int lineOffset = 0;
+	private DescrFactory factory = new DescrFactory();
+	private MVELBuildContext context;
+	private boolean parserDebug = false;
+	private Location location = new Location( Location.LOCATION_UNKNOWN );	
+	
+	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;
+	}	
+
+	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;
+	}
+	
+	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+ FIXME
+                                                           "; 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) ) );
+        	}
+        }
+      
+}
+
+ at lexer::header {
+	package org.drools.clp;
+}
+
+/*
+opt_semicolon
+	: ';'?
+	;
+
+
+compilation_unit
+	:	
+		( statement )+
+	;
+*/
+/*
+statement
+	:
+	//later we add the other possible statements here 
+	(  //do something with the returned rule here )
+	;
+*/		
+/* prolog
+	@init {
+		String packageName = "";
+	}
+	:	( n=package_statement { packageName = n; } )?
+		{ 
+			this.packageDescr = factory.createPackage( packageName ); 
+		}
+	;
+	
+statement
+	:
+	(	import_statement 
+	|       function_import_statement 
+	|	global 
+	|	function 
+	|       t=template {this.packageDescr.addFactTemplate( t ); }
+	|	r=rule { if( r != null ) this.packageDescr.addRule( r ); }			
+	|	q=query	{ if( q != null ) this.packageDescr.addRule( q ); }
+	) 
+	;
+
+package_statement returns [String packageName]
+	@init{
+		packageName = null;
+	}
+	:	
+		PACKAGE n=dotted_name[null] opt_semicolon
+		{
+			packageName = n;
+		}
+	;	
+*/
+
+eval[ParserHandler handler, MVELBuildContext context]
+	:	
+	{ this.context = context; }
+	(		  i=importDescr{ handler.importHandler( i ); }
+				| f=deffunction { handler.functionHandler( f ); }	
+				| r=defrule { handler.ruleHandler( r ); }
+				| form=lisp_form { handler.lispFormHandler( form ); }
+		)
+	;
+	
+	/*
+eval_sExpressions[MVELClipsContext context] returns[List<SExpression> list]
+    @init {
+		list = new ArrayList<SExpression>();
+    }
+	:
+		(  	a=lisp_list { list.add( a ); }
+		   | a=deffunction { FunctionHandlers.dump(a, null, context); }
+		)*
+//		{ sExpressions = ( SExpression[] ) list.toArray( new SExpression[ list.size () ] ); }
+	;
+	*/	
+	
+importDescr returns[ImportDescr importDescr]
+	: LEFT_PAREN 'import' importName=NAME { importDescr = new ImportDescr( importName.getText() ); } RIGHT_PAREN
+	;	
+/*	
+
+execution_list returns[ExecutionEngine engine]
+	@init {
+	        engine = new BlockExecutionEngine();
+			BuildContext context = new ExecutionBuildContext( engine, functionRegistry );  	
+	}
+	
+	:
+		(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })
+	;	
+*/	
+
+/*
+deffunction returns[Deffunction function]
+	@init {
+			BuildContext context = null;  	
+	}
+	:	loc=LEFT_PAREN	 
+	  	DEFFUNCTION 
+	  	ruleName=NAME {
+	    	function = new Deffunction( ruleName.getText() );
+			functionRegistry.addFunction( function );
+	      	context = new ExecutionBuildContext( function, functionRegistry );
+	  	}
+		loc=LEFT_PAREN	 
+		 (v=VAR {
+			context.addVariable( function.addParameter( v.getText() ) );
+		 })*	  
+	 	 RIGHT_PAREN
+	  	(fc=lisp_list[context, new LispForm(context) ] { context.addFunction( (FunctionCaller) fc ); })*
+	  	RIGHT_PAREN
+	;
+*/	
+	
+/*	
+deffunction_params[BuildContext context]
+	:	loc=LEFT_PAREN	 
+		 (v=VAR {
+		    // this creates a parameter on the underlying function
+		 	context.createLocalVariable( v.getText() );
+		 })*	  
+	 	 RIGHT_PAREN	
+	;	
+*/
+
+deffunction returns[FunctionDescr functionDescr]
+    @init {
+        List content = null;
+        functionDescr = null;
+    }
+	:	LEFT_PAREN	
+    	t=DEFFUNCTION //{ list.add( new SymbolLispAtom( t.getText() ) ); }    	//deffunction
+    	name=lisp_atom //name
+    	params=lisp_form  // params
+		(form=lisp_form { if ( content == null ) content = new ArrayList(); content.add( form ); } )+					    	
+	    RIGHT_PAREN
+	    { functionDescr = FunctionHandlers.createFunctionDescr( name, params, content ); }
+	    //{ sExpression = new LispForm( ( SExpression[] ) list.toArray( new SExpression[ list.size () ] ) ); }
+	;
+	
+defrule returns [RuleDescr rule]
+	@init { 
+	        rule = null; 
+	        AndDescr lhs = null;
+	        PatternDescr colum = null;
+	        AttributeDescr module = null;	      
+            Set declarations = null;  
+	      }
+	:	loc=LEFT_PAREN 
+		
+		DEFRULE ruleName=NAME
+	  	{ 	  			  		
+	  		debug( "start rule: " + ruleName.getText() );
+	  		String ruleStr = ruleName.getText();
+
+	        if ( ruleStr.indexOf("::") >= 0 ) {
+	            String mod = ruleStr.substring(0, ruleStr.indexOf("::"));
+	            ruleStr = ruleStr.substring(ruleStr.indexOf("::")+2);
+				module = new AttributeDescr( "agenda-group", mod );
+				module.setLocation( offset(ruleName.getLine()), ruleName.getCharPositionInLine() );
+				module.setStartCharacter( ((CommonToken)ruleName).getStartIndex() );
+				module.setEndCharacter( ((CommonToken)ruleName).getStopIndex() );
+			}
+		    
+		    rule = new RuleDescr( ruleStr, null ); 
+		    if( module != null ) {
+		    	rule.addAttribute( module );
+		    }
+		        
+			rule.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			rule.setStartCharacter( ((CommonToken)loc).getStartIndex() ); 
+		
+			// not sure how you define where a LHS starts in clips, so just putting it here for now
+        	lhs = new AndDescr(); 
+  	        rule.setLhs( lhs ); 
+	        lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			lhs.setStartCharacter( ((CommonToken)loc).getStartIndex() );	
+			
+			rule.addAttribute( new AttributeDescr( "dialect", "clips") );	
+			
+			declarations = new HashSet();  											
+		}
+		documentation=STRING {
+	    	// do nothing here for now
+		}
+		ruleAttribute[rule]
+		
+		ce[lhs, declarations]*
+		
+		'=>'
+		
+		t=lisp_form { rule.setConsequence( t ); }
+		
+		RIGHT_PAREN
+	;
+
+
+ruleAttribute[RuleDescr rule]
+	:
+		( LEFT_PAREN 'declare'
+			( LEFT_PAREN d=salience { rule.addAttribute( d ); } RIGHT_PAREN )?
+		RIGHT_PAREN )?
+	;	
+
+salience returns [AttributeDescr d ]
+	@init {
+		d = null;
+	}
+	:	
+		loc=SALIENCE i=INT   
+		{
+			d = new AttributeDescr( "salience", i.getText() );
+			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
+			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
+			d.setEndCharacter( ((CommonToken)i).getStopIndex() );
+		}
+	;
+		
+
+ce[ConditionalElementDescr in_ce, Set declarations]
+	:	(   and_ce[in_ce, declarations]	
+		  | or_ce[in_ce, declarations]
+		  | not_ce[in_ce, declarations]
+		  | exists_ce[in_ce, declarations]		  
+ 		  | eval_ce[in_ce, declarations] 		  
+		  | normal_pattern[in_ce, declarations]
+		  | bound_pattern[in_ce, declarations]
+		)
+	;
+	
+and_ce[ConditionalElementDescr in_ce, Set declarations]
+    @init {
+        AndDescr andDescr= null;        
+    }
+	:	LEFT_PAREN	
+		AND {
+	    	andDescr = new AndDescr();
+			in_ce.addDescr( andDescr );
+		}
+		ce[andDescr, declarations]+		 
+		RIGHT_PAREN					
+	;	
+	
+or_ce[ConditionalElementDescr in_ce, Set declarations]
+    @init {
+        OrDescr orDescr= null;         
+    }
+	:	LEFT_PAREN	
+		OR {
+	    	orDescr = new OrDescr();
+			in_ce.addDescr( orDescr );
+		}
+		ce[orDescr, declarations]+		 
+		RIGHT_PAREN					
+	;	
+	
+not_ce[ConditionalElementDescr in_ce, Set declarations]
+    @init {
+        NotDescr notDescr= null;         
+    }
+	:	LEFT_PAREN	
+		NOT {
+			notDescr = new NotDescr();
+		    in_ce.addDescr( notDescr );
+		}
+		ce[notDescr, declarations]		 
+		RIGHT_PAREN					
+	;		
+	
+exists_ce[ConditionalElementDescr in_ce, Set declarations]
+    @init {
+        ExistsDescr existsDescr= null;        
+    }
+	:	LEFT_PAREN	
+		EXISTS {
+		    existsDescr = new ExistsDescr();
+		    in_ce.addDescr( existsDescr );
+		}
+		ce[existsDescr, declarations]		 
+		RIGHT_PAREN					
+	;		
+
+eval_ce[ConditionalElementDescr in_ce, Set declarations]
+	:	LEFT_PAREN	
+		TEST 
+		t=lisp_form { EvalDescr evalDescr = new EvalDescr(); evalDescr.setContent( t ); in_ce.addDescr( evalDescr ); }			 
+		RIGHT_PAREN					
+	;		
+
+normal_pattern[ConditionalElementDescr in_ce, Set declarations]
+    @init {
+        PatternDescr pattern = null;
+        ConditionalElementDescr top = null;
+    }
+	:	LEFT_PAREN 
+		name=NAME {
+			pattern = new PatternDescr(name.getText());
+			in_ce.addDescr( pattern );
+			top = pattern.getConstraint();
+			
+		}
+		field_constriant[top, declarations]* 	  
+		RIGHT_PAREN
+	;		
+	
+
+
+bound_pattern[ConditionalElementDescr in_ce, Set declarations]
+    @init {
+        PatternDescr pattern = null;
+        String identifier = null;
+        ConditionalElementDescr top = null;        
+    }
+	:	var=VAR {
+			identifier = var.getText();
+		}
+		ASSIGN_OP LEFT_PAREN name=NAME 
+		{
+			pattern = new PatternDescr(name.getText());
+			pattern.setIdentifier( identifier );
+			in_ce.addDescr( pattern );
+			top = pattern.getConstraint();				    
+		}
+		field_constriant[top, declarations]* 
+		RIGHT_PAREN	
+	;			
+	
+field_constriant[ConditionalElementDescr base, Set declarations] 
+	@init {
+     	List list = new ArrayList();
+		FieldBindingDescr fbd = null;
+		FieldConstraintDescr fc = null;
+		RestrictionConnectiveDescr top = null;		
+		String op = "==";
+	}    
+	:	
+		LEFT_PAREN f=NAME 
+		{
+			fc = new FieldConstraintDescr(f.getText());
+			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
+			fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
+			base.addDescr( fc );	
+			top = fc.getRestriction();		
+		}	  
+		
+		or_restr_connective[top, base, fc, declarations] 
+		RIGHT_PAREN		
+	;
+/*	
+connected_constraint[RestrictionConnectiveDescr rc, ConditionalElementDescr base]
+	:
+	restriction[rc, base]
+	( 
+	    AMPERSAND { rc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND)); }
+	    connected_constraint[rc, base]
+	| 
+	    PIPE {rc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR)); }
+	    connected_constraint[rc, base]
+	)?
+	;	
+*/
+
+
+or_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
+	options { 
+		backtrack=true;
+	}
+	@init {
+		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
+	}
+	:
+		and_restr_connective[or, ceBase, fcBase, declarations] 
+		( 
+			options {backtrack=true;}
+			: PIPE
+			{
+				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+			}
+			and_restr_connective[or, ceBase, fcBase, declarations] 
+		)*
+	;
+	finally {
+	        if( or.getRestrictions().size() == 1 ) {
+	                $rcBase.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
+	        } else if ( or.getRestrictions().size() > 1 ) {
+	        	$rcBase.addRestriction( or );
+	        }
+	}
+
+and_restr_connective[ RestrictionConnectiveDescr rcBase, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
+	@init {
+		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
+	}
+	:
+		restriction[and, ceBase, fcBase, declarations] 
+		( AMPERSAND restriction[and, ceBase, fcBase, declarations] )*
+		/*
+		(	options {backtrack=true;}
+		:	t=AMPERSAND 
+			{
+				location.setType(Location.LOCATION_LHS_INSIDE_CONDITION_OPERATOR);
+			}
+			restriction[and, ceBase] 
+		)*
+		*/
+	;
+	finally {
+	        if( and.getRestrictions().size() == 1) {
+	                $rcBase.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
+	        } else if ( and.getRestrictions().size() > 1 ) {
+	        	$rcBase.addRestriction( and );
+	        }
+	}
+	
+restriction[RestrictionConnectiveDescr rc, ConditionalElementDescr base, FieldConstraintDescr fcBase, Set declarations ]
+	@init {
+			String op = "==";
+	}
+	:	(TILDE{op = "!=";})?	 	  	 
+		(	predicate_constraint[rc, op, base]	  	  	
+	  	|	return_value_restriction[op, rc]
+	  	|	variable_restriction[op, rc, base, fcBase, declarations]
+	  	| 	lc=literal_restriction {
+     	    			rc.addRestriction( new LiteralRestrictionDescr(op, lc) );
+		      		op = "==";
+		        } 	  	  	  
+		)		
+	;		
+
+predicate_constraint[RestrictionConnectiveDescr rc, String op, ConditionalElementDescr base]	
+	:	COLON
+		t=lisp_form { $rc.addRestriction( new PredicateDescr( t ) ); }	
+		
+	;
+
+
+return_value_restriction[String op, RestrictionConnectiveDescr rc]
+	:	EQUALS 
+		t=lisp_form {rc.addRestriction( new ReturnValueRestrictionDescr (op, t ) ); }		
+	;
+		
+//will add a declaration field binding, if this is the first time the name  is used		
+variable_restriction[String op, RestrictionConnectiveDescr rc, ConditionalElementDescr ceBase, FieldConstraintDescr fcBase, Set declarations ]
+	:	VAR {
+	        if ( declarations.contains( $VAR.text ) ) {
+				rc.addRestriction( new VariableRestrictionDescr(op, $VAR.text) );
+		 	} else {
+		 		FieldBindingDescr fbd = new FieldBindingDescr();
+		 		fbd.setIdentifier( $VAR.text );		
+		 		fbd.setFieldName( fcBase.getFieldName() ); 		
+		 		ceBase.insertBeforeLast( FieldConstraintDescr.class, fbd );
+		 		declarations.add( $VAR.text );
+		 	}
+		}
+	;	
+
+	
+literal_restriction returns [String text]
+	@init {
+		text = null;
+	}
+	:
+	    t=literal {
+	    	text = t;
+	    }
+	;
+
+/* 
+eval_sExpressions[MVELClipsContext context] returns[List<SExpression> list]
+    @init {
+		list = new ArrayList<SExpression>();
+    }
+	:
+		(  	a=lisp_list { list.add( a ); }
+		   | a=deffunction { FunctionHandlers.dump(a, null, context); }
+		)*
+//		{ sExpressions = ( SExpression[] ) list.toArray( new SExpression[ list.size () ] ); }
+	;
+*/	
+lisp_form returns[LispForm lispForm]
+    @init {
+        List list = new ArrayList();
+        lispForm = null;
+    }
+	:	LEFT_PAREN	
+	
+		(
+		    t=NAME { list.add( new SymbolLispAtom( t.getText() ) ); }
+		    |
+		    t=VAR { list.add( new VariableLispAtom( t.getText(), context ) ); }	    
+	    )
+		(		a=lisp_atom	{ list.add( a ); }
+			|	l=lisp_form	{ list.add( l ); }
+		)*								    	
+	    RIGHT_PAREN
+	    { lispForm = new LispForm( ( SExpression[] ) list.toArray( new SExpression[ list.size () ] ) ); }
+	;
+	
+lisp_atom returns[SExpression sExpression] 
+	@init {
+		sExpression  =  null;		
+	}
+	:		
+		(		
+			 	t=VAR		{ sExpression = new VariableLispAtom( t.getText(), context ); }
+			|	t=STRING	{ sExpression = new StringLispAtom( getString( t ) ); }											
+			|	t=FLOAT		{ sExpression = new FloatLispAtom( t.getText() ); }
+			|	t=INT		{ sExpression = new IntLispAtom( t.getText() ); }
+			| 	t=BOOL		{ sExpression = new BoolLispAtom( t.getText() ); }			
+			| 	t=NULL		{ sExpression = new NullLispAtom( null ); }						
+	        |   t=NAME		{ sExpression = new SymbolLispAtom( "\"" +t.getText() + "\""); }				
+
+		)		
+	;		
+	
+literal returns [String text]
+	@init {
+		text = null;
+	}
+	:	(   t=STRING { text = getString( t ); } 
+		  | t=NAME     { text = t.getText(); }
+		  | t=INT    { text = t.getText(); }
+		  | t=FLOAT	 { text = t.getText(); }
+		  | t=BOOL 	 { text = t.getText(); }
+		  | t=NULL   { text = null; }
+		)
+	;
+	
+WS      :       (	' '
+                |	'\t'
+                |	'\f'
+                |	EOL
+                )
+                { $channel=HIDDEN; }
+        ;                      
+        
+DEFRULE		:	'defrule';
+DEFFUNCTION :	'deffunction';
+OR 			:	'or';
+AND 		:	'and';
+NOT 		:	'not';
+EXISTS 		:	'exists';
+TEST 		:	'test';
+
+NULL		:	'null';
+
+DECLARE 	:	'declare';        		
+
+SALIENCE	:	'salience';
+
+//MODIFY  :	'modify';
+
+fragment
+EOL 	:	     
+   		(       ( '\r\n' )=> '\r\n'  // Evil DOS
+                |       '\r'    // Macintosh
+                |       '\n'    // Unix (the right way)
+                )
+        ;  
+        
+INT	
+	:	('-')?('0'..'9')+
+	;
+
+FLOAT
+	:	('-')?('0'..'9')+ '.' ('0'..'9')+
+	;
+
+STRING
+    :  ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
+     | ('\'' ( EscapeSequence | ~('\\'|'\'') )* '\'')
+    ;
+
+fragment
+HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
+
+fragment
+EscapeSequence
+    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
+    |   UnicodeEscape
+    |   OctalEscape
+    ;
+
+fragment
+OctalEscape
+    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7') ('0'..'7')
+    |   '\\' ('0'..'7')
+    ;
+
+fragment
+UnicodeEscape
+    :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
+    ;
+
+BOOL
+	:	('true'|'false') 
+	;
+	
+VAR 	: '?' SYMBOL_CHAR+
+        ;
+
+SH_STYLE_SINGLE_LINE_COMMENT	
+	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
+                { $channel=HIDDEN; }
+	;
+        
+        
+C_STYLE_SINGLE_LINE_COMMENT	
+	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
+                { $channel=HIDDEN; }
+	;
+
+
+LEFT_PAREN
+	:	'('
+	;
+
+RIGHT_PAREN
+	:	')'
+	;
+        
+LEFT_SQUARE
+	:	'['
+	;
+
+RIGHT_SQUARE
+	:	']'
+	;        
+
+LEFT_CURLY
+	:	'{'
+	;
+
+RIGHT_CURLY
+	:	'}'
+	;
+	
+TILDE	:	'~'
+	;	
+	
+AMPERSAND 
+	:	'&'
+	;
+	
+PIPE
+	:	'|'
+	;		
+	
+ASSIGN_OP 
+	:	'<-'	
+	;
+
+COLON	:	':';
+
+EQUALS	:	'=';	
+        
+MULTI_LINE_COMMENT
+	:	'/*' (options{greedy=false;} : .)* '*/'
+                { $channel=HIDDEN; }
+	;
+
+NAME :	SYMBOL ;
+
+fragment
+SYMBOL : FIRST_SYMBOL_CHAR SYMBOL_CHAR* ;	
+
+// allowed <
+// not allowed ?
+fragment
+FIRST_SYMBOL_CHAR : ('a'..'z'|'A'..'Z'|'0'..'9'|'!'|'$'|'%'|'^'|'*'|'_'|'-'|'+'|'='|'\\'|'/'|'@'|'#'|':'|'>'|'<'|','|'.'|'['|']'|'{'|'}');	
+
+// allowed ? 
+// not allowed <
+fragment
+SYMBOL_CHAR : ('a'..'z'|'A'..'Z'|'0'..'9'|'!'|'$'|'%'|'^'|'*'|'_'|'-'|'+'|'='|'\\'|'/'|'@'|'#'|':'|'>'|','|'.'|'['|']'|'{'|'}'|'?');		
+
+
+

Deleted: labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/functions.conf
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/functions.conf	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/functions.conf	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,28 +0,0 @@
-#working with vars
-org.drools.clp.functions.BindFunction
-org.drools.clp.functions.ModifyFunction
-org.drools.clp.functions.CreateListFunction
-
-#flow control
-org.drools.clp.functions.IfFunction
-org.drools.clp.functions.BreakFunction
-org.drools.clp.functions.SwitchFunction
-org.drools.clp.functions.SwitchCaseFunction
-org.drools.clp.functions.SwitchDefaultFunction
-org.drools.clp.functions.WhileFunction
-org.drools.clp.functions.ForeachFunction
-org.drools.clp.functions.PrognFunction
-
-#math comparators
-org.drools.clp.functions.LessThanFunction
-org.drools.clp.functions.GreaterThanOrEqualFunction
-org.drools.clp.functions.EqFunction
-
-#math operators
-org.drools.clp.functions.PlusFunction
-org.drools.clp.functions.MinusFunction
-org.drools.clp.functions.DivideFunction
-org.drools.clp.functions.MultiplyFunction
-
-#io
-org.drools.clp.functions.PrintoutFunction

Copied: labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/functions.conf (from rev 18196, labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/clp/functions.conf)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/functions.conf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/main/resources/org/drools/cips/functions.conf	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,28 @@
+#working with vars
+org.drools.clp.functions.BindFunction
+org.drools.clp.functions.ModifyFunction
+org.drools.clp.functions.CreateListFunction
+
+#flow control
+org.drools.clp.functions.IfFunction
+org.drools.clp.functions.BreakFunction
+org.drools.clp.functions.SwitchFunction
+org.drools.clp.functions.SwitchCaseFunction
+org.drools.clp.functions.SwitchDefaultFunction
+org.drools.clp.functions.WhileFunction
+org.drools.clp.functions.ForeachFunction
+org.drools.clp.functions.PrognFunction
+
+#math comparators
+org.drools.clp.functions.LessThanFunction
+org.drools.clp.functions.GreaterThanOrEqualFunction
+org.drools.clp.functions.EqFunction
+
+#math operators
+org.drools.clp.functions.PlusFunction
+org.drools.clp.functions.MinusFunction
+org.drools.clp.functions.DivideFunction
+org.drools.clp.functions.MultiplyFunction
+
+#io
+org.drools.clp.functions.PrintoutFunction

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/AddFunctionTest.java (from rev 18083, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/AddFunctionTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/AddFunctionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/AddFunctionTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,111 @@
+package org.drools.clips;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.base.ClassObjectType;
+import org.drools.clips.functions.PlusFunction;
+import org.drools.clips.valuehandlers.CLPLocalDeclarationVariable;
+import org.drools.clips.valuehandlers.CLPPreviousDeclarationVariable;
+import org.drools.clips.valuehandlers.FunctionCaller;
+import org.drools.clips.valuehandlers.IndexedLocalVariableValue;
+import org.drools.clips.valuehandlers.ObjectValueHandler;
+import org.drools.clips.valuehandlers.TempTokenVariable;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.rule.Pattern;
+import org.drools.rule.Declaration;
+import org.drools.spi.PatternExtractor;
+import org.drools.spi.ObjectType;
+
+import junit.framework.TestCase;
+
+public class AddFunctionTest extends TestCase {
+    public void testAdd() {
+        ValueHandler val1 = new ObjectValueHandler( new BigDecimal( 10 ) );
+        ValueHandler val2 = new ObjectValueHandler( new BigDecimal( 10 ) );
+
+        ValueHandler[] params = new ValueHandler[]{val1, val2};
+        PlusFunction add = new PlusFunction();
+
+        assertEquals( new BigDecimal( 20 ),
+                      add.execute( params,
+                                   null ).getObject( null ) );
+    }
+
+    public void testNestedAdd() {
+        ValueHandler val1 = new ObjectValueHandler( new BigDecimal( 10 ) );
+        ValueHandler val2 = new ObjectValueHandler( new BigDecimal( 10 ) );
+        ValueHandler val3 = new ObjectValueHandler( new BigDecimal( 10 ) );
+
+        FunctionCaller functionValue = new FunctionCaller( new PlusFunction() );
+        functionValue.addParameter( val1 );
+        functionValue.addParameter( val2 );
+
+        ValueHandler[] params = new ValueHandler[]{val3, functionValue};
+
+        PlusFunction add = new PlusFunction();
+
+        assertEquals( new BigDecimal( 30 ),
+                      add.execute( params,
+                                   null ).getObject( null ) );
+    }
+
+    public void testNestedAddWithVars() {
+        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+        InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
+
+        InternalFactHandle factHandle = (InternalFactHandle) workingMemory.insert( new BigDecimal( 10 ) );
+        ReteTuple tuple = new ReteTuple( factHandle );
+
+        ObjectType objectType = new ClassObjectType( BigDecimal.class );
+        Pattern pattern0 = new Pattern( 0,
+                                        objectType );
+        Pattern pattern1 = new Pattern( 1,
+                                        objectType );
+        PatternExtractor extractor = new PatternExtractor( objectType );
+
+        Map variables = new HashMap();
+        variables.put( "pd",
+                       new CLPPreviousDeclarationVariable( new Declaration( "pd",
+                                                                            extractor,
+                                                                            pattern0 ), workingMemory ) );
+        variables.put( "ld",
+                       new CLPLocalDeclarationVariable( new Declaration( "ld",
+                                                                         extractor,
+                                                                         pattern1
+                                                                         ), workingMemory ) );
+
+        ValueHandler val1 = new TempTokenVariable( "pd" );
+        ValueHandler val2 = new IndexedLocalVariableValue( "lv",
+                                                    0 );
+        ValueHandler val3 = new TempTokenVariable( "ld" );
+
+        ExecutionContext context = new ExecutionContextImpl( workingMemory,
+                                                         tuple,
+                                                         new BigDecimal( 10 ),
+                                                         1 );
+        context.setLocalVariable( 0,
+                                  new ObjectValueHandler( new BigDecimal( 10 ) ) );
+
+        FunctionCaller functionValue = new FunctionCaller( new PlusFunction() );
+        functionValue.addParameter( val1 );
+        functionValue.addParameter( val2 );
+
+        PlusFunction add = new PlusFunction();
+
+        FunctionCaller f = new FunctionCaller( add );
+        f.addParameter( val3 );
+        f.addParameter( functionValue );
+
+        f.replaceTempTokens( variables );
+
+        assertEquals( new BigDecimal( 30 ),
+                      f.getBigDecimalValue( context ) );
+
+    }
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/BlockExecutionTest.java (from rev 18181, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/BlockExecutionTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/BlockExecutionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/BlockExecutionTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,60 @@
+package org.drools.clips;
+
+import java.math.BigDecimal;
+
+import junit.framework.TestCase;
+
+import org.drools.Person;
+import org.drools.clips.functions.BindFunction;
+import org.drools.clips.functions.ModifyFunction;
+import org.drools.clips.functions.PlusFunction;
+import org.drools.clips.valuehandlers.FunctionCaller;
+import org.drools.clips.valuehandlers.ListValueHandler;
+import org.drools.clips.valuehandlers.LongValueHandler;
+import org.drools.clips.valuehandlers.ObjectValueHandler;
+
+public class BlockExecutionTest extends TestCase {
+    
+    XFunctionRegistry registry;
+    
+    public void setUp() {
+        this.registry = new XFunctionRegistry( BuiltinFunctions.getInstance() );
+    }    
+    
+    public void testAddWithModify() {
+        BlockExecutionEngine engine = new BlockExecutionEngine();        
+        BuildContext build = new ExecutionBuildContext(engine, this.registry );                
+        
+        FunctionCaller addCaller = new FunctionCaller( new PlusFunction() );
+        addCaller.addParameter( new ObjectValueHandler( new BigDecimal( 20) ) );
+        addCaller.addParameter( new LongValueHandler( "11" ) );
+                
+        FunctionCaller bindCaller = new FunctionCaller( new BindFunction() );
+        bindCaller.addParameter( build.createLocalVariable( "?x" ) );
+        bindCaller.addParameter( addCaller );
+        
+        engine.addFunction( bindCaller );
+        
+        
+        FunctionCaller modifyCaller = new FunctionCaller( new ModifyFunction() );        
+        build.createLocalVariable( "?p" );        
+        modifyCaller.addParameter( build.getVariableValueHandler( "?p" ) );
+        
+        ListValueHandler list = new ListValueHandler();
+        list.add( new ObjectValueHandler( "age") );
+        list.add( build.getVariableValueHandler( "?x" ) );
+        modifyCaller.addParameter( list );
+        
+        ExecutionContext context = new ExecutionContextImpl(null, null, 2);
+        Person p = new Person("mark");
+        context.setLocalVariable( 1, new ObjectValueHandler( p ) );
+        
+        engine.addFunction( modifyCaller );
+        
+        engine.execute( context );
+        
+        assertEquals( 31, p.getAge() );
+        
+        
+    }
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/CompiledFunctionsTest.java (from rev 18181, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/CompiledFunctionsTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/CompiledFunctionsTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/CompiledFunctionsTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,344 @@
+package org.drools.clips;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.Lexer;
+import org.antlr.runtime.TokenStream;
+import org.drools.Person;
+import org.drools.clips.valuehandlers.IndexedLocalVariableValue;
+import org.drools.clips.valuehandlers.ListValueHandler;
+import org.drools.clips.valuehandlers.LongValueHandler;
+import org.drools.clips.valuehandlers.ObjectValueHandler;
+
+public class CompiledFunctionsTest extends TestCase {
+    private CLPParser parser;
+
+    public void testPrintout() throws Exception {        
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(printout d xx (eq 1 1) ?c (create$ (+ 1 1) x y) zzz)" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         1 );
+
+        Map vars = new HashMap();
+        vars.put( "?c",
+                  new ObjectValueHandler( "brie" ) );
+        engine.replaceTempTokens( vars );
+
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();                
+        context.addPrintoutRouter( "d", new PrintStream(bais) );
+        
+        engine.execute( context );
+        
+        assertEquals( "xxtruebrie2xyzzz", new String( bais.toByteArray() ) );
+    }
+    
+    public void testBindAndModify() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(bind ?x (+ 20 11) ) (modify ?p (age ?x) )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         2 );
+
+        Map vars = new HashMap();
+        Person p = new Person( "mark" );
+        vars.put( "?p",
+                  new ObjectValueHandler( p ) );
+        engine.replaceTempTokens( vars );
+
+        engine.execute( context );
+
+        assertEquals( 31,
+                      p.getAge() );
+    }
+
+    public void testSimpleCreate$() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(bind ?x (create$ 1 2 3) )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         1 );
+        engine.execute( context );
+
+        ListValueHandler list = (ListValueHandler) context.getLocalVariable( 0 );
+
+        assertEquals( 3,
+                      list.size() );
+
+        assertEquals( 1,
+                      list.getList()[0].getIntValue( context ) );
+        assertEquals( 2,
+                      list.getList()[1].getIntValue( context ) );
+        assertEquals( 3,
+                      list.getList()[2].getIntValue( context ) );
+    }
+
+    public void testNestedCreate$() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(bind ?x (create$ 1 2 (+ 1 2) ) ) (bind ?y (create$ (+ 1 0) ?x (create$ a b ?x (+ 1 1) ) 3) )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         2 );
+        engine.execute( context );
+
+        // check ?x
+        ListValueHandler list = (ListValueHandler) context.getLocalVariable( 0 );
+        assertEquals( 3,
+                      list.size() );
+        assertEquals( 1,
+                      list.getList()[0].getIntValue( context ) );
+        assertEquals( 2,
+                      list.getList()[1].getIntValue( context ) );
+        assertEquals( new BigDecimal( 3 ),
+                      list.getList()[2].getBigDecimalValue( context ) );
+
+        // check ?y
+        list = (ListValueHandler) context.getLocalVariable( 1 );
+        assertEquals( 11,
+                      list.size() );
+
+        assertEquals( new BigDecimal( 1 ),
+                      list.getList()[0].getBigDecimalValue( context ) );
+        assertEquals( 1,
+                      list.getList()[1].getIntValue( context ) );
+        assertEquals( 2,
+                      list.getList()[2].getIntValue( context ) );
+        assertEquals( new BigDecimal( 3 ),
+                      list.getList()[3].getBigDecimalValue( context ) );
+        assertEquals( "a",
+                      list.getList()[4].getStringValue( context ) );
+        assertEquals( "b",
+                      list.getList()[5].getStringValue( context ) );
+        assertEquals( 1,
+                      list.getList()[6].getIntValue( context ) );
+        assertEquals( 2,
+                      list.getList()[7].getIntValue( context ) );
+        assertEquals( new BigDecimal( 3 ),
+                      list.getList()[8].getBigDecimalValue( context ) );
+        assertEquals( new BigDecimal( 2 ),
+                      list.getList()[9].getBigDecimalValue( context ) );
+        assertEquals( 3,
+                      list.getList()[10].getIntValue( context ) );
+    }
+
+    public void testIf() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(if (< ?x ?y ) then (modify ?p (age 15) ) (printout d 15) else (modify ?p (age 5)) (printout d 5) )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         2 );
+
+        Person p = new Person( "mark" );
+        Map vars = new HashMap();
+
+        vars.put( "?x",
+                  new LongValueHandler( 10 ) );
+        vars.put( "?y",
+                  new IndexedLocalVariableValue( "?y",
+                                          0 ) );
+        vars.put( "?p",
+                  new ObjectValueHandler( p ) );
+        engine.replaceTempTokens( vars );
+
+        context.setLocalVariable( 0,
+                                  new LongValueHandler( 20 ) );        
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();                
+        context.addPrintoutRouter( "d", new PrintStream(bais) );        
+        engine.execute( context );
+        assertEquals( 15,
+                      p.getAge() );
+        assertEquals( "15", new String( bais.toByteArray() ) );
+        
+        
+        context.setLocalVariable( 0,
+                                  new LongValueHandler( 7 ) );
+        bais = new ByteArrayOutputStream();                
+        context.addPrintoutRouter( "d", new PrintStream(bais) );          
+        engine.execute( context );
+        assertEquals( 5,
+                      p.getAge() );
+        assertEquals( "5", new String( bais.toByteArray() ) );
+    }
+
+    public void testWhile() throws Exception {               
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(while (< ?x ?y) do (bind ?x (+ ?x 1)) (printout d ?x \" \") )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         2 );
+
+        Map vars = new HashMap();
+
+        vars.put( "?x",
+                  new IndexedLocalVariableValue( "?x",
+                                          0 ) );
+        vars.put( "?y",
+                  new IndexedLocalVariableValue( "?y",
+                                          1 ) );
+        engine.replaceTempTokens( vars );
+
+        context.setLocalVariable( 0,
+                                  new LongValueHandler( 0 ) );
+        context.setLocalVariable( 1,
+                                  new LongValueHandler( 10 ) );
+        
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();              
+        context.addPrintoutRouter( "d", new PrintStream(bais) );                                
+
+        engine.execute( context );
+        assertEquals( new BigDecimal( 10 ),
+                      context.getLocalVariable( 0 ).getBigDecimalValue( context ) );
+        
+        assertEquals( "1 2 3 4 5 6 7 8 9 10 ", new String( bais.toByteArray() ) );        
+    }
+
+    public void testForeach() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(bind ?x 0) (foreach ?e (create$ 1 2 3) (bind ?x (+ ?x ?e) ) (printout d ?x \" \") )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         2 );
+        
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();              
+        context.addPrintoutRouter( "d", new PrintStream(bais) );         
+        
+        engine.execute( context );
+        assertEquals( new BigDecimal( 6 ),
+                      context.getLocalVariable( 0 ).getBigDecimalValue( context ) );
+        
+        assertEquals( "1 3 6 ", new String( bais.toByteArray() ) );          
+    }
+    
+    public void testSwitch() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(bind ?cheese ?var) (switch ?cheese (case stilton then (bind ?x ?cheese ) (break) ) (case cheddar then (bind ?x ?cheese ) (break) ) (default (bind ?x \"default\" ) ) )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         3 );
+
+        Map vars = new HashMap();
+
+        vars.put( "?var",
+                  new IndexedLocalVariableValue( "?var",
+                                          2 ) );        
+        engine.replaceTempTokens( vars );
+
+        // try it with stilton
+        context.setLocalVariable( 2,
+                                  new ObjectValueHandler( "stilton" ) );
+        engine.execute( context );        
+        assertEquals( "stilton" ,
+                      context.getLocalVariable( 1 ).getObject( context ) );
+
+        // try it with cheddar        
+        context.setLocalVariable( 2,
+                                  new ObjectValueHandler( "cheddar" ) );
+        engine.execute( context );        
+        assertEquals( "cheddar" ,
+                      context.getLocalVariable( 1 ).getObject( context ) );        
+        
+        // try it with a brie, which has no matching case        
+        context.setLocalVariable( 2,
+                                  new ObjectValueHandler( "brie" ) );
+        engine.execute( context );        
+        assertEquals( "default" ,
+                      context.getLocalVariable( 1 ).getObject( context ) );                          
+    }    
+    
+    public void testProgn() throws Exception {
+        BlockExecutionEngine engine = (BlockExecutionEngine) parse( "(bind ?n 2) (while (progn (bind ?n (* ?n ?n)) (< ?n 1000)) do (printout d ?n) )" ).execution_block();
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         2 );
+        
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();              
+        context.addPrintoutRouter( "d", new PrintStream(bais) );                                
+
+        engine.execute( context );
+        
+        assertEquals( "416256", new String( bais.toByteArray() ) );          
+    }
+    
+    public void testDefTemplate() throws Exception {
+        Deffunction engine = (Deffunction) parse( "(deffunction factorial (?n) (if (>= ?n 1) then (* ?n (factorial (- ?n 1))) else 1)) " ).deffunction();
+        
+        ExecutionContext context = new ExecutionContextImpl( null,
+                                                         null,
+                                                         1 );
+
+        ByteArrayOutputStream bais = new ByteArrayOutputStream();              
+        context.addPrintoutRouter( "d", new PrintStream(bais) );                                              
+        
+        assertEquals( 720,engine.execute( new ValueHandler[] { new LongValueHandler( 6 ) }, context ).getBigDecimalValue( context ).longValue() );    
+    }    
+
+    private CLPParser parse(final String text) throws Exception {
+        this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
+        return this.parser;
+    }
+
+    private CLPParser parse(final String source,
+                            final String text) throws Exception {
+        this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
+        this.parser.setSource( source );
+        return this.parser;
+    }
+
+    private Reader getReader(final String name) throws Exception {
+        final InputStream in = getClass().getResourceAsStream( name );
+
+        return new InputStreamReader( in );
+    }
+
+    private CLPParser parseResource(final String name) throws Exception {
+        Reader reader = getReader( name );
+
+        final StringBuffer text = new StringBuffer();
+
+        final char[] buf = new char[1024];
+        int len = 0;
+
+        while ( (len = reader.read( buf )) >= 0 ) {
+            text.append( buf,
+                         0,
+                         len );
+        }
+
+        return parse( name,
+                      text.toString() );
+    }
+
+    private CharStream newCharStream(final String text) {
+        return new ANTLRStringStream( text );
+    }
+
+    private CLPLexer newLexer(final CharStream charStream) {
+        return new CLPLexer( charStream );
+    }
+
+    private TokenStream newTokenStream(final Lexer lexer) {
+        return new CommonTokenStream( lexer );
+    }
+
+    private CLPParser newParser(final TokenStream tokenStream) {
+        final CLPParser p = new CLPParser( tokenStream );
+        p.setFunctionRegistry( new XFunctionRegistry( BuiltinFunctions.getInstance() ) );
+        //p.setParserDebug( true );
+        return p;
+    }
+
+    private void assertEqualsIgnoreWhitespace(final String expected,
+                                              final String actual) {
+        final String cleanExpected = expected.replaceAll( "\\s+",
+                                                          "" );
+        final String cleanActual = actual.replaceAll( "\\s+",
+                                                      "" );
+
+        assertEquals( cleanExpected,
+                      cleanActual );
+    }
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/DeffunctionTest.java (from rev 18083, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/DeffunctionTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/DeffunctionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/DeffunctionTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,36 @@
+package org.drools.clips;
+
+import java.math.BigDecimal;
+
+import org.drools.clips.Function;
+import org.drools.clips.functions.PlusFunction;
+import org.drools.clips.valuehandlers.FunctionCaller;
+import org.drools.clips.valuehandlers.IndexedLocalVariableValue;
+import org.drools.clips.valuehandlers.LongValueHandler;
+
+import junit.framework.TestCase;
+
+public class DeffunctionTest extends TestCase {
+    public void testSimpleDeffunction() {
+        Deffunction function = new Deffunction("x");
+         
+        ValueHandler a = function.addParameter( "a" );        
+        ValueHandler b =function.addParameter( "b" );
+        
+        Function add = new PlusFunction();
+        FunctionCaller caller = new FunctionCaller(add);
+        caller.addParameter( a );
+        caller.addParameter( b );
+                
+        function.addFunction( caller );
+                
+        ExecutionContext context = new ExecutionContextImpl(null, null, 2);
+        ValueHandler q = new IndexedLocalVariableValue("q", 0);
+        q.setValue( context, new LongValueHandler( 10 ) );
+        
+        ValueHandler w = new IndexedLocalVariableValue("w", 1);
+        w.setValue( context,  new LongValueHandler( 7 ) );
+        
+        assertEquals( new BigDecimal( 17 ), function.execute( new ValueHandler[] { q, w }, context ).getBigDecimalValue( context ) );
+    }      
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/FunctionFactoryTest.java (from rev 18181, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/FunctionFactoryTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/FunctionFactoryTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/FunctionFactoryTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,14 @@
+package org.drools.clips;
+
+import junit.framework.TestCase;
+
+public class FunctionFactoryTest extends TestCase {
+    public void testInit() {
+        XFunctionRegistry factory = new XFunctionRegistry( BuiltinFunctions.getInstance() );
+        
+        // make sure some core functions are there
+        assertSame( "+", factory.getFunction( "+" ).getName() );
+        assertSame( "bind" , factory.getFunction( "bind" ).getName() );
+        assertSame( "modify" , factory.getFunction( "modify" ).getName() );
+    }
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/LhsClpParserTest.java (from rev 18181, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/LhsClpParserTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/LhsClpParserTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/LhsClpParserTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,438 @@
+package org.drools.clips;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.Lexer;
+import org.antlr.runtime.TokenStream;
+import org.drools.clips.valuehandlers.DoubleValueHandler;
+import org.drools.clips.valuehandlers.FunctionCaller;
+import org.drools.clips.valuehandlers.LongValueHandler;
+import org.drools.lang.descr.AndDescr;
+import org.drools.lang.descr.AttributeDescr;
+import org.drools.lang.descr.EvalDescr;
+import org.drools.lang.descr.ExistsDescr;
+import org.drools.lang.descr.FieldBindingDescr;
+import org.drools.lang.descr.FieldConstraintDescr;
+import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.NotDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
+import org.drools.lang.descr.PredicateDescr;
+import org.drools.lang.descr.RestrictionConnectiveDescr;
+import org.drools.lang.descr.ReturnValueRestrictionDescr;
+import org.drools.lang.descr.RuleDescr;
+
+public class LhsClpParserTest extends TestCase {
+
+    private CLPParser parser;
+    
+    XFunctionRegistry registry;
+    
+    public void setUp() {
+        this.registry = new XFunctionRegistry( BuiltinFunctions.getInstance() );
+    }
+    
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        this.parser = null;
+    }
+
+    public void testParseFunction() throws Exception {        
+        BuildContext context = new ExecutionBuildContext( new CLPPredicate(), this.registry );
+        FunctionCaller fc = ( FunctionCaller ) parse( "(< 1 2)" ).lisp_list( context, new LispForm2(context) );
+        
+        assertEquals( "<", fc.getName() );        
+        assertEquals( new LongValueHandler( 1 ), fc.getParameters()[0] );
+        assertEquals( new LongValueHandler( 2 ), fc.getParameters()[1] );
+    }
+    
+    public void testPatternsRule() throws Exception {
+        // the first pattern bellowshould generate a descriptor tree like that:
+        //            Pattern[person]
+        //                 |
+        //                AND
+        //               /   \
+        //              FB    FC[person name]
+        //                     |
+        //                     OR
+        //          +----------|------------+
+        //         LR         LR          AND
+        //                                /   \
+        //                              RVR   PC
+        
+        // MARK: is it valid to add a predicate restriction as part of a field constraint? I mean, shouldn't
+        // the predicate be out of the (name ...) scope? 
+        RuleDescr rule = parse( "(defrule xxx ?b <- (person (name \"yyy\"&?bf|~\"zzz\"|~=(+ 2 3)&:(< 1 2)) ) ?c <- (hobby (type ?bf2&~iii) (rating fivestar) ) => )" ).defrule();
+
+        assertEquals( "xxx",
+                      rule.getName() );
+
+        AndDescr lhs = rule.getLhs();
+        List lhsList = lhs.getDescrs();
+        assertEquals( 2,
+                      lhsList.size() );
+
+        // Parse the first pattern
+        PatternDescr personPattern = (PatternDescr) lhsList.get( 0 );
+        assertEquals( "?b",
+                      personPattern.getIdentifier() );
+        assertEquals( "person",
+                      personPattern.getObjectType() );
+
+        List colList = personPattern.getDescrs();
+        assertEquals( 2,
+                      colList.size() );
+        
+        // first, we have a field binding
+        FieldBindingDescr fbd = (FieldBindingDescr) colList.get( 0 );
+        assertEquals( "?bf",
+                      fbd.getIdentifier() );
+        assertEquals( "name",
+                      fbd.getFieldName() );
+        
+        // then, we have a field constraint
+        FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) colList.get( 1 );
+        assertEquals( "name",
+                      fieldConstraintDescr.getFieldName() );
+        RestrictionConnectiveDescr root = (RestrictionConnectiveDescr) fieldConstraintDescr.getRestriction();
+        assertEquals( 1,
+                      root.getRestrictions().size() );
+        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) root.getRestrictions().get( 0 );
+        assertEquals( RestrictionConnectiveDescr.OR, 
+                      or.getConnective() );
+        
+        List restrictionList = or.getRestrictions();
+
+        assertEquals( 3,
+                      restrictionList.size() );
+
+        // first we have a literal restriction
+        LiteralRestrictionDescr litDescr = (LiteralRestrictionDescr) restrictionList.get( 0 );
+        assertEquals( "==",
+                      litDescr.getEvaluator() );
+        assertEquals( "yyy",
+                      litDescr.getText() );
+
+        // second, we have another literal restriction
+        litDescr = (LiteralRestrictionDescr) restrictionList.get( 1 );
+        assertEquals( "!=",
+                      litDescr.getEvaluator() );
+        assertEquals( "zzz",
+                      litDescr.getText() );
+
+        // third, we have an AND restriction connective
+        RestrictionConnectiveDescr and = (RestrictionConnectiveDescr) restrictionList.get( 2 );
+        assertEquals( RestrictionConnectiveDescr.AND,
+                      and.getConnective() );
+        assertEquals( 2, 
+                      and.getRestrictions().size() );
+        
+        ReturnValueRestrictionDescr retDescr = (ReturnValueRestrictionDescr) and.getRestrictions().get( 0 );
+        assertEquals( "!=",
+                      retDescr.getEvaluator() );
+        CLPReturnValue clprv = ( CLPReturnValue ) retDescr.getContent();
+        FunctionCaller fc = clprv.getFunctions()[0];
+        assertEquals( "+", fc.getName() );        
+        assertEquals( new LongValueHandler( 2 ), fc.getParameters()[0] );
+        assertEquals( new LongValueHandler( 3 ), fc.getParameters()[1] );       
+
+        // ----------------
+        // this is how it would be compatible to our core engine
+        PredicateDescr predicateDescr = (PredicateDescr) and.getRestrictions().get( 1 );        
+        CLPPredicate clpp = ( CLPPredicate ) predicateDescr.getContent();
+        fc = clpp.getFunctions()[0];
+        assertEquals( "<", fc.getName() );        
+        assertEquals( new LongValueHandler( 1 ), fc.getParameters()[0] );
+        assertEquals( new LongValueHandler( 2 ), fc.getParameters()[1] );        
+
+        // -----------------
+        // Parse the second column
+        PatternDescr hobbyPattern = (PatternDescr) lhsList.get( 1 );
+        assertEquals( "?c",
+                      hobbyPattern.getIdentifier() );
+        assertEquals( "hobby",
+                      hobbyPattern.getObjectType() );
+
+        colList = hobbyPattern.getDescrs();
+        assertEquals( 3,
+                      colList.size() );
+
+        fbd = (FieldBindingDescr) colList.get( 0 );
+        assertEquals( "?bf2",
+                      fbd.getIdentifier() );
+        assertEquals( "type",
+                      fbd.getFieldName() );
+        
+        fieldConstraintDescr = (FieldConstraintDescr) colList.get( 1 );
+        restrictionList = fieldConstraintDescr.getRestrictions();
+
+        assertEquals( "type",
+                      fieldConstraintDescr.getFieldName() );
+
+        assertEquals( RestrictionConnectiveDescr.AND,
+                      fieldConstraintDescr.getRestriction().getConnective() );
+
+        litDescr = (LiteralRestrictionDescr) restrictionList.get( 0 );
+        assertEquals( "!=",
+                      litDescr.getEvaluator() );
+        assertEquals( "iii",
+                      litDescr.getText() );
+
+        fieldConstraintDescr = (FieldConstraintDescr) colList.get( 2 );
+        restrictionList = fieldConstraintDescr.getRestrictions();
+
+        assertEquals( "rating",
+                      fieldConstraintDescr.getFieldName() );
+
+        litDescr = (LiteralRestrictionDescr) restrictionList.get( 0 );
+        assertEquals( "==",
+                      litDescr.getEvaluator() );
+        assertEquals( "fivestar",
+                      litDescr.getText() );
+    }
+
+    public void testNestedCERule() throws Exception {
+        RuleDescr rule = parse( "(defrule xxx ?b <- (person (name yyy)) (or (and (hobby1 (type qqq1)) (hobby2 (type ~qqq2))) (food (veg ~shroom) ) ) => )" ).defrule();
+
+        assertEquals( "xxx",
+                      rule.getName() );
+
+        AndDescr lhs = rule.getLhs();
+        List lhsList = lhs.getDescrs();
+        assertEquals( 2,
+                      lhsList.size() );
+
+        // Parse the first column
+        PatternDescr col = (PatternDescr) lhsList.get( 0 );
+        assertEquals( "?b",
+                      col.getIdentifier() );
+        assertEquals( "person",
+                      col.getObjectType() );
+        FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        assertEquals( "name",
+                      fieldConstraintDescr.getFieldName() ); //         
+        LiteralRestrictionDescr litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+        assertEquals( "==",
+                      litDescr.getEvaluator() );
+        assertEquals( "yyy",
+                      litDescr.getText() );
+
+        OrDescr orDescr = (OrDescr) lhsList.get( 1 );
+        assertEquals( 2,
+                      orDescr.getDescrs().size() );
+
+        AndDescr andDescr = (AndDescr) orDescr.getDescrs().get( 0 );
+        col = (PatternDescr) andDescr.getDescrs().get( 0 );
+        assertEquals( "hobby1",
+                      col.getObjectType() );
+        fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        assertEquals( "type",
+                      fieldConstraintDescr.getFieldName() ); //         
+        litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+        assertEquals( "==",
+                      litDescr.getEvaluator() );
+        assertEquals( "qqq1",
+                      litDescr.getText() );
+
+        col = (PatternDescr) andDescr.getDescrs().get( 1 );
+        assertEquals( "hobby2",
+                      col.getObjectType() );
+        fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        assertEquals( "type",
+                      fieldConstraintDescr.getFieldName() ); //         
+        litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+        assertEquals( "!=",
+                      litDescr.getEvaluator() );
+        assertEquals( "qqq2",
+                      litDescr.getText() );
+
+        col = (PatternDescr) orDescr.getDescrs().get( 1 );
+        assertEquals( "food",
+                      col.getObjectType() );
+        fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        assertEquals( "veg",
+                      fieldConstraintDescr.getFieldName() ); //         
+        litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+        assertEquals( "!=",
+                      litDescr.getEvaluator() );
+        assertEquals( "shroom",
+                      litDescr.getText() );
+    }
+
+    public void testNotExistsRule() throws Exception {
+        RuleDescr rule = parse( "(defrule xxx (or (hobby1 (type qqq1)) (not (and (exists (person (name ppp))) (person (name yyy))))) => )" ).defrule();
+
+        assertEquals( "xxx",
+                      rule.getName() );
+
+        AndDescr lhs = rule.getLhs();
+        List lhsList = lhs.getDescrs();
+        assertEquals( 1,
+                      lhsList.size() );
+
+        OrDescr orDescr = (OrDescr) lhsList.get( 0 );
+        assertEquals( 2,
+                      orDescr.getDescrs().size() );
+
+        PatternDescr col = (PatternDescr) orDescr.getDescrs().get( 0 );
+        assertEquals( "hobby1",
+                      col.getObjectType() );
+        FieldConstraintDescr fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        assertEquals( "type",
+                      fieldConstraintDescr.getFieldName() ); //         
+        LiteralRestrictionDescr litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+        assertEquals( "==",
+                      litDescr.getEvaluator() );
+        assertEquals( "qqq1",
+                      litDescr.getText() );
+
+        NotDescr notDescr = (NotDescr) orDescr.getDescrs().get( 1 );
+        assertEquals( 1,
+                      notDescr.getDescrs().size() );
+        
+        AndDescr andDescr = (AndDescr) notDescr.getDescrs().get( 0 );
+        assertEquals( 2, andDescr.getDescrs().size() );
+        ExistsDescr existsDescr = (ExistsDescr) andDescr.getDescrs().get( 0 );
+        col = (PatternDescr) existsDescr.getDescrs().get( 0 );
+        assertEquals( "person",
+                      col.getObjectType() );
+        fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        assertEquals( "name",
+                      fieldConstraintDescr.getFieldName() ); //         
+        litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+        assertEquals( "==",
+                      litDescr.getEvaluator() );
+        assertEquals( "ppp",
+                      litDescr.getText() );              
+        
+        col = (PatternDescr) andDescr.getDescrs().get( 1 );
+        assertEquals( "person",
+                      col.getObjectType() );
+        fieldConstraintDescr = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        assertEquals( "name",
+                      fieldConstraintDescr.getFieldName() ); //         
+        litDescr = (LiteralRestrictionDescr) fieldConstraintDescr.getRestrictions().get( 0 );
+        assertEquals( "==",
+                      litDescr.getEvaluator() );
+        assertEquals( "yyy",
+                      litDescr.getText() );  
+    }
+    
+    public void testTestRule() throws Exception {
+        RuleDescr rule = parse( "(defrule xxx (test (< 9.0 1.3) ) => )" ).defrule();
+
+        assertEquals( "xxx",
+                      rule.getName() );
+
+        AndDescr lhs = rule.getLhs();
+        List lhsList = lhs.getDescrs();
+        assertEquals( 1,
+                      lhsList.size() );
+
+        EvalDescr evalDescr = (EvalDescr) lhsList.get( 0 );
+        
+        CLPEval clpe = ( CLPEval ) evalDescr.getContent();
+        FunctionCaller f = clpe.getFunctions()[0];
+        assertEquals( "<", f.getName() );        
+        assertEquals( new DoubleValueHandler( 9.0 ), f.getParameters()[0] );
+        assertEquals( new DoubleValueHandler( 1.3 ), f.getParameters()[1] );          
+    }
+
+    public void testRuleHeader() throws Exception {
+        RuleDescr rule = parse( "(defrule MAIN::name \"docs\"(declare (salience -100) ) => )" ).defrule();
+        
+        List attributes = rule.getAttributes();
+        AttributeDescr module = ( AttributeDescr ) attributes.get( 0 );
+        assertEquals( "agenda-group", module.getName() );
+        assertEquals( "MAIN", module.getValue() );
+        
+        assertEquals("name", rule.getName() );
+        
+        AttributeDescr dialect = ( AttributeDescr ) attributes.get( 1 );
+        assertEquals( "dialect", dialect.getName() );
+        assertEquals( "clips", dialect.getValue() );        
+        
+        AttributeDescr salience = ( AttributeDescr ) attributes.get( 2 );
+        assertEquals( "salience", salience.getName() );
+        assertEquals( "-100", salience.getValue() );
+        
+        
+    }
+    
+    private CLPParser parse(final String text) throws Exception {
+        this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
+        return this.parser;
+    }
+
+    private CLPParser parse(final String source,
+                            final String text) throws Exception {
+        this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
+        this.parser.setSource( source );
+        return this.parser;
+    }
+
+    private Reader getReader(final String name) throws Exception {
+        final InputStream in = getClass().getResourceAsStream( name );
+
+        return new InputStreamReader( in );
+    }
+
+    private CLPParser parseResource(final String name) throws Exception {
+
+        //        System.err.println( getClass().getResource( name ) );
+        Reader reader = getReader( name );
+
+        final StringBuffer text = new StringBuffer();
+
+        final char[] buf = new char[1024];
+        int len = 0;
+
+        while ( (len = reader.read( buf )) >= 0 ) {
+            text.append( buf,
+                         0,
+                         len );
+        }
+
+        return parse( name,
+                      text.toString() );
+    }
+
+    private CharStream newCharStream(final String text) {
+        return new ANTLRStringStream( text );
+    }
+
+    private CLPLexer newLexer(final CharStream charStream) {
+        return new CLPLexer( charStream );
+    }
+
+    private TokenStream newTokenStream(final Lexer lexer) {
+        return new CommonTokenStream( lexer );
+    }
+
+    private CLPParser newParser(final TokenStream tokenStream) {
+        final CLPParser p = new CLPParser( tokenStream );
+        p.setFunctionRegistry( new XFunctionRegistry( BuiltinFunctions.getInstance() )  );
+        //p.setParserDebug( true );
+        return p;
+    }
+
+    private void assertEqualsIgnoreWhitespace(final String expected,
+                                              final String actual) {
+        final String cleanExpected = expected.replaceAll( "\\s+",
+                                                          "" );
+        final String cleanActual = actual.replaceAll( "\\s+",
+                                                      "" );
+
+        assertEquals( cleanExpected,
+                      cleanActual );
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ModifyFunctionTest.java (from rev 18083, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/ModifyFunctionTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ModifyFunctionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ModifyFunctionTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,32 @@
+package org.drools.clips;
+
+import org.drools.Person;
+import org.drools.clips.Function;
+import org.drools.clips.functions.ModifyFunction;
+import org.drools.clips.valuehandlers.IndexedLocalVariableValue;
+import org.drools.clips.valuehandlers.ListValueHandler;
+import org.drools.clips.valuehandlers.ObjectValueHandler;
+
+import junit.framework.TestCase;
+
+public class ModifyFunctionTest extends TestCase {
+    public void testSimpleModifyFunction() {
+        Function function = new ModifyFunction();
+        
+       Person p = new Person("mark");
+       ExecutionContext context = new ExecutionContextImpl(null, null, 1);
+       //context.setLocalVariable( 0, p );
+       
+       IndexedLocalVariableValue var = new IndexedLocalVariableValue("p", 0);
+       var.setValue( context, new ObjectValueHandler( p ) );
+       
+       ListValueHandler list = new ListValueHandler();
+       list.add( new ObjectValueHandler( "name") );
+       list.add( new ObjectValueHandler( "bob") );
+       
+       
+       function.execute( new ValueHandler[] { var, list }, context );
+       
+       assertEquals( "bob", p.getName() );
+    }
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java (from rev 18087, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/ShellTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/ShellTest.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,70 @@
+package org.drools.clips;
+
+import junit.framework.TestCase;
+
+import org.drools.Person;
+import org.drools.RuleBase;
+import org.drools.WorkingMemory;
+import org.drools.clips.OldShell;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+
+public class ShellTest extends TestCase {
+    public void test1() {
+        OldShell shell = new OldShell();
+        
+        shell.evalString( "(import org.drools.Person)" );
+        
+        shell.evalString( "(defrule yyy  => (printout t yy \" \" (eq 1 1) ) ) )" );        
+        Package pkg = shell.getWorkingMemory().getRuleBase().getPackage( "MAIN" );
+        
+        Rule rule = pkg.getRule( "yyy" );
+        assertEquals( "yyy", rule.getName() );
+        
+        shell.evalString( "(defrule xxx (Person (name ?name&bob) (age 30) ) (Person  (name ?name) (age 35)) => (printout t xx \" \" (eq 1 1) ) )" );
+        
+        
+        rule = pkg.getRule( "xxx" );
+        assertEquals( "xxx", rule.getName() );
+        
+
+        
+        assertEquals( 2, pkg.getRules().length );
+        
+        assertTrue( pkg.getImports().containsKey( "org.drools.Person" ) );
+        
+        WorkingMemory wm = shell.getWorkingMemory();
+        wm.insert( new Person("bob", "cheddar", 30) );
+        wm.insert( new Person("bob", "stilton", 35) );        
+        wm.fireAllRules();        
+    }
+    
+    public void test2() {
+        OldShell shell = new OldShell();
+        
+        shell.evalString( "(import org.drools.Person)" );
+        
+        shell.evalString( "(defrule yyy  => (printout t yy \" \" (eq 1 1) \"\n\" ) ) )" );        
+        Package pkg = shell.getWorkingMemory().getRuleBase().getPackage( "MAIN" );
+        
+        Rule rule = pkg.getRule( "yyy" );
+        assertEquals( "yyy", rule.getName() );
+        
+        shell.evalString( "(defrule xxx (Person (name ?name&bob) (age 30) ) (Person  (name ?name) (age 35)) => (printout t ?name \" \" (eq 1 1) \"\n\" ) )" );
+        
+        
+        rule = pkg.getRule( "xxx" );
+        assertEquals( "xxx", rule.getName() );
+        
+
+        
+        assertEquals( 2, pkg.getRules().length );
+        
+        assertTrue( pkg.getImports().containsKey( "org.drools.Person" ) );
+        
+        WorkingMemory wm = shell.getWorkingMemory();
+        wm.insert( new Person("bob", "cheddar", 30) );
+        wm.insert( new Person("bob", "stilton", 35) );        
+        wm.fireAllRules();        
+    }    
+}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel (from rev 18083, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel)

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/Appendable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/Appendable.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/Appendable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,7 +0,0 @@
-package org.drools.clp.mvel;
-
-public interface Appendable {
-
-    public abstract void append(String string);
-
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/BaseInfixFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/BaseInfixFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/BaseInfixFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,20 +0,0 @@
-package org.drools.clp.mvel;
-
-public abstract class BaseInfixFunction implements Function {
-    public abstract String getMappedSymbol();
-    
-    public void dump(LispForm2 lispForm, Appendable appendable) {
-        SExpression[] sExpressions = lispForm.getSExpressions();        
-        
-        appendable.append("(");
-        for ( int i = 1, length = sExpressions.length; i < length; i++) {
-            
-            FunctionHandlers.getInstance().dump( sExpressions[i], appendable );          
-            
-            if ( i != length -1 ) { 
-                appendable.append( getMappedSymbol() );
-            }
-        }
-        appendable.append(")");
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/BoolLispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/BoolLispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/BoolLispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,12 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class BoolLispAtom2 extends LispAtom2 {
-    
-    public BoolLispAtom2(String value) {
-        super(value);
-    }
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/CreateListFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/CreateListFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/CreateListFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,25 +0,0 @@
-package org.drools.clp.mvel;
-
-public class CreateListFunction implements Function {
-    private static final String name = "create$";
-
-    public String getName() {
-        return name;
-    }
-    
-    public void dump(LispForm2 lispForm, Appendable appendable) {
-        SExpression[] sExpressions = lispForm.getSExpressions();
-        
-        appendable.append("[");
-        
-        for ( int i = 1, length = sExpressions.length; i < length; i++) {
-            
-            FunctionHandlers.getInstance().dump( sExpressions[i], appendable );        
-            
-            if ( i != length -1 ) { 
-                appendable.append( "," );
-            }
-        }
-        appendable.append("]");
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/EqFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class EqFunction  extends BaseInfixFunction  {
-    private static final String name = "eq";
-    private static final String mappedSymbol = "==";
-        
-    public String getName() {
-        return name;
-    }
-
-    public String getMappedSymbol() {
-        return mappedSymbol;
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqOrLessThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/EqOrLessThanFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqOrLessThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class EqOrLessThanFunction  extends BaseInfixFunction  {
-    private static final String name = "<=";
-    private static final String mappedSymbol = "<=";
-    
-    public String getName() {
-        return name;
-    }
-    
-    public String getMappedSymbol() {
-        return mappedSymbol;
-    }    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqOrMoreThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/EqOrMoreThanFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/EqOrMoreThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class EqOrMoreThanFunction  extends BaseInfixFunction  {
-    private static final String name = ">=";
-    private static final String mappedSymbol = ">=";
-
-    public String getName() {
-        return name;
-    }
-    
-    public String getMappedSymbol() {
-        return mappedSymbol;
-    }    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/FloatLispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/FloatLispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/FloatLispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,12 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class FloatLispAtom2 extends LispAtom2 {
-    
-    public FloatLispAtom2(String value) {
-        super(value);
-    }
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/Function.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/Function.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/Function.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,9 +0,0 @@
-package org.drools.clp.mvel;
-
-public interface Function {
-
-    public abstract String getName();
-
-    public abstract void dump(LispForm2 lispForm, Appendable appendable);
-
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/FunctionHandlers.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/FunctionHandlers.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/FunctionHandlers.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,39 +0,0 @@
-package org.drools.clp.mvel;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class FunctionHandlers {
-    public static final FunctionHandlers INSTANCE = new FunctionHandlers();
-    
-    public static FunctionHandlers getInstance() {
-        return INSTANCE;
-    }
-    
-    private Map<String, Function> map = new HashMap<String, Function>();
-    
-    private FunctionHandlers() {
-        
-    }
-    
-    public Function getFunction(String name) {
-        return this.map.get( name );
-    }
-    
-    public void registerFunction(Function function) {
-        this.map.put( function.getName(), function );
-    }
-    
-    public void dump(SExpression sExpression, Appendable appendable) {              
-        if ( sExpression instanceof LispAtom2 ) {
-            appendable.append( ( ( LispAtom2 ) sExpression).getValue() );
-        } else {
-            LispForm2 form = (LispForm2) sExpression;
-            Function function = FunctionHandlers.getInstance().getFunction( ( (LispAtom2) form.getSExpressions()[0]).getValue() );
-            function.dump(form, appendable );
-            
-        }           
-    }
-    
-    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/IfFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/IfFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/IfFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,28 +0,0 @@
-package org.drools.clp.mvel;
-
-public class IfFunction implements Function {
-    private static final String name = "if";       
-
-    public String getName() {
-        return name;
-    }
-    
-    public void dump(LispForm2 lispForm, Appendable appendable) {
-        SExpression[] sExpressions = lispForm.getSExpressions();
-
-        appendable.append( "if " );
-        
-        FunctionHandlers.getInstance().dump( sExpressions[1], appendable );
-        
-        appendable.append( "{" );
-        FunctionHandlers.getInstance().dump( sExpressions[3], appendable );
-        appendable.append( "}" );
-        
-        if ( sExpressions.length > 4 ) {
-            appendable.append( "else {" );
-                FunctionHandlers.getInstance().dump( sExpressions[5], appendable );
-            appendable.append( "}" );            
-        }
-        
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/IntLispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/IntLispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/IntLispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,12 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class IntLispAtom2 extends LispAtom2 {
-    
-    public IntLispAtom2(String value) {
-        super(value);
-    }
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LessThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/LessThanFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LessThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class LessThanFunction  extends BaseInfixFunction  {
-    private static final String name = "<";
-    private static final String mappedSymbol = "<";
-
-    public String getName() {
-        return name;
-    }
-    
-    public String getMappedSymbol() {
-        return mappedSymbol;
-    }    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/LispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,25 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class LispAtom2 implements SExpression {
-    private String value;
-
-    public LispAtom2(String value) {
-        super();
-        this.value = value;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }    
-    
-    public String toString() {
-        return value;
-    }
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LispForm2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/LispForm2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/LispForm2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,43 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class LispForm2 implements SExpression {
-    private SExpression[] sExpressions;
-    
-    public LispForm2(SExpression[] sExpressions) {
-        this.sExpressions = sExpressions;
-    }
-
-    public SExpression[] getSExpressions() {
-        return sExpressions;
-    }
-
-    public void setSExpressions(SExpression[] sExpressions) {
-        this.sExpressions = sExpressions;
-    }
-    
-//    public String toString() {
-//        StringBuilder builder = new StringBuilder();
-//        
-//        builder.append("(");
-//        for ( int i = 0, length = sExpressions.length; i < length; i++) {
-//            builder.append(" " + sExpressions[i] + " ");
-//        }
-//        builder.append(")");
-//        return builder.toString();
-//    }    
-    
-    public String toString() {
-        StringBuilder builder = new StringBuilder();
-        
-        builder.append("(");
-        for ( SExpression sExpression : sExpressions) {
-            builder.append(" " + sExpression + " ");
-        }
-        builder.append(")");
-        return builder.toString();
-    }  
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/ModifyFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/ModifyFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/ModifyFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,29 +0,0 @@
-package org.drools.clp.mvel;
-
-public class ModifyFunction implements Function {
-    private static final String name = "modify";
-
-    public String getName() {
-        return name;
-    }
-    
-    public void dump(LispForm2 lispForm, Appendable appendable) {
-        SExpression[] sExpressions = lispForm.getSExpressions();
-        
-        appendable.append("modify (" + ( (LispAtom2) lispForm.getSExpressions()[1]).getValue() + ") {");
-        
-        for ( int i = 2, length = sExpressions.length; i < length; i++) {
-            LispForm2 setter = (LispForm2) sExpressions[i];
-            appendable.append( ( ( LispAtom2 ) setter.getSExpressions()[0]).getValue() );            
-            
-            appendable.append( " = " );
-            
-            FunctionHandlers.getInstance().dump( setter.getSExpressions()[1], appendable);  
-            
-            if ( i != length -1 ) { 
-                appendable.append( "," );
-            }
-        }
-        appendable.append("};");
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/MoreThanFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/MoreThanFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/MoreThanFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class MoreThanFunction  extends BaseInfixFunction  {
-    private static final String name = ">";
-    private static final String mappedSymbol = ">";
-
-    public String getName() {
-        return name;
-    }
-    
-    public String getMappedSymbol() {
-        return mappedSymbol;
-    }    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/MultiplyFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/MultiplyFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/MultiplyFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class MultiplyFunction  extends BaseInfixFunction  {
-    private static final String name = "*";
-    private static final String mappedSymbol = "*";
-
-    public String getName() {
-        return name;
-    }
-    
-    public String getMappedSymbol() {
-        return mappedSymbol;
-    }    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/NullLispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/NullLispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/NullLispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,12 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class NullLispAtom2 extends LispAtom2 {
-    
-    public NullLispAtom2(String value) {
-        super(value);
-    }
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PlusFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/PlusFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PlusFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class PlusFunction  extends BaseInfixFunction {
-    private static final String name = "+";
-    private static final String mappedSymbol = "+";
-
-    public String getName() {
-        return name;
-    }  
-    
-    public String getMappedSymbol() {
-        return mappedSymbol;
-    }    
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PrintoutFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/PrintoutFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PrintoutFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,24 +0,0 @@
-package org.drools.clp.mvel;
-
-public class PrintoutFunction implements Function {
-    private static final String name = "printout";
-    
-    private static final int route = 1;
-
-    public String getName() {
-        return name;
-    }
-    
-    public void dump(LispForm2 lispForm, Appendable appendable) {
-        SExpression[] sExpressions = lispForm.getSExpressions();
-        appendable.append( "((PrintStream) routers.get(" + ( ( LispAtom2 ) lispForm.getSExpressions()[route]).getValue()+ ")).print(" );
-        for ( int i = 2, length = sExpressions.length; i < length; i++) {            
-            FunctionHandlers.getInstance().dump( sExpressions[i], appendable );         
-            
-            if ( i != length -1 ) { 
-                appendable.append( "+" );
-            }
-        }        
-        appendable.append( ");" );
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PrognFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/PrognFunction.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/PrognFunction.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,50 +0,0 @@
-package org.drools.clp.mvel;
-
-public class PrognFunction implements Function {
-    private static final String name = "progn";       
-
-    public String getName() {
-        return name;
-    }
-    
-    public void dump(LispForm2 lispForm, Appendable appendable) {
-        Function createList = FunctionHandlers.getInstance().getFunction( "create$" );
-        
-        SExpression[] sExpressions = lispForm.getSExpressions();
-        
-        LispForm2 listSpec = (LispForm2) sExpressions[1];
-        
-        String var = ( ( LispAtom2 ) listSpec.getSExpressions()[0] ).getValue();        
-        
-        appendable.append( "foreach( " + var + " : " );        
-        
-        createList.dump( (LispForm2) listSpec.getSExpressions()[1], appendable );
-        
-        appendable.append( " ) {" );
-        
-        FunctionHandlers.getInstance().dump( sExpressions[2], appendable );
-        //Function function = FunctionHandlers.getInstance().getFunction( ( (LispAtom2) form.getSExpressions()[0]).getValue() );
-        
-        appendable.append( "}" );
-        
-//        SExpression[] sExpressions = lispForm.getSExpressions();
-//        appendable.append( "((PrintStream) routers.get(" + ( ( LispAtom2 ) lispForm.getSExpressions()[1]).getValue()+ ")).print(" );
-//        for ( int i = 2, length = sExpressions.length; i < length; i++) {            
-//            SExpression sExpression = sExpressions[i];            
-//            if ( sExpression instanceof LispAtom2 ) {
-//                appendable.append( ( ( LispAtom2 ) sExpression).getValue() );
-//            } else {
-//                LispForm2 form = (LispForm2) sExpression;
-//                Function function = FunctionHandlers.getInstance().getFunction( ( (LispAtom2) form.getSExpressions()[0]).getValue() );
-//                function.dump(form, appendable);
-//                
-//            }            
-//            
-//            if ( i != length -1 ) { 
-//                appendable.append( "+" );
-//            }
-//        }        
-//        appendable.append( ");" );        
-        
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/SExpression.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/SExpression.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/SExpression.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,8 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public interface SExpression {
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/StringBuilderAppendable.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/StringBuilderAppendable.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/StringBuilderAppendable.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,14 +0,0 @@
-package org.drools.clp.mvel;
-
-public class StringBuilderAppendable implements Appendable {
-    public StringBuilder builder = new StringBuilder();
-    
-
-    public void append(String string) {
-        this.builder.append(  string );
-    }
-    
-    public String toString() {
-        return builder.toString();
-    }
-}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/StringLispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/StringLispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/StringLispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,13 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class StringLispAtom2 extends LispAtom2 {
-    
-    public StringLispAtom2(String value) {
-        super("\"" + value + "\"");
-    }
-    
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/SymbolLispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/SymbolLispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/SymbolLispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,12 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class SymbolLispAtom2 extends LispAtom2 {
-    
-    public SymbolLispAtom2(String value) {
-        super(value);
-    }
-    
-}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/TestMVEL.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/TestMVEL.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/TestMVEL.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,133 +0,0 @@
-package org.drools.clp.mvel;
-
-import java.io.Reader;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.antlr.runtime.ANTLRReaderStream;
-import org.antlr.runtime.ANTLRStringStream;
-import org.antlr.runtime.CharStream;
-import org.antlr.runtime.CommonTokenStream;
-import org.antlr.runtime.Lexer;
-import org.antlr.runtime.TokenStream;
-import org.drools.clp.CLPMVELLexer;
-import org.drools.clp.CLPMVELParser;
-
-public class TestMVEL extends TestCase {
-    public void setUp() {
-        FunctionHandlers handlers = FunctionHandlers.getInstance();
-        handlers.registerFunction( new PlusFunction() );
-        handlers.registerFunction( new MultiplyFunction() );
-        handlers.registerFunction( new ModifyFunction() );
-        handlers.registerFunction( new CreateListFunction() );
-        handlers.registerFunction( new PrintoutFunction() );
-        handlers.registerFunction( new PrognFunction() );
-        handlers.registerFunction( new IfFunction() );
-        handlers.registerFunction( new LessThanFunction() );
-        handlers.registerFunction( new MoreThanFunction() );
-        handlers.registerFunction( new EqFunction() );        
-    }
-
-    public void test1() {
-        String expr = "(* (+ 4 4 ) 2) (create$ 10 20 (+ 10 10) a) (modify ?p (name mark) (age (+ 16 16) ) ) (printout t a b c (+ 4 4) )";
-        
-        SExpression[] lisplists = evalString( expr );
-
-        StringBuilderAppendable appendable = new StringBuilderAppendable();
-        
-        for ( SExpression sExpression : lisplists ) {
-            FunctionHandlers.getInstance().dump( sExpression, appendable );
-        }
-        
-        System.out.println( appendable );
-    }
-    
-    public void testProgn() {
-        String expr = "(progn (?x (create$ 10 20 30) ) (printout t ?x) ) )";
-        
-        SExpression[] lisplists = evalString( expr );
-
-        StringBuilderAppendable appendable = new StringBuilderAppendable();
-        
-        for ( SExpression sExpression : lisplists ) {
-            FunctionHandlers.getInstance().dump( sExpression, appendable );
-        }
-        
-        System.out.println( appendable );
-    }    
-    
-    public void testIf() {
-        String expr = "(if (< 1 3) then (printout t x) )";
-        
-        SExpression[] lisplists = evalString( expr );
-
-        StringBuilderAppendable appendable = new StringBuilderAppendable();
-        
-        for ( SExpression sExpression : lisplists ) {
-            FunctionHandlers.getInstance().dump( sExpression, appendable );
-        }
-        
-        System.out.println( appendable );        
-    }
-    
-    public void testIfElse() {
-        String expr = "(if (eq 1 3) then (printout t x) else (printout t y) )";
-        
-        SExpression[] lisplists = evalString( expr );
-
-        StringBuilderAppendable appendable = new StringBuilderAppendable();
-        
-        for ( SExpression sExpression : lisplists ) {
-            FunctionHandlers.getInstance().dump( sExpression, appendable );
-        }
-        
-        System.out.println( appendable );         
-    }    
-    
-    
-    
-    public  void test3() {
-        String function = "(deffunction max (?a ?b) (return ?b) )";
-        String expr = "(max (3 5) )";
-        
-    }
-
-    public SExpression[] evalReader(Reader reader) {
-        try {
-            CLPMVELParser parser = new CLPMVELParser( new CommonTokenStream( new CLPMVELLexer( new ANTLRReaderStream( reader ) ) ) );
-            return evalParser( parser );
-        } catch ( Exception e ) {
-            throw new RuntimeException( "Unable to parser Reader",
-                                        e );
-        }
-    }
-
-    public SExpression[] evalString(String text) {
-        CLPMVELParser parser = new CLPMVELParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
-        return evalParser( parser );
-    }
-
-    private SExpression[] evalParser(CLPMVELParser parser) {
-        try {
-            List list = parser.eval_sExpressions();
-            return (SExpression[]) list.toArray( new SExpression[list.size()] );
-        } catch ( Exception e ) {
-            throw new RuntimeException( e );
-        }
-
-        //parser.setF
-    }
-
-    private CharStream newCharStream(final String text) {
-        return new ANTLRStringStream( text );
-    }
-
-    private CLPMVELLexer newLexer(final CharStream charStream) {
-        return new CLPMVELLexer( charStream );
-    }
-
-    private TokenStream newTokenStream(final Lexer lexer) {
-        return new CommonTokenStream( lexer );
-    }
-}

Copied: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/TestMVEL.java (from rev 18196, labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/TestMVEL.java)
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/TestMVEL.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/TestMVEL.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -0,0 +1,337 @@
+package org.drools.clips.mvel;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.io.Serializable;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import junit.framework.TestCase;
+
+import org.antlr.runtime.ANTLRReaderStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.drools.clips.Appendable;
+import org.drools.clips.CLPMVELLexer;
+import org.drools.clips.CLPMVELParser;
+import org.drools.clips.CreateListFunction;
+import org.drools.clips.EqFunction;
+import org.drools.clips.FunctionContext;
+import org.drools.clips.FunctionHandlers;
+import org.drools.clips.LispForm;
+import org.drools.clips.MVELBuildContext;
+import org.drools.clips.ParserHandler;
+import org.drools.clips.PrintRouterContext;
+import org.drools.clips.StringBuilderAppendable;
+import org.drools.clips.VariableContext;
+import org.drools.clips.functions.IfFunction;
+import org.drools.clips.functions.LessThanFunction;
+import org.drools.clips.functions.ModifyFunction;
+import org.drools.clips.functions.MoreThanFunction;
+import org.drools.clips.functions.MultiplyFunction;
+import org.drools.clips.functions.PlusFunction;
+import org.drools.clips.functions.PrintoutFunction;
+import org.drools.clips.functions.PrognFunction;
+import org.drools.clips.functions.ReturnFunction;
+import org.drools.clips.functions.SwitchFunction;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.mvel.MVEL;
+import org.mvel.ast.Function;
+import org.mvel.compiler.CompiledExpression;
+import org.mvel.compiler.ExpressionCompiler;
+import org.mvel.util.CompilerTools;
+
+public class TestMVEL extends TestCase {
+    private ByteArrayOutputStream baos;
+
+    Shell                         shell = new Shell();
+
+    public void setUp() {
+        FunctionHandlers handlers = FunctionHandlers.getInstance();
+        handlers.registerFunction( new PlusFunction() );
+        handlers.registerFunction( new MultiplyFunction() );
+        handlers.registerFunction( new ModifyFunction() );
+        handlers.registerFunction( new CreateListFunction() );
+        handlers.registerFunction( new PrintoutFunction() );
+        handlers.registerFunction( new PrognFunction() );
+        handlers.registerFunction( new IfFunction() );
+        handlers.registerFunction( new LessThanFunction() );
+        handlers.registerFunction( new MoreThanFunction() );
+        handlers.registerFunction( new EqFunction() );
+        handlers.registerFunction( new SwitchFunction() );
+        //handlers.registerFunction( new DeffunctionFunction() );    
+        handlers.registerFunction( new ReturnFunction() );
+
+        this.baos = new ByteArrayOutputStream();
+        shell.addRouter( "t",
+                         new PrintStream( baos ) );
+    }
+
+    //    public void test1() {
+    //        String expr = "(* (+ 4 4 ) 2) (create$ 10 20 (+ 10 10) a) (modify ?p (name mark) (location \"london\")(age (+ 16 16) ) ) (printout t a b c (+ 4 4) )";
+    //        
+    //        SExpression[] lisplists = evalString( expr );
+    //
+    //        StringBuilderAppendable appendable = new StringBuilderAppendable();        
+    //        MVELClipsContext context = new MVELClipsContext();         
+    //        for ( SExpression sExpression : lisplists ) {
+    //            FunctionHandlers.dump( sExpression, appendable, context );
+    //        }
+    //        
+    //        System.out.println( appendable );
+    //    }
+
+    public void testProgn() {
+        String expr = "(progn (?x (create$ 10 20 30) ) (printout t ?x) ) )";
+
+        this.shell.eval( expr );
+
+        assertEquals( "102030",
+                      new String( baos.toByteArray() ) );
+    }
+
+    public void testIf() {
+        String expr = "(if (< 1 3) then (printout t hello) (printout t hello) )";
+
+        this.shell.eval( expr );
+
+        assertEquals( "hellohello",
+                      new String( baos.toByteArray() ) );
+    }
+
+    public void testIfElse() {
+        String expr = "(if (eq 1 3) then (printout t hello)  (printout t 1) else (printout t hello)  (printout t 2))";
+
+        this.shell.eval( expr );
+
+        assertEquals( "hello2",
+                      new String( baos.toByteArray() ) );
+    }
+
+    public void testSwitch() throws IOException {
+        String expr = "(switch (?x) (case a then (printout t hello)(printout t 1)) (case b then (printout t hello)(printout t 2)) (default (printout t hello)(printout t 3)) )";
+
+        // check case a
+        this.shell.addVariable( "?x",
+                                "a" );
+        this.shell.eval( expr );
+        assertEquals( "hello1",
+                      new String( baos.toByteArray() ) );
+
+        // check default
+        this.shell.addVariable( "?x",
+                                "M" );
+        this.shell.eval( expr );
+        assertEquals( "hello1hello3",
+                      new String( baos.toByteArray() ) );
+
+        // check case b
+        this.shell.addVariable( "?x",
+                                "b" );
+        this.shell.eval( expr );
+        assertEquals( "hello1hello3hello2",
+                      new String( baos.toByteArray() ) );
+    }
+
+    public void testDeffunction() {
+        String function = "(deffunction max (?a ?b) (if (> ?a ?b) then (return ?a) else (return ?b) ) )";
+        this.shell.eval( function );
+
+        String expr = "(if (eq (max 3 5) 5) then (printout t hello) )";
+        this.shell.eval( expr );
+        assertEquals( "hello",
+                      new String( baos.toByteArray() ) );
+
+        expr = "(if (eq (max ?a ?b) 5) then (printout t hello) )";
+        this.shell.addVariable( "?a",
+                                "3" );
+        this.shell.addVariable( "?b",
+                                "5" );
+        this.shell.eval( expr );
+        assertEquals( "hellohello",
+                      new String( baos.toByteArray() ) );
+    }
+
+    public static class Shell
+        implements
+        ParserHandler,
+        VariableContext,
+        FunctionContext,
+        PrintRouterContext,
+        MVELBuildContext {
+        private Map<String, Object> vars;
+        private Map<String, String> varNameMap;
+
+        public Shell() {
+            this.vars = new HashMap<String, Object>();
+            this.varNameMap = new HashMap<String, String>();
+        }
+
+        public void functionHandler(FunctionDescr ruleDescr) {
+            Appendable builder = new StringBuilderAppendable();
+
+            // strip lead/trailing quotes
+            String name = ruleDescr.getName().trim();
+            if ( name.charAt( 0 ) == '"' ) {
+                name = name.substring( 1 );
+            }
+
+            if ( name.charAt( name.length() - 1 ) == '"' ) {
+                name = name.substring( 0,
+                                       name.length() - 1 );
+            }
+            builder.append( "function " + name + "(" );
+
+            for ( int i = 0, length = ruleDescr.getParameterNames().size(); i < length; i++ ) {
+                builder.append( ruleDescr.getParameterNames().get( i ) );
+                if ( i < length - 1 ) {
+                    builder.append( ", " );
+                }
+            }
+
+            builder.append( ") {\n" );
+            List list = (List) ruleDescr.getContent();
+            for ( Iterator it = list.iterator(); it.hasNext(); ) {
+                FunctionHandlers.dump( (LispForm) it.next(),
+                                       builder,
+                                       this );
+            }
+            builder.append( "}" );
+
+            ExpressionCompiler compiler = new ExpressionCompiler( builder.toString() );
+            Serializable s1 = compiler.compile();
+            Map<String, org.mvel.ast.Function> map = CompilerTools.extractAllDeclaredFunctions( (CompiledExpression) s1 );
+            for ( org.mvel.ast.Function function : map.values() ) {
+                addFunction( function );
+            }
+
+        }
+
+        public void importHandler(ImportDescr descr) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void lispFormHandler(LispForm lispForm) {
+            StringBuilderAppendable appendable = new StringBuilderAppendable();
+            FunctionHandlers.dump( lispForm,
+                                   appendable,
+                                   this );
+            MVEL.eval( appendable.toString(),
+                       this.vars );
+
+        }
+
+        public void ruleHandler(RuleDescr ruleDescr) {
+            // TODO Auto-generated method stub
+
+        }
+
+        public void eval(String string) {
+            eval( new StringReader( string ) );
+        }
+
+        public void eval(Reader reader) {
+            CLPMVELParser parser;
+            try {
+                parser = new CLPMVELParser( new CommonTokenStream( new CLPMVELLexer( new ANTLRReaderStream( reader ) ) ) );
+                parser.eval( this,
+                             this );
+            } catch ( Exception e ) {
+                e.printStackTrace();
+            }
+        }
+
+        public void addFunction(Function function) {
+            this.vars.put( function.getAbsoluteName(),
+                           function );
+        }
+
+        public boolean removeFunction(String functionName) {
+            return (this.vars.remove( functionName ) != null);
+        }
+
+        public Map<String, Function> getFunctions() {
+            Map<String, Function> map = new HashMap<String, Function>();
+            for ( Iterator it = this.vars.entrySet().iterator(); it.hasNext(); ) {
+                Entry entry = (Entry) it.next();
+                if ( entry.getValue() instanceof Function ) {
+                    map.put( (String) entry.getKey(),
+                             (Function) entry.getValue() );
+                }
+            }
+            return map;
+        }
+
+        public void addRouter(String name,
+                              PrintStream out) {
+
+            Map routers = (Map) this.vars.get( "printrouters" );
+            if ( routers == null ) {
+                routers = new HashMap();
+                this.vars.put( "printrouters",
+                               routers );
+            }
+            routers.put( name,
+                         out );
+
+        }
+
+        public boolean removeRouter(String name) {
+            return (this.vars.remove( name ) != null);
+        }
+
+        public Map<String, PrintStream> getRouters() {
+            Map<String, PrintStream> map = new HashMap<String, PrintStream>();
+            for ( Iterator it = this.vars.entrySet().iterator(); it.hasNext(); ) {
+                Entry entry = (Entry) it.next();
+                if ( entry.getValue() instanceof Function ) {
+                    map.put( (String) entry.getKey(),
+                             (PrintStream) entry.getValue() );
+                }
+            }
+            return map;
+        }
+
+        public void addVariable(String name,
+                                Object value) {
+            String temp = this.varNameMap.get( name );
+            if ( temp == null ) {
+                temp = makeValid( name );
+                if ( !temp.equals( name ) ) {
+                    this.varNameMap.put( name,
+                                         temp );
+                }
+            }
+            this.vars.put( temp,
+                           value );
+        }
+
+        public void removeVariable(String name) {
+            String temp = this.varNameMap.get( name );
+            if ( temp != null ) {
+                name = temp;
+            }
+            this.vars.remove( name );
+        }
+
+        public Map<String, String> getVariableNameMap() {
+            return this.varNameMap;
+        }
+
+        public String makeValid(String var) {
+            var = var.replaceAll( "\\?",
+                                  "_Q_" );
+            return var;
+        }
+
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/VariableLispAtom2.java
===================================================================
--- labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clp/mvel/VariableLispAtom2.java	2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-clips/src/test/java/org/drools/clips/mvel/VariableLispAtom2.java	2008-01-29 21:02:48 UTC (rev 18198)
@@ -1,12 +0,0 @@
-/**
- * 
- */
-package org.drools.clp.mvel;
-
-public class VariableLispAtom2 extends LispAtom2 {
-    
-    public VariableLispAtom2(String value) {
-        super(value);
-    }
-    
-}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-clips/src/test/resources/org/drools/clips (from rev 18083, labs/jbossrules/trunk/drools-clips/src/test/resources/org/drools/clp)




More information about the jboss-svn-commits mailing list