You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by jv...@locus.apache.org on 2000/09/08 23:06:33 UTC

cvs commit: jakarta-velocity/src/java/org/apache/velocity/processor/javacc/visitor BaseVisitor.java DumpMode.java NoCacheMode.java

jvanzyl     00/09/08 14:06:32

  Modified:    build    build-velocity.xml
               examples Test.java test1.wm test2.wm velocity.properties
               src/java/org/apache/velocity/processor/javacc/parser
                        Node.java Parser.java Parser.jj Parser.jjt
                        ParserConstants.java ParserTokenManager.java
                        ParserTreeConstants.java ParserVisitor.java
               src/java/org/apache/velocity/processor/javacc/visitor
                        BaseVisitor.java DumpMode.java NoCacheMode.java
  Added:       src/java/org/apache/velocity/processor/javacc/parser
                        ASTAddNode.java ASTAndNode.java ASTAssignment.java
                        ASTDivNode.java ASTEQNode.java ASTGENode.java
                        ASTGTNode.java ASTLENode.java ASTLTNode.java
                        ASTModNode.java ASTMulNode.java ASTNENode.java
                        ASTNotNode.java ASTOrNode.java ASTSubtractNode.java
  Log:
  - preliminary support for conditional expressions to match WM,
    and the start of your standard arithmetic. condition and
    arithmetic are in the parser, but haven't starting
    doing anything in the nodes or visitor.
  
  Revision  Changes    Path
  1.3       +4 -2      jakarta-velocity/build/build-velocity.xml
  
  Index: build-velocity.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/build/build-velocity.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- build-velocity.xml	2000/09/07 03:18:09	1.2
  +++ build-velocity.xml	2000/09/08 21:06:24	1.3
  @@ -26,7 +26,7 @@
           <property name="velocity.xdocs" value="../xdocs"/>
           <property name="velocity.skin" value="../xdocs/skin"/>
           <property name="doc.generator" value="org.apache.stylebook.StyleBook"/>
  -	<property name="antlr.parser.dir" value="org/apache/velocity/processor/antlr/parser"/>
  +	   <property name="antlr.parser.dir" value="org/apache/velocity/processor/antlr/parser"/>
   
           <filter token="year" value="${year}"/>
           <filter token="version" value="${version}"/>
  @@ -50,6 +50,8 @@
       <!-- =================================================================== -->
       <target name="compile" depends="prepare">
   
  +    <!--
  +
   	<java fork="yes"
               classname="antlr.Tool"
               jvmargs="-classpath ${java.class.path}"
  @@ -59,8 +61,8 @@
               classname="antlr.Tool"
               jvmargs="-classpath ${java.class.path}"
               args="-o ${build.src}/${antlr.parser.dir} ${build.src}/${antlr.parser.dir}/Variable.g"/>
  -
   
  +-->
           <javac srcdir="${build.src}"
               destdir="${build.dest}"
               debug="${debug}"
  
  
  
  1.2       +5 -1      jakarta-velocity/examples/Test.java
  
  Index: Test.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/examples/Test.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Test.java	2000/09/06 09:13:22	1.1
  +++ Test.java	2000/09/08 21:06:26	1.2
  @@ -56,6 +56,7 @@
   import java.io.FileOutputStream;
   
   import java.util.ArrayList;
  +import java.util.Hashtable;
   
   import org.apache.velocity.io.FastWriter;
   
  @@ -70,7 +71,7 @@
    * test all the directives support by Velocity.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: Test.java,v 1.1 2000/09/06 09:13:22 jvanzyl Exp $
  + * @version $Id: Test.java,v 1.2 2000/09/08 21:06:26 jvanzyl Exp $
    */
   public class Test
   {
  @@ -78,7 +79,9 @@
       {
           TestProvider provider = new TestProvider();
           ArrayList al = provider.getCustomers();
  +        Hashtable h = new Hashtable();
           
  +        h.put("Bar", "this is from a hashtable!");
           // Comment out below to test the FileLoader.
           // Make sure you set Configuration.setPropertiesFile()
           // to the location of the veclocity.properties file.
  @@ -95,6 +98,7 @@
               context.put("providers", provider.getCustomers2());
               context.put("provider2", new TestProvider2());        
               context.put("list", al);
  +            context.put("hashtable", h);
               
               FastWriter fw = new FastWriter(
                   System.out,
  
  
  
  1.2       +1 -38     jakarta-velocity/examples/test1.wm
  
  Index: test1.wm
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/examples/test1.wm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- test1.wm	2000/09/06 09:13:22	1.1
  +++ test1.wm	2000/09/08 21:06:26	1.2
  @@ -1,38 +1 @@
  -
  -#set $this = "that"
  -#set $thing = $this
  -
  -$this
  -$thing
  -
  -this is the best!
  -
  -"and this"
  -
  -$provider.TestProvider2.Title
  -
  -$provider.TestProvider2.show("a", $provider.TestProvider2.Junk)
  -
  -<table>
  -#foreach $element in $list
  -#begin
  -    <tr>
  -        <td>
  -            This is the $element!
  -        </td>
  -    </tr>        
  -#end
  -</table>
  -
  -#if (true)
  -#begin
  -    this is if
  -#end
  -#elseif ($bar)
  -#begin
  -    this is else
  -#end
  -#else
  -#begin
  -    this is else
  -#end
  +$hashtable.Bar
  
  
  
  1.2       +15 -10    jakarta-velocity/examples/test2.wm
  
  Index: test2.wm
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/examples/test2.wm,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- test2.wm	2000/09/06 09:13:22	1.1
  +++ test2.wm	2000/09/08 21:06:26	1.2
  @@ -1,3 +1,8 @@
  +
  +&&
  +
  +$hashtable.Bar
  +
   #if (true)
   #begin
       this is the first line
  @@ -10,7 +15,7 @@
   
   $100
   
  -#set $foo = "really-long-name"
  +#set $foo = "bar"
   
   This is the $foo way.
   
  @@ -45,8 +50,7 @@
   $foo.
   $foo..
   $foo/
  -## this causes a problem ...
  -##$foo"
  +$foo"
   $foo\
   $foo<
   $foo-
  @@ -111,25 +115,26 @@
   #set $d = $provider.getTitle()
   $d
   
  -##set $provider.Title = "crocodile hunter!"
  +#set $provider.Title = "crocodile hunter!"
   $provider.Title
   
  -##set $provider.Title = $d
  +<!-- look here -->
  +#set $provider.Title = $d
   $provider.Title
   
  -##set $provider.Title = $provider.Name
  +#set $provider.Title = $provider.Name
   $provider.Title
   
  -##set $provider.Title = $provider.getName()
  +#set $provider.Title = $provider.getName()
   $provider.Title
   
   #set $a = true
   
   #set $b = false
   
  -##set $provider.State = true
  +#set $provider.State = true
   
  -##set $provider.State = false
  +#set $provider.State = false
   
   ##if ($provider.StateTrue)
   ##begin
  @@ -151,7 +156,7 @@
       This is $provider.
   #end
   
  -Foreach with a property.
  +Foreach with an array.
   
   <table>
   #foreach $provider in $provider.Array
  
  
  
  1.2       +1 -0      jakarta-velocity/examples/velocity.properties
  
  Index: velocity.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/examples/velocity.properties,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- velocity.properties	2000/09/06 09:13:22	1.1
  +++ velocity.properties	2000/09/08 21:06:26	1.2
  @@ -30,3 +30,4 @@
   # Options for the FastWriter
   template.encoding = UTF8
   template.asciihack = true
  +#template.asciihack = false
  
  
  
  1.2       +1 -1      jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Node.java
  
  Index: Node.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Node.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Node.java	2000/09/06 09:13:30	1.1
  +++ Node.java	2000/09/08 21:06:27	1.2
  @@ -38,5 +38,5 @@
     public Token getFirstToken();
     public Token getLastToken();
     public int getType();
  -  
  +  public Object childrenAccept(ParserVisitor visitor, Object data);  
   }
  
  
  
  1.3       +1114 -105 jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Parser.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Parser.java	2000/09/08 19:46:27	1.2
  +++ Parser.java	2000/09/08 21:06:27	1.3
  @@ -14,7 +14,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: Parser.java,v 1.2 2000/09/08 19:46:27 jvanzyl Exp $
  + * @version $Id: Parser.java,v 1.3 2000/09/08 21:06:27 jvanzyl Exp $
    */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants {/*@bgen(jjtree)*/
     protected JJTParserState jjtree = new JJTParserState();
  @@ -55,8 +55,12 @@
           case RPAREN:
           case COMMA:
           case QUOTE:
  -        case HYPHEN:
           case UNDERSCORE:
  +        case MINUS:
  +        case PLUS:
  +        case MULTIPLY:
  +        case DIVIDE:
  +        case MODULUS:
           case LOGICAL_AND:
           case LOGICAL_OR:
           case LOGICAL_LT:
  @@ -119,6 +123,628 @@
       throw new Error("Missing return statement in function");
     }
   
  +/*
  + * Expression syntax follows.
  + */
  +  final public void Expression() throws ParseException {
  +    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +    case DIDENTIFIER:
  +      Reference();
  +      break;
  +    case TRUE:
  +      True();
  +      break;
  +    case FALSE:
  +      False();
  +      break;
  +    default:
  +      jj_la1[1] = jj_gen;
  +      if (jj_2_1(2147483647)) {
  +        Assignment();
  +      } else {
  +        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +        case LPAREN:
  +        case LOGICAL_NOT:
  +        case STRING_LITERAL:
  +        case IDENTIFIER:
  +          ConditionalOrExpression();
  +          break;
  +        default:
  +          jj_la1[2] = jj_gen;
  +          jj_consume_token(-1);
  +          throw new ParseException();
  +        }
  +      }
  +    }
  +  }
  +
  +  final public void Assignment() throws ParseException {
  +                                    /*@bgen(jjtree) #Assignment( 2) */
  +  ASTAssignment jjtn000 = new ASTAssignment(this, JJTASSIGNMENT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +    try {
  +      PrimaryExpression();
  +      jj_consume_token(EQUALS);
  +      Expression();
  +    } catch (Throwable jjte000) {
  +      if (jjtc000) {
  +        jjtree.clearNodeScope(jjtn000);
  +        jjtc000 = false;
  +      } else {
  +        jjtree.popNode();
  +      }
  +      if (jjte000 instanceof RuntimeException) {
  +        {if (true) throw (RuntimeException)jjte000;}
  +      }
  +      if (jjte000 instanceof ParseException) {
  +        {if (true) throw (ParseException)jjte000;}
  +      }
  +      {if (true) throw (Error)jjte000;}
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000,  2);
  +      }
  +    }
  +  }
  +
  +  final public void ConditionalOrExpression() throws ParseException {
  +    ConditionalAndExpression();
  +    label_2:
  +    while (true) {
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case LOGICAL_OR:
  +        ;
  +        break;
  +      default:
  +        jj_la1[3] = jj_gen;
  +        break label_2;
  +      }
  +      jj_consume_token(LOGICAL_OR);
  +                   ASTOrNode jjtn001 = new ASTOrNode(this, JJTORNODE);
  +                   boolean jjtc001 = true;
  +                   jjtree.openNodeScope(jjtn001);
  +      try {
  +        ConditionalAndExpression();
  +      } catch (Throwable jjte001) {
  +                   if (jjtc001) {
  +                     jjtree.clearNodeScope(jjtn001);
  +                     jjtc001 = false;
  +                   } else {
  +                     jjtree.popNode();
  +                   }
  +                   if (jjte001 instanceof RuntimeException) {
  +                     {if (true) throw (RuntimeException)jjte001;}
  +                   }
  +                   if (jjte001 instanceof ParseException) {
  +                     {if (true) throw (ParseException)jjte001;}
  +                   }
  +                   {if (true) throw (Error)jjte001;}
  +      } finally {
  +                   if (jjtc001) {
  +                     jjtree.closeNodeScope(jjtn001,  2);
  +                   }
  +      }
  +    }
  +  }
  +
  +  final public void ConditionalAndExpression() throws ParseException {
  +    EqualityExpression();
  +    label_3:
  +    while (true) {
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case LOGICAL_AND:
  +        ;
  +        break;
  +      default:
  +        jj_la1[4] = jj_gen;
  +        break label_3;
  +      }
  +      jj_consume_token(LOGICAL_AND);
  +                     ASTAndNode jjtn001 = new ASTAndNode(this, JJTANDNODE);
  +                     boolean jjtc001 = true;
  +                     jjtree.openNodeScope(jjtn001);
  +      try {
  +        EqualityExpression();
  +      } catch (Throwable jjte001) {
  +                     if (jjtc001) {
  +                       jjtree.clearNodeScope(jjtn001);
  +                       jjtc001 = false;
  +                     } else {
  +                       jjtree.popNode();
  +                     }
  +                     if (jjte001 instanceof RuntimeException) {
  +                       {if (true) throw (RuntimeException)jjte001;}
  +                     }
  +                     if (jjte001 instanceof ParseException) {
  +                       {if (true) throw (ParseException)jjte001;}
  +                     }
  +                     {if (true) throw (Error)jjte001;}
  +      } finally {
  +                     if (jjtc001) {
  +                       jjtree.closeNodeScope(jjtn001,  2);
  +                     }
  +      }
  +    }
  +  }
  +
  +/*
  +
  +void ConditionalAndExpression() #void : {}
  +{
  +  InclusiveOrExpression()
  +  ( <LOGICAL_AND>  InclusiveOrExpression() #AndNode(2) )*
  +}
  +
  +
  +void InclusiveOrExpression() #void : {}
  +{
  +  ExclusiveOrExpression()
  +  ( "|" ExclusiveOrExpression() #BitwiseOrNode(2) )*
  +}
  +
  +void ExclusiveOrExpression() #void : {}
  +{
  +  AndExpression()
  +  ( "^" AndExpression() #BitwiseXorNode(2) )*
  +}
  +
  +void AndExpression() #void : {}
  +{
  +  EqualityExpression()
  +  ( "&" EqualityExpression() #BitwiseAndNode(2) )*
  +}
  +
  +*/
  +  final public void EqualityExpression() throws ParseException {
  +    RelationalExpression();
  +    label_4:
  +    while (true) {
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case LOGICAL_EQUALS:
  +      case LOGICAL_NOT_EQUALS:
  +        ;
  +        break;
  +      default:
  +        jj_la1[5] = jj_gen;
  +        break label_4;
  +      }
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case LOGICAL_EQUALS:
  +        jj_consume_token(LOGICAL_EQUALS);
  +                             ASTEQNode jjtn001 = new ASTEQNode(this, JJTEQNODE);
  +                             boolean jjtc001 = true;
  +                             jjtree.openNodeScope(jjtn001);
  +        try {
  +          RelationalExpression();
  +        } catch (Throwable jjte001) {
  +                             if (jjtc001) {
  +                               jjtree.clearNodeScope(jjtn001);
  +                               jjtc001 = false;
  +                             } else {
  +                               jjtree.popNode();
  +                             }
  +                             if (jjte001 instanceof RuntimeException) {
  +                               {if (true) throw (RuntimeException)jjte001;}
  +                             }
  +                             if (jjte001 instanceof ParseException) {
  +                               {if (true) throw (ParseException)jjte001;}
  +                             }
  +                             {if (true) throw (Error)jjte001;}
  +        } finally {
  +                             if (jjtc001) {
  +                               jjtree.closeNodeScope(jjtn001,  2);
  +                             }
  +        }
  +        break;
  +      case LOGICAL_NOT_EQUALS:
  +        jj_consume_token(LOGICAL_NOT_EQUALS);
  +                                 ASTNENode jjtn002 = new ASTNENode(this, JJTNENODE);
  +                                 boolean jjtc002 = true;
  +                                 jjtree.openNodeScope(jjtn002);
  +        try {
  +          RelationalExpression();
  +        } catch (Throwable jjte002) {
  +                                 if (jjtc002) {
  +                                   jjtree.clearNodeScope(jjtn002);
  +                                   jjtc002 = false;
  +                                 } else {
  +                                   jjtree.popNode();
  +                                 }
  +                                 if (jjte002 instanceof RuntimeException) {
  +                                   {if (true) throw (RuntimeException)jjte002;}
  +                                 }
  +                                 if (jjte002 instanceof ParseException) {
  +                                   {if (true) throw (ParseException)jjte002;}
  +                                 }
  +                                 {if (true) throw (Error)jjte002;}
  +        } finally {
  +                                 if (jjtc002) {
  +                                   jjtree.closeNodeScope(jjtn002,  2);
  +                                 }
  +        }
  +        break;
  +      default:
  +        jj_la1[6] = jj_gen;
  +        jj_consume_token(-1);
  +        throw new ParseException();
  +      }
  +    }
  +  }
  +
  +  final public void RelationalExpression() throws ParseException {
  +    AdditiveExpression();
  +    label_5:
  +    while (true) {
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case LOGICAL_LT:
  +      case LOGICAL_LE:
  +      case LOGICAL_GT:
  +      case LOGICAL_GE:
  +        ;
  +        break;
  +      default:
  +        jj_la1[7] = jj_gen;
  +        break label_5;
  +      }
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case LOGICAL_LT:
  +        jj_consume_token(LOGICAL_LT);
  +                         ASTLTNode jjtn001 = new ASTLTNode(this, JJTLTNODE);
  +                         boolean jjtc001 = true;
  +                         jjtree.openNodeScope(jjtn001);
  +        try {
  +          AdditiveExpression();
  +        } catch (Throwable jjte001) {
  +                         if (jjtc001) {
  +                           jjtree.clearNodeScope(jjtn001);
  +                           jjtc001 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte001 instanceof RuntimeException) {
  +                           {if (true) throw (RuntimeException)jjte001;}
  +                         }
  +                         if (jjte001 instanceof ParseException) {
  +                           {if (true) throw (ParseException)jjte001;}
  +                         }
  +                         {if (true) throw (Error)jjte001;}
  +        } finally {
  +                         if (jjtc001) {
  +                           jjtree.closeNodeScope(jjtn001,  2);
  +                         }
  +        }
  +        break;
  +      case LOGICAL_GT:
  +        jj_consume_token(LOGICAL_GT);
  +                         ASTGTNode jjtn002 = new ASTGTNode(this, JJTGTNODE);
  +                         boolean jjtc002 = true;
  +                         jjtree.openNodeScope(jjtn002);
  +        try {
  +          AdditiveExpression();
  +        } catch (Throwable jjte002) {
  +                         if (jjtc002) {
  +                           jjtree.clearNodeScope(jjtn002);
  +                           jjtc002 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte002 instanceof RuntimeException) {
  +                           {if (true) throw (RuntimeException)jjte002;}
  +                         }
  +                         if (jjte002 instanceof ParseException) {
  +                           {if (true) throw (ParseException)jjte002;}
  +                         }
  +                         {if (true) throw (Error)jjte002;}
  +        } finally {
  +                         if (jjtc002) {
  +                           jjtree.closeNodeScope(jjtn002,  2);
  +                         }
  +        }
  +        break;
  +      case LOGICAL_LE:
  +        jj_consume_token(LOGICAL_LE);
  +                         ASTLENode jjtn003 = new ASTLENode(this, JJTLENODE);
  +                         boolean jjtc003 = true;
  +                         jjtree.openNodeScope(jjtn003);
  +        try {
  +          AdditiveExpression();
  +        } catch (Throwable jjte003) {
  +                         if (jjtc003) {
  +                           jjtree.clearNodeScope(jjtn003);
  +                           jjtc003 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte003 instanceof RuntimeException) {
  +                           {if (true) throw (RuntimeException)jjte003;}
  +                         }
  +                         if (jjte003 instanceof ParseException) {
  +                           {if (true) throw (ParseException)jjte003;}
  +                         }
  +                         {if (true) throw (Error)jjte003;}
  +        } finally {
  +                         if (jjtc003) {
  +                           jjtree.closeNodeScope(jjtn003,  2);
  +                         }
  +        }
  +        break;
  +      case LOGICAL_GE:
  +        jj_consume_token(LOGICAL_GE);
  +                         ASTGENode jjtn004 = new ASTGENode(this, JJTGENODE);
  +                         boolean jjtc004 = true;
  +                         jjtree.openNodeScope(jjtn004);
  +        try {
  +          AdditiveExpression();
  +        } catch (Throwable jjte004) {
  +                         if (jjtc004) {
  +                           jjtree.clearNodeScope(jjtn004);
  +                           jjtc004 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte004 instanceof RuntimeException) {
  +                           {if (true) throw (RuntimeException)jjte004;}
  +                         }
  +                         if (jjte004 instanceof ParseException) {
  +                           {if (true) throw (ParseException)jjte004;}
  +                         }
  +                         {if (true) throw (Error)jjte004;}
  +        } finally {
  +                         if (jjtc004) {
  +                           jjtree.closeNodeScope(jjtn004,  2);
  +                         }
  +        }
  +        break;
  +      default:
  +        jj_la1[8] = jj_gen;
  +        jj_consume_token(-1);
  +        throw new ParseException();
  +      }
  +    }
  +  }
  +
  +  final public void AdditiveExpression() throws ParseException {
  +    MultiplicativeExpression();
  +    label_6:
  +    while (true) {
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case MINUS:
  +      case PLUS:
  +        ;
  +        break;
  +      default:
  +        jj_la1[9] = jj_gen;
  +        break label_6;
  +      }
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case PLUS:
  +        jj_consume_token(PLUS);
  +                    ASTAddNode jjtn001 = new ASTAddNode(this, JJTADDNODE);
  +                    boolean jjtc001 = true;
  +                    jjtree.openNodeScope(jjtn001);
  +        try {
  +          MultiplicativeExpression();
  +        } catch (Throwable jjte001) {
  +                    if (jjtc001) {
  +                      jjtree.clearNodeScope(jjtn001);
  +                      jjtc001 = false;
  +                    } else {
  +                      jjtree.popNode();
  +                    }
  +                    if (jjte001 instanceof RuntimeException) {
  +                      {if (true) throw (RuntimeException)jjte001;}
  +                    }
  +                    if (jjte001 instanceof ParseException) {
  +                      {if (true) throw (ParseException)jjte001;}
  +                    }
  +                    {if (true) throw (Error)jjte001;}
  +        } finally {
  +                    if (jjtc001) {
  +                      jjtree.closeNodeScope(jjtn001,  2);
  +                    }
  +        }
  +        break;
  +      case MINUS:
  +        jj_consume_token(MINUS);
  +                    ASTSubtractNode jjtn002 = new ASTSubtractNode(this, JJTSUBTRACTNODE);
  +                    boolean jjtc002 = true;
  +                    jjtree.openNodeScope(jjtn002);
  +        try {
  +          MultiplicativeExpression();
  +        } catch (Throwable jjte002) {
  +                    if (jjtc002) {
  +                      jjtree.clearNodeScope(jjtn002);
  +                      jjtc002 = false;
  +                    } else {
  +                      jjtree.popNode();
  +                    }
  +                    if (jjte002 instanceof RuntimeException) {
  +                      {if (true) throw (RuntimeException)jjte002;}
  +                    }
  +                    if (jjte002 instanceof ParseException) {
  +                      {if (true) throw (ParseException)jjte002;}
  +                    }
  +                    {if (true) throw (Error)jjte002;}
  +        } finally {
  +                    if (jjtc002) {
  +                      jjtree.closeNodeScope(jjtn002,  2);
  +                    }
  +        }
  +        break;
  +      default:
  +        jj_la1[10] = jj_gen;
  +        jj_consume_token(-1);
  +        throw new ParseException();
  +      }
  +    }
  +  }
  +
  +  final public void MultiplicativeExpression() throws ParseException {
  +    UnaryExpression();
  +    label_7:
  +    while (true) {
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case MULTIPLY:
  +      case DIVIDE:
  +      case MODULUS:
  +        ;
  +        break;
  +      default:
  +        jj_la1[11] = jj_gen;
  +        break label_7;
  +      }
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case MULTIPLY:
  +        jj_consume_token(MULTIPLY);
  +                  ASTMulNode jjtn001 = new ASTMulNode(this, JJTMULNODE);
  +                  boolean jjtc001 = true;
  +                  jjtree.openNodeScope(jjtn001);
  +        try {
  +          UnaryExpression();
  +        } catch (Throwable jjte001) {
  +                  if (jjtc001) {
  +                    jjtree.clearNodeScope(jjtn001);
  +                    jjtc001 = false;
  +                  } else {
  +                    jjtree.popNode();
  +                  }
  +                  if (jjte001 instanceof RuntimeException) {
  +                    {if (true) throw (RuntimeException)jjte001;}
  +                  }
  +                  if (jjte001 instanceof ParseException) {
  +                    {if (true) throw (ParseException)jjte001;}
  +                  }
  +                  {if (true) throw (Error)jjte001;}
  +        } finally {
  +                  if (jjtc001) {
  +                    jjtree.closeNodeScope(jjtn001,  2);
  +                  }
  +        }
  +        break;
  +      case DIVIDE:
  +        jj_consume_token(DIVIDE);
  +                  ASTDivNode jjtn002 = new ASTDivNode(this, JJTDIVNODE);
  +                  boolean jjtc002 = true;
  +                  jjtree.openNodeScope(jjtn002);
  +        try {
  +          UnaryExpression();
  +        } catch (Throwable jjte002) {
  +                  if (jjtc002) {
  +                    jjtree.clearNodeScope(jjtn002);
  +                    jjtc002 = false;
  +                  } else {
  +                    jjtree.popNode();
  +                  }
  +                  if (jjte002 instanceof RuntimeException) {
  +                    {if (true) throw (RuntimeException)jjte002;}
  +                  }
  +                  if (jjte002 instanceof ParseException) {
  +                    {if (true) throw (ParseException)jjte002;}
  +                  }
  +                  {if (true) throw (Error)jjte002;}
  +        } finally {
  +                  if (jjtc002) {
  +                    jjtree.closeNodeScope(jjtn002,  2);
  +                  }
  +        }
  +        break;
  +      case MODULUS:
  +        jj_consume_token(MODULUS);
  +                  ASTModNode jjtn003 = new ASTModNode(this, JJTMODNODE);
  +                  boolean jjtc003 = true;
  +                  jjtree.openNodeScope(jjtn003);
  +        try {
  +          UnaryExpression();
  +        } catch (Throwable jjte003) {
  +                  if (jjtc003) {
  +                    jjtree.clearNodeScope(jjtn003);
  +                    jjtc003 = false;
  +                  } else {
  +                    jjtree.popNode();
  +                  }
  +                  if (jjte003 instanceof RuntimeException) {
  +                    {if (true) throw (RuntimeException)jjte003;}
  +                  }
  +                  if (jjte003 instanceof ParseException) {
  +                    {if (true) throw (ParseException)jjte003;}
  +                  }
  +                  {if (true) throw (Error)jjte003;}
  +        } finally {
  +                  if (jjtc003) {
  +                    jjtree.closeNodeScope(jjtn003,  2);
  +                  }
  +        }
  +        break;
  +      default:
  +        jj_la1[12] = jj_gen;
  +        jj_consume_token(-1);
  +        throw new ParseException();
  +      }
  +    }
  +  }
  +
  +  final public void UnaryExpression() throws ParseException {
  +    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +    case LOGICAL_NOT:
  +      jj_consume_token(LOGICAL_NOT);
  +                    ASTNotNode jjtn001 = new ASTNotNode(this, JJTNOTNODE);
  +                    boolean jjtc001 = true;
  +                    jjtree.openNodeScope(jjtn001);
  +      try {
  +        UnaryExpression();
  +      } catch (Throwable jjte001) {
  +                    if (jjtc001) {
  +                      jjtree.clearNodeScope(jjtn001);
  +                      jjtc001 = false;
  +                    } else {
  +                      jjtree.popNode();
  +                    }
  +                    if (jjte001 instanceof RuntimeException) {
  +                      {if (true) throw (RuntimeException)jjte001;}
  +                    }
  +                    if (jjte001 instanceof ParseException) {
  +                      {if (true) throw (ParseException)jjte001;}
  +                    }
  +                    {if (true) throw (Error)jjte001;}
  +      } finally {
  +                    if (jjtc001) {
  +                      jjtree.closeNodeScope(jjtn001,  1);
  +                    }
  +      }
  +      break;
  +    case LPAREN:
  +    case STRING_LITERAL:
  +    case IDENTIFIER:
  +      PrimaryExpression();
  +      break;
  +    default:
  +      jj_la1[13] = jj_gen;
  +      jj_consume_token(-1);
  +      throw new ParseException();
  +    }
  +  }
  +
  +  final public void PrimaryExpression() throws ParseException {
  +    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +    case STRING_LITERAL:
  +      StringLiteral();
  +      break;
  +    case IDENTIFIER:
  +      Identifier();
  +      break;
  +    case LPAREN:
  +      jj_consume_token(LPAREN);
  +      Expression();
  +      jj_consume_token(RPAREN);
  +      break;
  +    default:
  +      jj_la1[14] = jj_gen;
  +      jj_consume_token(-1);
  +      throw new ParseException();
  +    }
  +  }
  +
   /**
    * These are the types of statements that
    * are acceptable in Velocity templates.
  @@ -134,8 +760,12 @@
       case RPAREN:
       case COMMA:
       case QUOTE:
  -    case HYPHEN:
       case UNDERSCORE:
  +    case MINUS:
  +    case PLUS:
  +    case MULTIPLY:
  +    case DIVIDE:
  +    case MODULUS:
       case LOGICAL_AND:
       case LOGICAL_OR:
       case LOGICAL_LT:
  @@ -189,7 +819,7 @@
         Reference();
         break;
       default:
  -      jj_la1[1] = jj_gen;
  +      jj_la1[15] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
  @@ -248,7 +878,7 @@
         StringLiteral();
         break;
       default:
  -      jj_la1[2] = jj_gen;
  +      jj_la1[16] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
  @@ -271,22 +901,22 @@
         case STRING_LITERAL:
         case DIDENTIFIER:
           Parameter();
  -        label_2:
  +        label_8:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case COMMA:
               ;
               break;
             default:
  -            jj_la1[3] = jj_gen;
  -            break label_2;
  +            jj_la1[17] = jj_gen;
  +            break label_8;
             }
             jj_consume_token(COMMA);
             Parameter();
           }
           break;
         default:
  -        jj_la1[4] = jj_gen;
  +        jj_la1[18] = jj_gen;
           ;
         }
         jj_consume_token(RPAREN);
  @@ -318,15 +948,15 @@
     jjtree.openNodeScope(jjtn000);
       try {
         jj_consume_token(DIDENTIFIER);
  -      label_3:
  +      label_9:
         while (true) {
  -        if (jj_2_1(2)) {
  +        if (jj_2_2(2)) {
             ;
           } else {
  -          break label_3;
  +          break label_9;
           }
           jj_consume_token(DOT);
  -        if (jj_2_2(3)) {
  +        if (jj_2_3(3)) {
             Method();
           } else {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -334,7 +964,7 @@
               Identifier();
               break;
             default:
  -            jj_la1[5] = jj_gen;
  +            jj_la1[19] = jj_gen;
               jj_consume_token(-1);
               throw new ParseException();
             }
  @@ -389,47 +1019,12 @@
       }
     }
   
  -  final public void Expression() throws ParseException {
  -                     /*@bgen(jjtree) Expression */
  -  ASTExpression jjtn000 = new ASTExpression(this, JJTEXPRESSION);
  -  boolean jjtc000 = true;
  -  jjtree.openNodeScope(jjtn000);
  -    try {
  -      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  -      case DIDENTIFIER:
  -        Reference();
  -        break;
  -      case TRUE:
  -        True();
  -        break;
  -      case FALSE:
  -        False();
  -        break;
  -      default:
  -        jj_la1[6] = jj_gen;
  -        jj_consume_token(-1);
  -        throw new ParseException();
  -      }
  -    } catch (Throwable jjte000) {
  -      if (jjtc000) {
  -        jjtree.clearNodeScope(jjtn000);
  -        jjtc000 = false;
  -      } else {
  -        jjtree.popNode();
  -      }
  -      if (jjte000 instanceof RuntimeException) {
  -        {if (true) throw (RuntimeException)jjte000;}
  -      }
  -      if (jjte000 instanceof ParseException) {
  -        {if (true) throw (ParseException)jjte000;}
  -      }
  -      {if (true) throw (Error)jjte000;}
  -    } finally {
  -      if (jjtc000) {
  -        jjtree.closeNodeScope(jjtn000, true);
  -      }
  -    }
  -  }
  +/*
  +void Expression() : {}
  +{
  +    Reference() | True() | False()
  +}
  +*/
   
   /**
    * This method corresponds to a block in
  @@ -448,7 +1043,7 @@
     jjtree.openNodeScope(jjtn000);
       try {
         jj_consume_token(BEGIN);
  -      label_4:
  +      label_10:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case DOLLAR:
  @@ -457,8 +1052,12 @@
           case RPAREN:
           case COMMA:
           case QUOTE:
  -        case HYPHEN:
           case UNDERSCORE:
  +        case MINUS:
  +        case PLUS:
  +        case MULTIPLY:
  +        case DIVIDE:
  +        case MODULUS:
           case LOGICAL_AND:
           case LOGICAL_OR:
           case LOGICAL_LT:
  @@ -490,8 +1089,8 @@
             ;
             break;
           default:
  -          jj_la1[7] = jj_gen;
  -          break label_4;
  +          jj_la1[20] = jj_gen;
  +          break label_10;
           }
           Statement();
         }
  @@ -555,10 +1154,22 @@
           break;
         case QUOTE:
           jj_consume_token(QUOTE);
  +        break;
  +      case MINUS:
  +        jj_consume_token(MINUS);
  +        break;
  +      case PLUS:
  +        jj_consume_token(PLUS);
  +        break;
  +      case MULTIPLY:
  +        jj_consume_token(MULTIPLY);
           break;
  -      case HYPHEN:
  -        jj_consume_token(HYPHEN);
  +      case DIVIDE:
  +        jj_consume_token(DIVIDE);
           break;
  +      case MODULUS:
  +        jj_consume_token(MODULUS);
  +        break;
         case UNDERSCORE:
           jj_consume_token(UNDERSCORE);
           break;
  @@ -605,7 +1216,7 @@
           jj_consume_token(LOGICAL_NOT);
           break;
         default:
  -        jj_la1[8] = jj_gen;
  +        jj_la1[21] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -658,7 +1269,7 @@
           ElseStatement();
           break;
         default:
  -        jj_la1[9] = jj_gen;
  +        jj_la1[22] = jj_gen;
           ;
         }
       } catch (Throwable jjte000) {
  @@ -727,7 +1338,7 @@
           ElseStatement();
           break;
         default:
  -        jj_la1[10] = jj_gen;
  +        jj_la1[23] = jj_gen;
           ;
         }
       } catch (Throwable jjte000) {
  @@ -855,7 +1466,7 @@
           False();
           break;
         default:
  -        jj_la1[11] = jj_gen;
  +        jj_la1[24] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -988,89 +1599,486 @@
       return retval;
     }
   
  -  final private boolean jj_3R_9() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_10()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_11()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  +  final private boolean jj_2_3(int xla) {
  +    jj_la = xla; jj_lastpos = jj_scanpos = token;
  +    boolean retval = !jj_3_3();
  +    jj_save(2, xla);
  +    return retval;
     }
   
  -  final private boolean jj_3R_10() {
  -    if (jj_3R_12()) return true;
  +  final private boolean jj_3R_49() {
  +    if (jj_scan_token(LOGICAL_LE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_40()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_48() {
  +    if (jj_scan_token(LOGICAL_GT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_40()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
     final private boolean jj_3R_13() {
  -    if (jj_scan_token(STRING_LITERAL)) return true;
  +    if (jj_3R_17()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(LPAREN)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_18()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(RPAREN)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_47() {
  +    if (jj_scan_token(LOGICAL_LT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_40()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_41() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_47()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_48()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_49()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_50()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_43() {
  +    if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_38()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_38() {
  +    if (jj_3R_40()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_41()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_39() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_42()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_43()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_42() {
  +    if (jj_scan_token(LOGICAL_EQUALS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_38()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_21() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_27()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_28()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_27() {
  +    if (jj_3R_29()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_36() {
  +    if (jj_3R_38()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_39()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_17() {
  +    if (jj_scan_token(IDENTIFIER)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
     final private boolean jj_3R_12() {
  -    if (jj_scan_token(DIDENTIFIER)) return true;
  +    if (jj_3R_17()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_11() {
  +  final private boolean jj_3R_19() {
  +    if (jj_scan_token(STRING_LITERAL)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_37() {
  +    if (jj_scan_token(LOGICAL_AND)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_36()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_34() {
  +    if (jj_3R_36()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_37()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3_3() {
       if (jj_3R_13()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_7() {
  -    if (jj_scan_token(IDENTIFIER)) return true;
  +  final private boolean jj_3R_44() {
  +    if (jj_scan_token(COMMA)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_21()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_8() {
  -    if (jj_3R_9()) return true;
  +  final private boolean jj_3R_35() {
  +    if (jj_scan_token(LOGICAL_OR)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_34()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_6() {
  -    if (jj_3R_7()) return true;
  +  final private boolean jj_3_1() {
  +    if (jj_3R_11()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(EQUALS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_33() {
  +    if (jj_3R_34()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_35()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_32() {
  +    if (jj_3R_11()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(EQUALS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_20()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_16() {
       if (jj_scan_token(LPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_20()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(RPAREN)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_15() {
  +    if (jj_3R_17()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_11() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_8()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(RPAREN)) return true;
  +    if (jj_3R_14()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_15()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_16()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3_1() {
  -    if (jj_scan_token(DOT)) return true;
  +  final private boolean jj_3R_14() {
  +    if (jj_3R_19()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_26() {
  +    if (jj_3R_33()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_25() {
  +    if (jj_3R_32()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_18() {
  +    if (jj_3R_21()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_44()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_56() {
  +    if (jj_3R_11()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_24() {
  +    if (jj_3R_31()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_55() {
  +    if (jj_scan_token(LOGICAL_NOT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_51()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_51() {
  +    Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3_2()) {
  +    if (jj_3R_55()) {
       jj_scanpos = xsp;
  -    if (jj_3R_5()) return true;
  +    if (jj_3R_56()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_5() {
  -    if (jj_3R_7()) return true;
  +  final private boolean jj_3R_23() {
  +    if (jj_3R_30()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  +  final private boolean jj_3R_22() {
  +    if (jj_3R_29()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_20() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_22()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_23()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_24()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_25()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_26()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
     final private boolean jj_3_2() {
  -    if (jj_3R_6()) return true;
  +    if (jj_scan_token(DOT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3_3()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_12()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_59() {
  +    if (jj_scan_token(MODULUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_51()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_58() {
  +    if (jj_scan_token(DIVIDE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_51()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_31() {
  +    if (jj_scan_token(FALSE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_57() {
  +    if (jj_scan_token(MULTIPLY)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_51()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_52() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_57()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_58()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_59()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_54() {
  +    if (jj_scan_token(MINUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_45()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_53() {
  +    if (jj_scan_token(PLUS)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_45()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_46() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_53()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_54()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_30() {
  +    if (jj_scan_token(TRUE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_45() {
  +    if (jj_3R_51()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_52()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_29() {
  +    if (jj_scan_token(DIDENTIFIER)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3_2()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_28() {
  +    if (jj_3R_19()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_50() {
  +    if (jj_scan_token(LOGICAL_GE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_40()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_40() {
  +    if (jj_3R_45()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_46()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  @@ -1083,10 +2091,10 @@
     public boolean lookingAhead = false;
     private boolean jj_semLA;
     private int jj_gen;
  -  final private int[] jj_la1 = new int[12];
  -  final private int[] jj_la1_0 = {0xdfffffc0,0xdfffffc0,0x8000000,0x400,0x8000000,0x0,0x6000000,0xdfffffc0,0xfffffc0,0x0,0x0,0xe000000,};
  -  final private int[] jj_la1_1 = {0x39fb,0x39fb,0x1000,0x0,0x1000,0x800,0x1000,0x39fb,0x2900,0x4,0x4,0x1000,};
  -  final private JJCalls[] jj_2_rtns = new JJCalls[2];
  +  final private int[] jj_la1 = new int[25];
  +  final private int[] jj_la1_0 = {0xffffffc0,0x60000000,0x84000100,0x80000,0x40000,0x3000000,0x3000000,0xf00000,0xf00000,0x6000,0x6000,0x38000,0x38000,0x84000100,0x80000100,0xffffffc0,0x80000000,0x400,0x80000000,0x0,0xffffffc0,0xffffffc0,0x0,0x0,0xe0000000,};
  +  final private int[] jj_la1_1 = {0x39fbd,0x10000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x8000,0x39fbd,0x10000,0x0,0x10000,0x8000,0x39fbd,0x29000,0x40,0x40,0x10000,};
  +  final private JJCalls[] jj_2_rtns = new JJCalls[3];
     private boolean jj_rescan = false;
     private int jj_gc = 0;
   
  @@ -1096,7 +2104,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 12; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 25; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -1107,7 +2115,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 12; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 25; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -1117,7 +2125,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 12; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 25; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -1128,7 +2136,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 12; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 25; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -1137,7 +2145,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 12; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 25; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -1147,7 +2155,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 12; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 25; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -1254,15 +2262,15 @@
   
     final public ParseException generateParseException() {
       jj_expentries.removeAllElements();
  -    boolean[] la1tokens = new boolean[47];
  -    for (int i = 0; i < 47; i++) {
  +    boolean[] la1tokens = new boolean[51];
  +    for (int i = 0; i < 51; i++) {
         la1tokens[i] = false;
       }
       if (jj_kind >= 0) {
         la1tokens[jj_kind] = true;
         jj_kind = -1;
       }
  -    for (int i = 0; i < 12; i++) {
  +    for (int i = 0; i < 25; i++) {
         if (jj_la1[i] == jj_gen) {
           for (int j = 0; j < 32; j++) {
             if ((jj_la1_0[i] & (1<<j)) != 0) {
  @@ -1274,7 +2282,7 @@
           }
         }
       }
  -    for (int i = 0; i < 47; i++) {
  +    for (int i = 0; i < 51; i++) {
         if (la1tokens[i]) {
           jj_expentry = new int[1];
           jj_expentry[0] = i;
  @@ -1299,7 +2307,7 @@
   
     final private void jj_rescan_token() {
       jj_rescan = true;
  -    for (int i = 0; i < 2; i++) {
  +    for (int i = 0; i < 3; i++) {
         JJCalls p = jj_2_rtns[i];
         do {
           if (p.gen > jj_gen) {
  @@ -1307,6 +2315,7 @@
             switch (i) {
               case 0: jj_3_1(); break;
               case 1: jj_3_2(); break;
  +            case 2: jj_3_3(); break;
             }
           }
           p = p.next;
  
  
  
  1.3       +539 -32   jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Parser.jj
  
  Index: Parser.jj
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Parser.jj,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Parser.jj	2000/09/08 19:46:28	1.2
  +++ Parser.jj	2000/09/08 21:06:27	1.3
  @@ -97,7 +97,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: Parser.jj,v 1.2 2000/09/08 19:46:28 jvanzyl Exp $
  + * @version $Id: Parser.jj,v 1.3 2000/09/08 21:06:27 jvanzyl Exp $
    */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
   {/*@bgen(jjtree)*/
  @@ -154,10 +154,20 @@
   |   <RPAREN: ")" >
   |   <COMMA: ",">
   |   <QUOTE: "\"">
  -|   <HYPHEN: "-">
   |   <UNDERSCORE: "_">
   }
   
  +// Arithmetic operators
  +
  +TOKEN : 
  +{
  +    <MINUS: "-">
  +|   <PLUS: "+">
  +|   <MULTIPLY: "*">
  +|   <DIVIDE: "/">
  +|   <MODULUS: "%">
  +}
  +
   // Logic operators.
   
   TOKEN :
  @@ -410,6 +420,523 @@
   /*@egen*/
   }
   
  +/*
  + * Expression syntax follows.
  + */
  +
  +void Expression()       : {}
  +{
  +    Reference()
  +|   True()
  +|   False()
  +|   LOOKAHEAD( PrimaryExpression() "=" ) Assignment()
  +|   ConditionalOrExpression()
  +}
  +
  +void Assignment()                : {/*@bgen(jjtree) #Assignment( 2) */
  +  ASTAssignment jjtn000 = new ASTAssignment(this, JJTASSIGNMENT);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
  +{/*@bgen(jjtree) #Assignment( 2) */
  +    try {
  +/*@egen*/
  +    PrimaryExpression() <EQUALS> Expression()/*@bgen(jjtree)*/
  +    } catch (Throwable jjte000) {
  +      if (jjtc000) {
  +        jjtree.clearNodeScope(jjtn000);
  +        jjtc000 = false;
  +      } else {
  +        jjtree.popNode();
  +      }
  +      if (jjte000 instanceof RuntimeException) {
  +        throw (RuntimeException)jjte000;
  +      }
  +      if (jjte000 instanceof ParseException) {
  +        throw (ParseException)jjte000;
  +      }
  +      throw (Error)jjte000;
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000,  2);
  +      }
  +    }
  +/*@egen*/
  +}
  +
  +void ConditionalOrExpression()       : {}
  +{
  +  ConditionalAndExpression()
  +  ( <LOGICAL_OR>/*@bgen(jjtree) #OrNode( 2) */
  +                 {
  +                   ASTOrNode jjtn001 = new ASTOrNode(this, JJTORNODE);
  +                   boolean jjtc001 = true;
  +                   jjtree.openNodeScope(jjtn001);
  +                 }
  +                 try {
  +/*@egen*/ ConditionalAndExpression()/*@bgen(jjtree)*/
  +                 } catch (Throwable jjte001) {
  +                   if (jjtc001) {
  +                     jjtree.clearNodeScope(jjtn001);
  +                     jjtc001 = false;
  +                   } else {
  +                     jjtree.popNode();
  +                   }
  +                   if (jjte001 instanceof RuntimeException) {
  +                     throw (RuntimeException)jjte001;
  +                   }
  +                   if (jjte001 instanceof ParseException) {
  +                     throw (ParseException)jjte001;
  +                   }
  +                   throw (Error)jjte001;
  +                 } finally {
  +                   if (jjtc001) {
  +                     jjtree.closeNodeScope(jjtn001,  2);
  +                   }
  +                 }
  +/*@egen*/ )*
  +}
  +
  +
  +void ConditionalAndExpression()       : {}
  +{
  +  EqualityExpression()
  +  ( <LOGICAL_AND>/*@bgen(jjtree) #AndNode( 2) */
  +                   {
  +                     ASTAndNode jjtn001 = new ASTAndNode(this, JJTANDNODE);
  +                     boolean jjtc001 = true;
  +                     jjtree.openNodeScope(jjtn001);
  +                   }
  +                   try {
  +/*@egen*/  EqualityExpression()/*@bgen(jjtree)*/
  +                   } catch (Throwable jjte001) {
  +                     if (jjtc001) {
  +                       jjtree.clearNodeScope(jjtn001);
  +                       jjtc001 = false;
  +                     } else {
  +                       jjtree.popNode();
  +                     }
  +                     if (jjte001 instanceof RuntimeException) {
  +                       throw (RuntimeException)jjte001;
  +                     }
  +                     if (jjte001 instanceof ParseException) {
  +                       throw (ParseException)jjte001;
  +                     }
  +                     throw (Error)jjte001;
  +                   } finally {
  +                     if (jjtc001) {
  +                       jjtree.closeNodeScope(jjtn001,  2);
  +                     }
  +                   }
  +/*@egen*/ )*
  +}
  +
  +/*
  +
  +void ConditionalAndExpression() #void : {}
  +{
  +  InclusiveOrExpression()
  +  ( <LOGICAL_AND>  InclusiveOrExpression() #AndNode(2) )*
  +}
  +
  +
  +void InclusiveOrExpression() #void : {}
  +{
  +  ExclusiveOrExpression()
  +  ( "|" ExclusiveOrExpression() #BitwiseOrNode(2) )*
  +}
  +
  +void ExclusiveOrExpression() #void : {}
  +{
  +  AndExpression()
  +  ( "^" AndExpression() #BitwiseXorNode(2) )*
  +}
  +
  +void AndExpression() #void : {}
  +{
  +  EqualityExpression()
  +  ( "&" EqualityExpression() #BitwiseAndNode(2) )*
  +}
  +
  +*/
  +
  +void EqualityExpression()       : {}
  +{
  +    RelationalExpression()
  +    (
  +          <LOGICAL_EQUALS>/*@bgen(jjtree) #EQNode( 2) */
  +                           {
  +                             ASTEQNode jjtn001 = new ASTEQNode(this, JJTEQNODE);
  +                             boolean jjtc001 = true;
  +                             jjtree.openNodeScope(jjtn001);
  +                           }
  +                           try {
  +/*@egen*/ RelationalExpression()/*@bgen(jjtree)*/
  +                           } catch (Throwable jjte001) {
  +                             if (jjtc001) {
  +                               jjtree.clearNodeScope(jjtn001);
  +                               jjtc001 = false;
  +                             } else {
  +                               jjtree.popNode();
  +                             }
  +                             if (jjte001 instanceof RuntimeException) {
  +                               throw (RuntimeException)jjte001;
  +                             }
  +                             if (jjte001 instanceof ParseException) {
  +                               throw (ParseException)jjte001;
  +                             }
  +                             throw (Error)jjte001;
  +                           } finally {
  +                             if (jjtc001) {
  +                               jjtree.closeNodeScope(jjtn001,  2);
  +                             }
  +                           }
  +/*@egen*/
  +        | <LOGICAL_NOT_EQUALS>/*@bgen(jjtree) #NENode( 2) */
  +                               {
  +                                 ASTNENode jjtn002 = new ASTNENode(this, JJTNENODE);
  +                                 boolean jjtc002 = true;
  +                                 jjtree.openNodeScope(jjtn002);
  +                               }
  +                               try {
  +/*@egen*/ RelationalExpression()/*@bgen(jjtree)*/
  +                               } catch (Throwable jjte002) {
  +                                 if (jjtc002) {
  +                                   jjtree.clearNodeScope(jjtn002);
  +                                   jjtc002 = false;
  +                                 } else {
  +                                   jjtree.popNode();
  +                                 }
  +                                 if (jjte002 instanceof RuntimeException) {
  +                                   throw (RuntimeException)jjte002;
  +                                 }
  +                                 if (jjte002 instanceof ParseException) {
  +                                   throw (ParseException)jjte002;
  +                                 }
  +                                 throw (Error)jjte002;
  +                               } finally {
  +                                 if (jjtc002) {
  +                                   jjtree.closeNodeScope(jjtn002,  2);
  +                                 }
  +                               }
  +/*@egen*/
  +    )*
  +}
  +
  +void RelationalExpression()       : {}
  +{
  +    AdditiveExpression()
  +    (
  +          <LOGICAL_LT>/*@bgen(jjtree) #LTNode( 2) */
  +                       {
  +                         ASTLTNode jjtn001 = new ASTLTNode(this, JJTLTNODE);
  +                         boolean jjtc001 = true;
  +                         jjtree.openNodeScope(jjtn001);
  +                       }
  +                       try {
  +/*@egen*/ AdditiveExpression()/*@bgen(jjtree)*/
  +                       } catch (Throwable jjte001) {
  +                         if (jjtc001) {
  +                           jjtree.clearNodeScope(jjtn001);
  +                           jjtc001 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte001 instanceof RuntimeException) {
  +                           throw (RuntimeException)jjte001;
  +                         }
  +                         if (jjte001 instanceof ParseException) {
  +                           throw (ParseException)jjte001;
  +                         }
  +                         throw (Error)jjte001;
  +                       } finally {
  +                         if (jjtc001) {
  +                           jjtree.closeNodeScope(jjtn001,  2);
  +                         }
  +                       }
  +/*@egen*/
  +        | <LOGICAL_GT>/*@bgen(jjtree) #GTNode( 2) */
  +                       {
  +                         ASTGTNode jjtn002 = new ASTGTNode(this, JJTGTNODE);
  +                         boolean jjtc002 = true;
  +                         jjtree.openNodeScope(jjtn002);
  +                       }
  +                       try {
  +/*@egen*/ AdditiveExpression()/*@bgen(jjtree)*/
  +                       } catch (Throwable jjte002) {
  +                         if (jjtc002) {
  +                           jjtree.clearNodeScope(jjtn002);
  +                           jjtc002 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte002 instanceof RuntimeException) {
  +                           throw (RuntimeException)jjte002;
  +                         }
  +                         if (jjte002 instanceof ParseException) {
  +                           throw (ParseException)jjte002;
  +                         }
  +                         throw (Error)jjte002;
  +                       } finally {
  +                         if (jjtc002) {
  +                           jjtree.closeNodeScope(jjtn002,  2);
  +                         }
  +                       }
  +/*@egen*/
  +        | <LOGICAL_LE>/*@bgen(jjtree) #LENode( 2) */
  +                       {
  +                         ASTLENode jjtn003 = new ASTLENode(this, JJTLENODE);
  +                         boolean jjtc003 = true;
  +                         jjtree.openNodeScope(jjtn003);
  +                       }
  +                       try {
  +/*@egen*/ AdditiveExpression()/*@bgen(jjtree)*/
  +                       } catch (Throwable jjte003) {
  +                         if (jjtc003) {
  +                           jjtree.clearNodeScope(jjtn003);
  +                           jjtc003 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte003 instanceof RuntimeException) {
  +                           throw (RuntimeException)jjte003;
  +                         }
  +                         if (jjte003 instanceof ParseException) {
  +                           throw (ParseException)jjte003;
  +                         }
  +                         throw (Error)jjte003;
  +                       } finally {
  +                         if (jjtc003) {
  +                           jjtree.closeNodeScope(jjtn003,  2);
  +                         }
  +                       }
  +/*@egen*/
  +        | <LOGICAL_GE>/*@bgen(jjtree) #GENode( 2) */
  +                       {
  +                         ASTGENode jjtn004 = new ASTGENode(this, JJTGENODE);
  +                         boolean jjtc004 = true;
  +                         jjtree.openNodeScope(jjtn004);
  +                       }
  +                       try {
  +/*@egen*/ AdditiveExpression()/*@bgen(jjtree)*/
  +                       } catch (Throwable jjte004) {
  +                         if (jjtc004) {
  +                           jjtree.clearNodeScope(jjtn004);
  +                           jjtc004 = false;
  +                         } else {
  +                           jjtree.popNode();
  +                         }
  +                         if (jjte004 instanceof RuntimeException) {
  +                           throw (RuntimeException)jjte004;
  +                         }
  +                         if (jjte004 instanceof ParseException) {
  +                           throw (ParseException)jjte004;
  +                         }
  +                         throw (Error)jjte004;
  +                       } finally {
  +                         if (jjtc004) {
  +                           jjtree.closeNodeScope(jjtn004,  2);
  +                         }
  +                       }
  +/*@egen*/
  +    )*
  +}
  +
  +void AdditiveExpression()       : {}
  +{
  +    MultiplicativeExpression()
  +    (
  +          <PLUS>/*@bgen(jjtree) #AddNode( 2) */
  +                  {
  +                    ASTAddNode jjtn001 = new ASTAddNode(this, JJTADDNODE);
  +                    boolean jjtc001 = true;
  +                    jjtree.openNodeScope(jjtn001);
  +                  }
  +                  try {
  +/*@egen*/  MultiplicativeExpression()/*@bgen(jjtree)*/
  +                  } catch (Throwable jjte001) {
  +                    if (jjtc001) {
  +                      jjtree.clearNodeScope(jjtn001);
  +                      jjtc001 = false;
  +                    } else {
  +                      jjtree.popNode();
  +                    }
  +                    if (jjte001 instanceof RuntimeException) {
  +                      throw (RuntimeException)jjte001;
  +                    }
  +                    if (jjte001 instanceof ParseException) {
  +                      throw (ParseException)jjte001;
  +                    }
  +                    throw (Error)jjte001;
  +                  } finally {
  +                    if (jjtc001) {
  +                      jjtree.closeNodeScope(jjtn001,  2);
  +                    }
  +                  }
  +/*@egen*/
  +        | <MINUS>/*@bgen(jjtree) #SubtractNode( 2) */
  +                  {
  +                    ASTSubtractNode jjtn002 = new ASTSubtractNode(this, JJTSUBTRACTNODE);
  +                    boolean jjtc002 = true;
  +                    jjtree.openNodeScope(jjtn002);
  +                  }
  +                  try {
  +/*@egen*/ MultiplicativeExpression()/*@bgen(jjtree)*/
  +                  } catch (Throwable jjte002) {
  +                    if (jjtc002) {
  +                      jjtree.clearNodeScope(jjtn002);
  +                      jjtc002 = false;
  +                    } else {
  +                      jjtree.popNode();
  +                    }
  +                    if (jjte002 instanceof RuntimeException) {
  +                      throw (RuntimeException)jjte002;
  +                    }
  +                    if (jjte002 instanceof ParseException) {
  +                      throw (ParseException)jjte002;
  +                    }
  +                    throw (Error)jjte002;
  +                  } finally {
  +                    if (jjtc002) {
  +                      jjtree.closeNodeScope(jjtn002,  2);
  +                    }
  +                  }
  +/*@egen*/
  +    )*
  +}
  +
  +void MultiplicativeExpression()       : {}
  +{
  +  UnaryExpression()
  +  (
  +     <MULTIPLY>/*@bgen(jjtree) #MulNode( 2) */
  +                {
  +                  ASTMulNode jjtn001 = new ASTMulNode(this, JJTMULNODE);
  +                  boolean jjtc001 = true;
  +                  jjtree.openNodeScope(jjtn001);
  +                }
  +                try {
  +/*@egen*/ UnaryExpression()/*@bgen(jjtree)*/
  +                } catch (Throwable jjte001) {
  +                  if (jjtc001) {
  +                    jjtree.clearNodeScope(jjtn001);
  +                    jjtc001 = false;
  +                  } else {
  +                    jjtree.popNode();
  +                  }
  +                  if (jjte001 instanceof RuntimeException) {
  +                    throw (RuntimeException)jjte001;
  +                  }
  +                  if (jjte001 instanceof ParseException) {
  +                    throw (ParseException)jjte001;
  +                  }
  +                  throw (Error)jjte001;
  +                } finally {
  +                  if (jjtc001) {
  +                    jjtree.closeNodeScope(jjtn001,  2);
  +                  }
  +                }
  +/*@egen*/
  +   | <DIVIDE>/*@bgen(jjtree) #DivNode( 2) */
  +                {
  +                  ASTDivNode jjtn002 = new ASTDivNode(this, JJTDIVNODE);
  +                  boolean jjtc002 = true;
  +                  jjtree.openNodeScope(jjtn002);
  +                }
  +                try {
  +/*@egen*/   UnaryExpression()/*@bgen(jjtree)*/
  +                } catch (Throwable jjte002) {
  +                  if (jjtc002) {
  +                    jjtree.clearNodeScope(jjtn002);
  +                    jjtc002 = false;
  +                  } else {
  +                    jjtree.popNode();
  +                  }
  +                  if (jjte002 instanceof RuntimeException) {
  +                    throw (RuntimeException)jjte002;
  +                  }
  +                  if (jjte002 instanceof ParseException) {
  +                    throw (ParseException)jjte002;
  +                  }
  +                  throw (Error)jjte002;
  +                } finally {
  +                  if (jjtc002) {
  +                    jjtree.closeNodeScope(jjtn002,  2);
  +                  }
  +                }
  +/*@egen*/
  +   | <MODULUS>/*@bgen(jjtree) #ModNode( 2) */
  +                {
  +                  ASTModNode jjtn003 = new ASTModNode(this, JJTMODNODE);
  +                  boolean jjtc003 = true;
  +                  jjtree.openNodeScope(jjtn003);
  +                }
  +                try {
  +/*@egen*/  UnaryExpression()/*@bgen(jjtree)*/
  +                } catch (Throwable jjte003) {
  +                  if (jjtc003) {
  +                    jjtree.clearNodeScope(jjtn003);
  +                    jjtc003 = false;
  +                  } else {
  +                    jjtree.popNode();
  +                  }
  +                  if (jjte003 instanceof RuntimeException) {
  +                    throw (RuntimeException)jjte003;
  +                  }
  +                  if (jjte003 instanceof ParseException) {
  +                    throw (ParseException)jjte003;
  +                  }
  +                  throw (Error)jjte003;
  +                } finally {
  +                  if (jjtc003) {
  +                    jjtree.closeNodeScope(jjtn003,  2);
  +                  }
  +                }
  +/*@egen*/
  +  )*
  +}
  +
  +void UnaryExpression()       : {}
  +{
  +    //"~" UnaryExpression() #BitwiseComplNode(1)
  +    <LOGICAL_NOT>/*@bgen(jjtree) #NotNode( 1) */
  +                  {
  +                    ASTNotNode jjtn001 = new ASTNotNode(this, JJTNOTNODE);
  +                    boolean jjtc001 = true;
  +                    jjtree.openNodeScope(jjtn001);
  +                  }
  +                  try {
  +/*@egen*/ UnaryExpression()/*@bgen(jjtree)*/
  +                  } catch (Throwable jjte001) {
  +                    if (jjtc001) {
  +                      jjtree.clearNodeScope(jjtn001);
  +                      jjtc001 = false;
  +                    } else {
  +                      jjtree.popNode();
  +                    }
  +                    if (jjte001 instanceof RuntimeException) {
  +                      throw (RuntimeException)jjte001;
  +                    }
  +                    if (jjte001 instanceof ParseException) {
  +                      throw (ParseException)jjte001;
  +                    }
  +                    throw (Error)jjte001;
  +                  } finally {
  +                    if (jjtc001) {
  +                      jjtree.closeNodeScope(jjtn001,  1);
  +                    }
  +                  }
  +/*@egen*/
  +|   PrimaryExpression()
  +}
  +
  +void PrimaryExpression()       : {}
  +{    
  +    StringLiteral()
  +|   Identifier() 
  +|   <LPAREN> Expression() <RPAREN>
  +}
  +
   /**
    * These are the types of statements that
    * are acceptable in Velocity templates.
  @@ -590,36 +1117,12 @@
   /*@egen*/
   }
   
  -void Expression() : {/*@bgen(jjtree) Expression */
  -  ASTExpression jjtn000 = new ASTExpression(this, JJTEXPRESSION);
  -  boolean jjtc000 = true;
  -  jjtree.openNodeScope(jjtn000);
  -/*@egen*/}
  -{/*@bgen(jjtree) Expression */
  -    try {
  -/*@egen*/
  -    Reference() | True() | False()/*@bgen(jjtree)*/
  -    } catch (Throwable jjte000) {
  -      if (jjtc000) {
  -        jjtree.clearNodeScope(jjtn000);
  -        jjtc000 = false;
  -      } else {
  -        jjtree.popNode();
  -      }
  -      if (jjte000 instanceof RuntimeException) {
  -        throw (RuntimeException)jjte000;
  -      }
  -      if (jjte000 instanceof ParseException) {
  -        throw (ParseException)jjte000;
  -      }
  -      throw (Error)jjte000;
  -    } finally {
  -      if (jjtc000) {
  -        jjtree.closeNodeScope(jjtn000, true);
  -      }
  -    }
  -/*@egen*/
  +/*
  +void Expression() : {}
  +{
  +    Reference() | True() | False()
   }
  +*/
   
   /**
    * This method corresponds to a block in
  @@ -685,7 +1188,11 @@
   |   <RPAREN>
   |   <COMMA>
   |   <QUOTE>
  -|   <HYPHEN>
  +|   <MINUS>
  +|   <PLUS>
  +|   <MULTIPLY>
  +|   <DIVIDE>
  +|   <MODULUS>
   |   <UNDERSCORE>
   |   <EQUALS>
   |   <IN>
  
  
  
  1.3       +132 -3    jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Parser.jjt
  
  Index: Parser.jjt
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/Parser.jjt,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Parser.jjt	2000/09/08 19:46:28	1.2
  +++ Parser.jjt	2000/09/08 21:06:27	1.3
  @@ -121,7 +121,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: Parser.jjt,v 1.2 2000/09/08 19:46:28 jvanzyl Exp $
  + * @version $Id: Parser.jjt,v 1.3 2000/09/08 21:06:27 jvanzyl Exp $
    */
   public class Parser
   {
  @@ -175,10 +175,20 @@
   |   <RPAREN: ")" >
   |   <COMMA: ",">
   |   <QUOTE: "\"">
  -|   <HYPHEN: "-">
   |   <UNDERSCORE: "_">
   }
   
  +// Arithmetic operators
  +
  +TOKEN : 
  +{
  +    <MINUS: "-">
  +|   <PLUS: "+">
  +|   <MULTIPLY: "*">
  +|   <DIVIDE: "/">
  +|   <MODULUS: "%">
  +}
  +
   // Logic operators.
   
   TOKEN :
  @@ -400,6 +410,119 @@
      { return jjtThis; }
   }
   
  +/*
  + * Expression syntax follows.
  + */
  +
  +void Expression() #void : {}
  +{
  +    Reference()
  +|   True()
  +|   False()
  +|   LOOKAHEAD( PrimaryExpression() "=" ) Assignment()
  +|   ConditionalOrExpression()
  +}
  +
  +void Assignment() #Assignment(2) : {}
  +{
  +    PrimaryExpression() <EQUALS> Expression()
  +}
  +
  +void ConditionalOrExpression() #void : {}
  +{
  +  ConditionalAndExpression()
  +  ( <LOGICAL_OR> ConditionalAndExpression() #OrNode(2) )*
  +}
  +
  +
  +void ConditionalAndExpression() #void : {}
  +{
  +  EqualityExpression()
  +  ( <LOGICAL_AND>  EqualityExpression() #AndNode(2) )*
  +}
  +
  +/*
  +
  +void ConditionalAndExpression() #void : {}
  +{
  +  InclusiveOrExpression()
  +  ( <LOGICAL_AND>  InclusiveOrExpression() #AndNode(2) )*
  +}
  +
  +
  +void InclusiveOrExpression() #void : {}
  +{
  +  ExclusiveOrExpression()
  +  ( "|" ExclusiveOrExpression() #BitwiseOrNode(2) )*
  +}
  +
  +void ExclusiveOrExpression() #void : {}
  +{
  +  AndExpression()
  +  ( "^" AndExpression() #BitwiseXorNode(2) )*
  +}
  +
  +void AndExpression() #void : {}
  +{
  +  EqualityExpression()
  +  ( "&" EqualityExpression() #BitwiseAndNode(2) )*
  +}
  +
  +*/
  +
  +void EqualityExpression() #void : {}
  +{
  +    RelationalExpression()
  +    (
  +          <LOGICAL_EQUALS> RelationalExpression()     #EQNode(2)
  +        | <LOGICAL_NOT_EQUALS> RelationalExpression() #NENode(2)
  +    )*
  +}
  +
  +void RelationalExpression() #void : {}
  +{
  +    AdditiveExpression()
  +    (
  +          <LOGICAL_LT> AdditiveExpression() #LTNode(2)
  +        | <LOGICAL_GT> AdditiveExpression() #GTNode(2)
  +        | <LOGICAL_LE> AdditiveExpression() #LENode(2)
  +        | <LOGICAL_GE> AdditiveExpression() #GENode(2)
  +    )*
  +}
  +
  +void AdditiveExpression() #void : {}
  +{
  +    MultiplicativeExpression()
  +    (
  +          <PLUS>  MultiplicativeExpression() #AddNode(2)
  +        | <MINUS> MultiplicativeExpression() #SubtractNode(2)
  +    )*
  +}
  +
  +void MultiplicativeExpression() #void : {}
  +{
  +  UnaryExpression()
  +  (
  +     <MULTIPLY> UnaryExpression() #MulNode(2)
  +   | <DIVIDE>   UnaryExpression() #DivNode(2)
  +   | <MODULUS>  UnaryExpression() #ModNode(2)
  +  )*
  +}
  +
  +void UnaryExpression() #void : {}
  +{
  +    //"~" UnaryExpression() #BitwiseComplNode(1)
  +    <LOGICAL_NOT> UnaryExpression() #NotNode(1)
  +|   PrimaryExpression()
  +}
  +
  +void PrimaryExpression() #void : {}
  +{    
  +    StringLiteral()
  +|   Identifier() 
  +|   <LPAREN> Expression() <RPAREN>
  +}
  +
   /**
    * These are the types of statements that
    * are acceptable in Velocity templates.
  @@ -480,10 +603,12 @@
       <FALSE>
   }
   
  +/*
   void Expression() : {}
   {
       Reference() | True() | False()
   }
  +*/
   
   /**
    * This method corresponds to a block in
  @@ -517,7 +642,11 @@
   |   <RPAREN>
   |   <COMMA>
   |   <QUOTE>
  -|   <HYPHEN>
  +|   <MINUS>
  +|   <PLUS>
  +|   <MULTIPLY>
  +|   <DIVIDE>
  +|   <MODULUS>
   |   <UNDERSCORE>
   |   <EQUALS>
   |   <IN>
  
  
  
  1.3       +44 -36    jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserConstants.java
  
  Index: ParserConstants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserConstants.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParserConstants.java	2000/09/08 19:46:29	1.2
  +++ ParserConstants.java	2000/09/08 21:06:27	1.3
  @@ -10,41 +10,45 @@
     int RPAREN = 9;
     int COMMA = 10;
     int QUOTE = 11;
  -  int HYPHEN = 12;
  -  int UNDERSCORE = 13;
  -  int LOGICAL_AND = 14;
  -  int LOGICAL_OR = 15;
  -  int LOGICAL_LT = 16;
  -  int LOGICAL_LE = 17;
  -  int LOGICAL_GT = 18;
  -  int LOGICAL_GE = 19;
  -  int LOGICAL_EQUALS = 20;
  -  int LOGICAL_NOT_EQUALS = 21;
  -  int LOGICAL_NOT = 22;
  -  int EQUALS = 23;
  -  int IN = 24;
  -  int TRUE = 25;
  -  int FALSE = 26;
  -  int STRING_LITERAL = 27;
  -  int BEGIN = 28;
  -  int END = 29;
  -  int INCLUDE_DIRECTIVE = 30;
  -  int PARSE_DIRECTIVE = 31;
  -  int IF_DIRECTIVE = 32;
  -  int ELSEIF_DIRECTIVE = 33;
  -  int ELSE_DIRECTIVE = 34;
  -  int FOREACH_DIRECTIVE = 35;
  -  int SET_DIRECTIVE = 36;
  -  int PARAM_DIRECTIVE = 37;
  -  int USE_DIRECTIVE = 38;
  -  int STOP_DIRECTIVE = 39;
  -  int ALPHA_CHAR = 40;
  -  int ALPHANUM_CHAR = 41;
  -  int IDENTIFIER_CHAR = 42;
  -  int IDENTIFIER = 43;
  -  int DIDENTIFIER = 44;
  -  int TEXT = 45;
  -  int SINGLE_LINE_COMMENT = 46;
  +  int UNDERSCORE = 12;
  +  int MINUS = 13;
  +  int PLUS = 14;
  +  int MULTIPLY = 15;
  +  int DIVIDE = 16;
  +  int MODULUS = 17;
  +  int LOGICAL_AND = 18;
  +  int LOGICAL_OR = 19;
  +  int LOGICAL_LT = 20;
  +  int LOGICAL_LE = 21;
  +  int LOGICAL_GT = 22;
  +  int LOGICAL_GE = 23;
  +  int LOGICAL_EQUALS = 24;
  +  int LOGICAL_NOT_EQUALS = 25;
  +  int LOGICAL_NOT = 26;
  +  int EQUALS = 27;
  +  int IN = 28;
  +  int TRUE = 29;
  +  int FALSE = 30;
  +  int STRING_LITERAL = 31;
  +  int BEGIN = 32;
  +  int END = 33;
  +  int INCLUDE_DIRECTIVE = 34;
  +  int PARSE_DIRECTIVE = 35;
  +  int IF_DIRECTIVE = 36;
  +  int ELSEIF_DIRECTIVE = 37;
  +  int ELSE_DIRECTIVE = 38;
  +  int FOREACH_DIRECTIVE = 39;
  +  int SET_DIRECTIVE = 40;
  +  int PARAM_DIRECTIVE = 41;
  +  int USE_DIRECTIVE = 42;
  +  int STOP_DIRECTIVE = 43;
  +  int ALPHA_CHAR = 44;
  +  int ALPHANUM_CHAR = 45;
  +  int IDENTIFIER_CHAR = 46;
  +  int IDENTIFIER = 47;
  +  int DIDENTIFIER = 48;
  +  int TEXT = 49;
  +  int SINGLE_LINE_COMMENT = 50;
   
     int DEFAULT = 0;
   
  @@ -61,8 +65,12 @@
       "\")\"",
       "\",\"",
       "\"\\\"\"",
  -    "\"-\"",
       "\"_\"",
  +    "\"-\"",
  +    "\"+\"",
  +    "\"*\"",
  +    "\"/\"",
  +    "\"%\"",
       "\"&&\"",
       "\"||\"",
       "\"<\"",
  
  
  
  1.3       +245 -236  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserTokenManager.java
  
  Index: ParserTokenManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserTokenManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParserTokenManager.java	2000/09/08 19:46:29	1.2
  +++ ParserTokenManager.java	2000/09/08 21:06:27	1.3
  @@ -91,111 +91,111 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0xc000L) != 0L)
  +         if ((active0 & 0xfff00000000L) != 0L)
            {
  -            jjmatchedKind = 45;
  -            return 8;
  -         }
  -         if ((active0 & 0x7000000L) != 0L)
  -         {
  -            jjmatchedKind = 40;
  -            return 17;
  +            jjmatchedKind = 49;
  +            return 9;
            }
            if ((active0 & 0x40L) != 0L)
               return 6;
  -         if ((active0 & 0xf00020L) != 0L)
  +         if ((active0 & 0xc0000L) != 0L)
  +         {
  +            jjmatchedKind = 49;
  +            return 8;
  +         }
  +         if ((active0 & 0xf03c020L) != 0L)
               return 8;
  -         if ((active0 & 0xfff0000000L) != 0L)
  +         if ((active0 & 0x70000000L) != 0L)
            {
  -            jjmatchedKind = 45;
  -            return 9;
  +            jjmatchedKind = 44;
  +            return 17;
            }
            if ((active0 & 0x800L) != 0L)
               return 18;
            return -1;
         case 1:
  -         if ((active0 & 0xfff0000000L) != 0L)
  +         if ((active0 & 0x60000000L) != 0L)
            {
  -            jjmatchedKind = 45;
  +            jjmatchedKind = 47;
               jjmatchedPos = 1;
  -            return 8;
  +            return 17;
            }
  -         if ((active0 & 0x30c000L) != 0L)
  +         if ((active0 & 0x30c0000L) != 0L)
               return 8;
  -         if ((active0 & 0x1000000L) != 0L)
  -            return 17;
  -         if ((active0 & 0x6000000L) != 0L)
  +         if ((active0 & 0xfff00000000L) != 0L)
            {
  -            jjmatchedKind = 43;
  +            jjmatchedKind = 49;
               jjmatchedPos = 1;
  -            return 17;
  +            return 8;
            }
  +         if ((active0 & 0x10000000L) != 0L)
  +            return 17;
            return -1;
         case 2:
  -         if ((active0 & 0xfef0000000L) != 0L)
  +         if ((active0 & 0x60000000L) != 0L)
            {
  -            jjmatchedKind = 45;
  +            jjmatchedKind = 47;
               jjmatchedPos = 2;
  -            return 8;
  +            return 17;
            }
  -         if ((active0 & 0x100000000L) != 0L)
  +         if ((active0 & 0x1000000000L) != 0L)
               return 8;
  -         if ((active0 & 0x6000000L) != 0L)
  +         if ((active0 & 0xfef00000000L) != 0L)
            {
  -            jjmatchedKind = 43;
  +            jjmatchedKind = 49;
               jjmatchedPos = 2;
  -            return 17;
  +            return 8;
            }
            return -1;
         case 3:
  -         if ((active0 & 0xaed0000000L) != 0L)
  +         if ((active0 & 0x50200000000L) != 0L)
  +            return 8;
  +         if ((active0 & 0x20000000L) != 0L)
  +            return 17;
  +         if ((active0 & 0xaed00000000L) != 0L)
            {
  -            jjmatchedKind = 45;
  +            jjmatchedKind = 49;
               jjmatchedPos = 3;
               return 8;
            }
  -         if ((active0 & 0x5020000000L) != 0L)
  -            return 8;
  -         if ((active0 & 0x2000000L) != 0L)
  -            return 17;
  -         if ((active0 & 0x4000000L) != 0L)
  +         if ((active0 & 0x40000000L) != 0L)
            {
  -            jjmatchedKind = 43;
  +            jjmatchedKind = 47;
               jjmatchedPos = 3;
               return 17;
            }
            return -1;
         case 4:
  -         if ((active0 & 0x28d0000000L) != 0L)
  +         if ((active0 & 0x86000000000L) != 0L)
  +            return 8;
  +         if ((active0 & 0x40000000L) != 0L)
  +            return 17;
  +         if ((active0 & 0x28d00000000L) != 0L)
            {
               if (jjmatchedPos != 4)
               {
  -               jjmatchedKind = 45;
  +               jjmatchedKind = 49;
                  jjmatchedPos = 4;
               }
               return 8;
            }
  -         if ((active0 & 0x8600000000L) != 0L)
  -            return 8;
  -         if ((active0 & 0x4000000L) != 0L)
  -            return 17;
            return -1;
         case 5:
  -         if ((active0 & 0xa40000000L) != 0L)
  +         if ((active0 & 0x20900000000L) != 0L)
  +            return 8;
  +         if ((active0 & 0xa400000000L) != 0L)
            {
  -            jjmatchedKind = 45;
  +            jjmatchedKind = 49;
               jjmatchedPos = 5;
               return 8;
            }
  -         if ((active0 & 0x2090000000L) != 0L)
  -            return 8;
            return -1;
         case 6:
  -         if ((active0 & 0x200000000L) != 0L)
  +         if ((active0 & 0x2000000000L) != 0L)
               return 8;
  -         if ((active0 & 0x840000000L) != 0L)
  +         if ((active0 & 0x8400000000L) != 0L)
            {
  -            jjmatchedKind = 45;
  +            jjmatchedKind = 49;
               jjmatchedPos = 6;
               return 8;
            }
  @@ -229,45 +229,53 @@
         case 12:
            return jjStartNfaWithStates_0(0, 5, 8);
         case 33:
  -         jjmatchedKind = 22;
  -         return jjMoveStringLiteralDfa1_0(0x200000L);
  +         jjmatchedKind = 26;
  +         return jjMoveStringLiteralDfa1_0(0x2000000L);
         case 34:
            return jjStartNfaWithStates_0(0, 11, 18);
         case 35:
  -         return jjMoveStringLiteralDfa1_0(0xfff0000000L);
  +         return jjMoveStringLiteralDfa1_0(0xfff00000000L);
         case 36:
            return jjStartNfaWithStates_0(0, 6, 6);
  +      case 37:
  +         return jjStartNfaWithStates_0(0, 17, 8);
         case 38:
  -         return jjMoveStringLiteralDfa1_0(0x4000L);
  +         return jjMoveStringLiteralDfa1_0(0x40000L);
         case 40:
            return jjStopAtPos(0, 8);
         case 41:
            return jjStopAtPos(0, 9);
  +      case 42:
  +         return jjStartNfaWithStates_0(0, 15, 8);
  +      case 43:
  +         return jjStartNfaWithStates_0(0, 14, 8);
         case 44:
            return jjStopAtPos(0, 10);
         case 45:
  -         return jjStopAtPos(0, 12);
  +         return jjStopAtPos(0, 13);
         case 46:
            return jjStopAtPos(0, 7);
  +      case 47:
  +         return jjStartNfaWithStates_0(0, 16, 8);
         case 60:
  -         jjmatchedKind = 16;
  -         return jjMoveStringLiteralDfa1_0(0x20000L);
  +         jjmatchedKind = 20;
  +         return jjMoveStringLiteralDfa1_0(0x200000L);
         case 61:
  -         jjmatchedKind = 23;
  -         return jjMoveStringLiteralDfa1_0(0x100000L);
  +         jjmatchedKind = 27;
  +         return jjMoveStringLiteralDfa1_0(0x1000000L);
         case 62:
  -         jjmatchedKind = 18;
  -         return jjMoveStringLiteralDfa1_0(0x80000L);
  +         jjmatchedKind = 22;
  +         return jjMoveStringLiteralDfa1_0(0x800000L);
         case 95:
  -         return jjStopAtPos(0, 13);
  +         return jjStopAtPos(0, 12);
         case 102:
  -         return jjMoveStringLiteralDfa1_0(0x4000000L);
  +         return jjMoveStringLiteralDfa1_0(0x40000000L);
         case 105:
  -         return jjMoveStringLiteralDfa1_0(0x1000000L);
  +         return jjMoveStringLiteralDfa1_0(0x10000000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_0(0x2000000L);
  +         return jjMoveStringLiteralDfa1_0(0x20000000L);
         case 124:
  -         return jjMoveStringLiteralDfa1_0(0x8000L);
  +         return jjMoveStringLiteralDfa1_0(0x80000L);
         default :
            return jjMoveNfa_0(0, 0);
      }
  @@ -282,44 +290,44 @@
      switch(curChar)
      {
         case 38:
  -         if ((active0 & 0x4000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 14, 8);
  +         if ((active0 & 0x40000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 18, 8);
            break;
         case 61:
  -         if ((active0 & 0x20000L) != 0L)
  -            return jjStopAtPos(1, 17);
  -         else if ((active0 & 0x80000L) != 0L)
  -            return jjStopAtPos(1, 19);
  -         else if ((active0 & 0x100000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 20, 8);
  -         else if ((active0 & 0x200000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 21, 8);
  +         if ((active0 & 0x200000L) != 0L)
  +            return jjStopAtPos(1, 21);
  +         else if ((active0 & 0x800000L) != 0L)
  +            return jjStopAtPos(1, 23);
  +         else if ((active0 & 0x1000000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 24, 8);
  +         else if ((active0 & 0x2000000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 25, 8);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x4000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L);
         case 98:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x10000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x100000000L);
         case 101:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x620000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x6200000000L);
         case 102:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x800000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000L);
         case 105:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x140000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x1400000000L);
         case 110:
  -         if ((active0 & 0x1000000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 24, 17);
  +         if ((active0 & 0x10000000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 28, 17);
            break;
         case 112:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x2080000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x20800000000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x2000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x20000000L);
         case 115:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x9000000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x90000000000L);
         case 117:
  -         return jjMoveStringLiteralDfa2_0(active0, 0x4000000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L);
         case 124:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 15, 8);
  +         if ((active0 & 0x80000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 19, 8);
            break;
         default :
            break;
  @@ -338,25 +346,25 @@
      switch(curChar)
      {
         case 97:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x2080000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x20800000000L);
         case 101:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x1010000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x10100000000L);
         case 102:
  -         if ((active0 & 0x100000000L) != 0L)
  -            return jjStartNfaWithStates_0(2, 32, 8);
  +         if ((active0 & 0x1000000000L) != 0L)
  +            return jjStartNfaWithStates_0(2, 36, 8);
            break;
         case 108:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x604000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x6040000000L);
         case 110:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x60000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x600000000L);
         case 111:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x800000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x40000000000L);
         case 116:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000L);
         case 117:
  -         return jjMoveStringLiteralDfa3_0(active0, 0x2000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x20000000L);
         default :
            break;
      }
  @@ -374,28 +382,28 @@
      switch(curChar)
      {
         case 99:
  -         return jjMoveStringLiteralDfa4_0(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x400000000L);
         case 100:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return jjStartNfaWithStates_0(3, 29, 8);
  +         if ((active0 & 0x200000000L) != 0L)
  +            return jjStartNfaWithStates_0(3, 33, 8);
            break;
         case 101:
  -         if ((active0 & 0x2000000L) != 0L)
  -            return jjStartNfaWithStates_0(3, 25, 17);
  -         else if ((active0 & 0x4000000000L) != 0L)
  -            return jjStartNfaWithStates_0(3, 38, 8);
  +         if ((active0 & 0x20000000L) != 0L)
  +            return jjStartNfaWithStates_0(3, 29, 17);
  +         else if ((active0 & 0x40000000000L) != 0L)
  +            return jjStartNfaWithStates_0(3, 42, 8);
            break;
         case 103:
  -         return jjMoveStringLiteralDfa4_0(active0, 0x10000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x100000000L);
         case 111:
  -         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x80000000000L);
         case 114:
  -         return jjMoveStringLiteralDfa4_0(active0, 0x2880000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x28800000000L);
         case 115:
  -         return jjMoveStringLiteralDfa4_0(active0, 0x604000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x6040000000L);
         case 116:
  -         if ((active0 & 0x1000000000L) != 0L)
  -            return jjStartNfaWithStates_0(3, 36, 8);
  +         if ((active0 & 0x10000000000L) != 0L)
  +            return jjStartNfaWithStates_0(3, 40, 8);
            break;
         default :
            break;
  @@ -414,26 +422,26 @@
      switch(curChar)
      {
         case 97:
  -         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000L);
  +         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
         case 101:
  -         if ((active0 & 0x4000000L) != 0L)
  -            return jjStartNfaWithStates_0(4, 26, 17);
  -         else if ((active0 & 0x400000000L) != 0L)
  +         if ((active0 & 0x40000000L) != 0L)
  +            return jjStartNfaWithStates_0(4, 30, 17);
  +         else if ((active0 & 0x4000000000L) != 0L)
            {
  -            jjmatchedKind = 34;
  +            jjmatchedKind = 38;
               jjmatchedPos = 4;
            }
  -         return jjMoveStringLiteralDfa5_0(active0, 0xa00000000L);
  +         return jjMoveStringLiteralDfa5_0(active0, 0xa000000000L);
         case 105:
  -         return jjMoveStringLiteralDfa5_0(active0, 0x10000000L);
  +         return jjMoveStringLiteralDfa5_0(active0, 0x100000000L);
         case 108:
  -         return jjMoveStringLiteralDfa5_0(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa5_0(active0, 0x400000000L);
         case 112:
  -         if ((active0 & 0x8000000000L) != 0L)
  -            return jjStartNfaWithStates_0(4, 39, 8);
  +         if ((active0 & 0x80000000000L) != 0L)
  +            return jjStartNfaWithStates_0(4, 43, 8);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa5_0(active0, 0x80000000L);
  +         return jjMoveStringLiteralDfa5_0(active0, 0x800000000L);
         default :
            break;
      }
  @@ -451,23 +459,23 @@
      switch(curChar)
      {
         case 97:
  -         return jjMoveStringLiteralDfa6_0(active0, 0x800000000L);
  +         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000L);
         case 101:
  -         if ((active0 & 0x80000000L) != 0L)
  -            return jjStartNfaWithStates_0(5, 31, 8);
  +         if ((active0 & 0x800000000L) != 0L)
  +            return jjStartNfaWithStates_0(5, 35, 8);
            break;
         case 105:
  -         return jjMoveStringLiteralDfa6_0(active0, 0x200000000L);
  +         return jjMoveStringLiteralDfa6_0(active0, 0x2000000000L);
         case 109:
  -         if ((active0 & 0x2000000000L) != 0L)
  -            return jjStartNfaWithStates_0(5, 37, 8);
  +         if ((active0 & 0x20000000000L) != 0L)
  +            return jjStartNfaWithStates_0(5, 41, 8);
            break;
         case 110:
  -         if ((active0 & 0x10000000L) != 0L)
  -            return jjStartNfaWithStates_0(5, 28, 8);
  +         if ((active0 & 0x100000000L) != 0L)
  +            return jjStartNfaWithStates_0(5, 32, 8);
            break;
         case 117:
  -         return jjMoveStringLiteralDfa6_0(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa6_0(active0, 0x400000000L);
         default :
            break;
      }
  @@ -485,12 +493,12 @@
      switch(curChar)
      {
         case 99:
  -         return jjMoveStringLiteralDfa7_0(active0, 0x800000000L);
  +         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000L);
         case 100:
  -         return jjMoveStringLiteralDfa7_0(active0, 0x40000000L);
  +         return jjMoveStringLiteralDfa7_0(active0, 0x400000000L);
         case 102:
  -         if ((active0 & 0x200000000L) != 0L)
  -            return jjStartNfaWithStates_0(6, 33, 8);
  +         if ((active0 & 0x2000000000L) != 0L)
  +            return jjStartNfaWithStates_0(6, 37, 8);
            break;
         default :
            break;
  @@ -509,12 +517,12 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x40000000L) != 0L)
  -            return jjStartNfaWithStates_0(7, 30, 8);
  +         if ((active0 & 0x400000000L) != 0L)
  +            return jjStartNfaWithStates_0(7, 34, 8);
            break;
         case 104:
  -         if ((active0 & 0x800000000L) != 0L)
  -            return jjStartNfaWithStates_0(7, 35, 8);
  +         if ((active0 & 0x8000000000L) != 0L)
  +            return jjStartNfaWithStates_0(7, 39, 8);
            break;
         default :
            break;
  @@ -573,44 +581,44 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 9:
  -                  if ((0xafff8ceaffffd9ffL & l) != 0L)
  -                  {
  -                     if (kind > 45)
  -                        kind = 45;
  -                     jjCheckNAdd(8);
  -                  }
  -                  if (curChar == 35)
  -                     jjCheckNAddStates(0, 2);
  -                  break;
                  case 17:
                     if ((0xafff8ceaffffd9ffL & l) != 0L)
                     {
  -                     if (kind > 45)
  -                        kind = 45;
  +                     if (kind > 49)
  +                        kind = 49;
                        jjCheckNAdd(8);
                     }
                     if ((0x23ff200000000000L & l) != 0L)
                     {
  -                     if (kind > 43)
  -                        kind = 43;
  +                     if (kind > 47)
  +                        kind = 47;
                        jjCheckNAdd(16);
                     }
                     break;
  +               case 9:
  +                  if ((0xafff8ceaffffd9ffL & l) != 0L)
  +                  {
  +                     if (kind > 49)
  +                        kind = 49;
  +                     jjCheckNAdd(8);
  +                  }
  +                  if (curChar == 35)
  +                     jjCheckNAddStates(0, 2);
  +                  break;
                  case 18:
                     if ((0xfffffffbffffdbffL & l) != 0L)
                        jjCheckNAddTwoStates(1, 2);
                     else if (curChar == 34)
                     {
  -                     if (kind > 27)
  -                        kind = 27;
  +                     if (kind > 31)
  +                        kind = 31;
                     }
                     break;
                  case 0:
                     if ((0xafff8ceaffffd9ffL & l) != 0L)
                     {
  -                     if (kind > 45)
  -                        kind = 45;
  +                     if (kind > 49)
  +                        kind = 49;
                        jjCheckNAdd(8);
                     }
                     else if (curChar == 36)
  @@ -619,15 +627,15 @@
                        jjCheckNAddTwoStates(1, 2);
                     if ((0x23ff200000000000L & l) != 0L)
                     {
  -                     if (kind > 42)
  -                        kind = 42;
  +                     if (kind > 46)
  +                        kind = 46;
                     }
                     else if (curChar == 35)
                        jjstateSet[jjnewStateCnt++] = 9;
                     if ((0x3ff000000000000L & l) != 0L)
                     {
  -                     if (kind > 41)
  -                        kind = 41;
  +                     if (kind > 45)
  +                        kind = 45;
                     }
                     break;
                  case 1:
  @@ -635,16 +643,16 @@
                        jjCheckNAddTwoStates(1, 2);
                     break;
                  case 2:
  -                  if (curChar == 34 && kind > 27)
  -                     kind = 27;
  +                  if (curChar == 34 && kind > 31)
  +                     kind = 31;
                     break;
                  case 3:
  -                  if ((0x3ff000000000000L & l) != 0L && kind > 41)
  -                     kind = 41;
  +                  if ((0x3ff000000000000L & l) != 0L && kind > 45)
  +                     kind = 45;
                     break;
                  case 4:
  -                  if ((0x23ff200000000000L & l) != 0L && kind > 42)
  -                     kind = 42;
  +                  if ((0x23ff200000000000L & l) != 0L && kind > 46)
  +                     kind = 46;
                     break;
                  case 5:
                     if (curChar == 36)
  @@ -653,15 +661,15 @@
                  case 7:
                     if ((0x23ff200000000000L & l) == 0L)
                        break;
  -                  if (kind > 44)
  -                     kind = 44;
  +                  if (kind > 48)
  +                     kind = 48;
                     jjstateSet[jjnewStateCnt++] = 7;
                     break;
                  case 8:
                     if ((0xafff8ceaffffd9ffL & l) == 0L)
                        break;
  -                  if (kind > 45)
  -                     kind = 45;
  +                  if (kind > 49)
  +                     kind = 49;
                     jjCheckNAdd(8);
                     break;
                  case 10:
  @@ -669,12 +677,12 @@
                        jjCheckNAddStates(0, 2);
                     break;
                  case 11:
  -                  if ((0x2400L & l) != 0L && kind > 46)
  -                     kind = 46;
  +                  if ((0x2400L & l) != 0L && kind > 50)
  +                     kind = 50;
                     break;
                  case 12:
  -                  if (curChar == 10 && kind > 46)
  -                     kind = 46;
  +                  if (curChar == 10 && kind > 50)
  +                     kind = 50;
                     break;
                  case 13:
                     if (curChar == 13)
  @@ -687,8 +695,8 @@
                  case 16:
                     if ((0x23ff200000000000L & l) == 0L)
                        break;
  -                  if (kind > 43)
  -                     kind = 43;
  +                  if (kind > 47)
  +                     kind = 47;
                     jjCheckNAdd(16);
                     break;
                  default : break;
  @@ -702,28 +710,28 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 9:
  -               case 8:
  -                  if ((0xffffffff7fffffffL & l) == 0L)
  -                     break;
  -                  if (kind > 45)
  -                     kind = 45;
  -                  jjCheckNAdd(8);
  -                  break;
                  case 17:
                     if ((0xffffffff7fffffffL & l) != 0L)
                     {
  -                     if (kind > 45)
  -                        kind = 45;
  +                     if (kind > 49)
  +                        kind = 49;
                        jjCheckNAdd(8);
                     }
                     if ((0x7fffffe87fffffeL & l) != 0L)
                     {
  -                     if (kind > 43)
  -                        kind = 43;
  +                     if (kind > 47)
  +                        kind = 47;
                        jjCheckNAdd(16);
                     }
                     break;
  +               case 9:
  +               case 8:
  +                  if ((0xffffffff7fffffffL & l) == 0L)
  +                     break;
  +                  if (kind > 49)
  +                     kind = 49;
  +                  jjCheckNAdd(8);
  +                  break;
                  case 18:
                  case 1:
                     jjCheckNAddTwoStates(1, 2);
  @@ -731,47 +739,47 @@
                  case 0:
                     if ((0xffffffff7fffffffL & l) != 0L)
                     {
  -                     if (kind > 45)
  -                        kind = 45;
  +                     if (kind > 49)
  +                        kind = 49;
                        jjCheckNAdd(8);
                     }
                     if ((0x7fffffe87fffffeL & l) != 0L)
                     {
  -                     if (kind > 42)
  -                        kind = 42;
  +                     if (kind > 46)
  +                        kind = 46;
                     }
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 40)
  -                        kind = 40;
  +                     if (kind > 44)
  +                        kind = 44;
                        jjCheckNAdd(16);
                     }
                     if ((0x7fffffe07fffffeL & l) != 0L)
                     {
  -                     if (kind > 41)
  -                        kind = 41;
  +                     if (kind > 45)
  +                        kind = 45;
                     }
                     break;
                  case 3:
  -                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 41)
  -                     kind = 41;
  +                  if ((0x7fffffe07fffffeL & l) != 0L && kind > 45)
  +                     kind = 45;
                     break;
                  case 4:
  -                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 42)
  -                     kind = 42;
  +                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 46)
  +                     kind = 46;
                     break;
                  case 6:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 44)
  -                     kind = 44;
  +                  if (kind > 48)
  +                     kind = 48;
                     jjCheckNAdd(7);
                     break;
                  case 7:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
  -                  if (kind > 44)
  -                     kind = 44;
  +                  if (kind > 48)
  +                     kind = 48;
                     jjCheckNAdd(7);
                     break;
                  case 10:
  @@ -780,15 +788,15 @@
                  case 15:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 40)
  -                     kind = 40;
  +                  if (kind > 44)
  +                     kind = 44;
                     jjCheckNAdd(16);
                     break;
                  case 16:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
  -                  if (kind > 43)
  -                     kind = 43;
  +                  if (kind > 47)
  +                     kind = 47;
                     jjCheckNAdd(16);
                     break;
                  default : break;
  @@ -803,19 +811,19 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 9:
  +               case 17:
                  case 8:
                     if ((jjbitVec0[i2] & l2) == 0L)
                        break;
  -                  if (kind > 45)
  -                     kind = 45;
  +                  if (kind > 49)
  +                     kind = 49;
                     jjCheckNAdd(8);
                     break;
  -               case 17:
  +               case 9:
                     if ((jjbitVec0[i2] & l2) == 0L)
                        break;
  -                  if (kind > 45)
  -                     kind = 45;
  +                  if (kind > 49)
  +                     kind = 49;
                     jjCheckNAdd(8);
                     break;
                  case 18:
  @@ -826,8 +834,8 @@
                  case 0:
                     if ((jjbitVec0[i2] & l2) == 0L)
                        break;
  -                  if (kind > 45)
  -                     kind = 45;
  +                  if (kind > 49)
  +                     kind = 49;
                     jjCheckNAdd(8);
                     break;
                  case 10:
  @@ -856,23 +864,24 @@
   };
   public static final String[] jjstrLiteralImages = {
   "", null, null, null, null, null, "\44", "\56", "\50", "\51", "\54", "\42", 
  -"\55", "\137", "\46\46", "\174\174", "\74", "\74\75", "\76", "\76\75", "\75\75", 
  -"\41\75", "\41", "\75", "\151\156", "\164\162\165\145", "\146\141\154\163\145", null, 
  -"\43\142\145\147\151\156", "\43\145\156\144", "\43\151\156\143\154\165\144\145", 
  -"\43\160\141\162\163\145", "\43\151\146", "\43\145\154\163\145\151\146", "\43\145\154\163\145", 
  -"\43\146\157\162\145\141\143\150", "\43\163\145\164", "\43\160\141\162\141\155", "\43\165\163\145", 
  -"\43\163\164\157\160", null, null, null, null, null, null, null, };
  +"\137", "\55", "\53", "\52", "\57", "\45", "\46\46", "\174\174", "\74", "\74\75", 
  +"\76", "\76\75", "\75\75", "\41\75", "\41", "\75", "\151\156", "\164\162\165\145", 
  +"\146\141\154\163\145", null, "\43\142\145\147\151\156", "\43\145\156\144", 
  +"\43\151\156\143\154\165\144\145", "\43\160\141\162\163\145", "\43\151\146", "\43\145\154\163\145\151\146", 
  +"\43\145\154\163\145", "\43\146\157\162\145\141\143\150", "\43\163\145\164", 
  +"\43\160\141\162\141\155", "\43\165\163\145", "\43\163\164\157\160", null, null, null, null, null, null, 
  +null, };
   public static final String[] lexStateNames = {
      "DEFAULT", 
   };
   static final long[] jjtoToken = {
  -   0x3fffffffffc1L, 
  +   0x3ffffffffffc1L, 
   };
   static final long[] jjtoSkip = {
  -   0x40000000003eL, 
  +   0x400000000003eL, 
   };
   static final long[] jjtoSpecial = {
  -   0x400000000000L, 
  +   0x4000000000000L, 
   };
   private ASCII_CharStream input_stream;
   private final int[] jjrounds = new int[17];
  @@ -1027,7 +1036,7 @@
   {
      switch(jjmatchedKind)
      {
  -      case 27 :
  +      case 31 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -1039,25 +1048,25 @@
           }
           incMode = false;
            break;
  -      case 30 :
  +      case 34 :
           if (image == null)
  -            image = new StringBuffer(jjstrLiteralImages[30]);
  +            image = new StringBuffer(jjstrLiteralImages[34]);
            else
  -            image.append(jjstrLiteralImages[30]);
  +            image.append(jjstrLiteralImages[34]);
           incMode = true;
            break;
  -      case 31 :
  +      case 35 :
           if (image == null)
  -            image = new StringBuffer(jjstrLiteralImages[31]);
  +            image = new StringBuffer(jjstrLiteralImages[35]);
            else
  -            image.append(jjstrLiteralImages[31]);
  +            image.append(jjstrLiteralImages[35]);
           incMode = true;
            break;
  -      case 39 :
  +      case 43 :
           if (image == null)
  -            image = new StringBuffer(jjstrLiteralImages[39]);
  +            image = new StringBuffer(jjstrLiteralImages[43]);
            else
  -            image.append(jjstrLiteralImages[39]);
  +            image.append(jjstrLiteralImages[43]);
           matchedToken.kind = EOF;
           fileDepth = 0;
            break;
  
  
  
  1.2       +45 -17    jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserTreeConstants.java
  
  Index: ParserTreeConstants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserTreeConstants.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ParserTreeConstants.java	2000/09/06 09:13:30	1.1
  +++ ParserTreeConstants.java	2000/09/08 21:06:27	1.2
  @@ -6,34 +6,62 @@
   {
     public int JJTPROCESS = 0;
     public int JJTVOID = 1;
  -  public int JJTSTRINGLITERAL = 2;
  -  public int JJTIDENTIFIER = 3;
  -  public int JJTMETHOD = 4;
  -  public int JJTREFERENCE = 5;
  -  public int JJTTRUE = 6;
  -  public int JJTFALSE = 7;
  -  public int JJTEXPRESSION = 8;
  -  public int JJTBLOCK = 9;
  -  public int JJTTEXT = 10;
  -  public int JJTIFSTATEMENT = 11;
  -  public int JJTELSESTATEMENT = 12;
  -  public int JJTELSEIFSTATEMENT = 13;
  -  public int JJTFOREACHSTATEMENT = 14;
  -  public int JJTSETSTATEMENT = 15;
  -  public int JJTUSESTATEMENT = 16;
  -  public int JJTPARAMSTATEMENT = 17;
  +  public int JJTASSIGNMENT = 2;
  +  public int JJTORNODE = 3;
  +  public int JJTANDNODE = 4;
  +  public int JJTEQNODE = 5;
  +  public int JJTNENODE = 6;
  +  public int JJTLTNODE = 7;
  +  public int JJTGTNODE = 8;
  +  public int JJTLENODE = 9;
  +  public int JJTGENODE = 10;
  +  public int JJTADDNODE = 11;
  +  public int JJTSUBTRACTNODE = 12;
  +  public int JJTMULNODE = 13;
  +  public int JJTDIVNODE = 14;
  +  public int JJTMODNODE = 15;
  +  public int JJTNOTNODE = 16;
  +  public int JJTSTRINGLITERAL = 17;
  +  public int JJTIDENTIFIER = 18;
  +  public int JJTMETHOD = 19;
  +  public int JJTREFERENCE = 20;
  +  public int JJTTRUE = 21;
  +  public int JJTFALSE = 22;
  +  public int JJTBLOCK = 23;
  +  public int JJTTEXT = 24;
  +  public int JJTIFSTATEMENT = 25;
  +  public int JJTELSESTATEMENT = 26;
  +  public int JJTELSEIFSTATEMENT = 27;
  +  public int JJTFOREACHSTATEMENT = 28;
  +  public int JJTSETSTATEMENT = 29;
  +  public int JJTUSESTATEMENT = 30;
  +  public int JJTPARAMSTATEMENT = 31;
   
   
     public String[] jjtNodeName = {
       "process",
       "void",
  +    "Assignment",
  +    "OrNode",
  +    "AndNode",
  +    "EQNode",
  +    "NENode",
  +    "LTNode",
  +    "GTNode",
  +    "LENode",
  +    "GENode",
  +    "AddNode",
  +    "SubtractNode",
  +    "MulNode",
  +    "DivNode",
  +    "ModNode",
  +    "NotNode",
       "StringLiteral",
       "Identifier",
       "Method",
       "Reference",
       "True",
       "False",
  -    "Expression",
       "Block",
       "Text",
       "IfStatement",
  
  
  
  1.2       +15 -1     jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserVisitor.java
  
  Index: ParserVisitor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ParserVisitor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ParserVisitor.java	2000/09/06 09:13:30	1.1
  +++ ParserVisitor.java	2000/09/08 21:06:27	1.2
  @@ -6,13 +6,27 @@
   {
     public Object visit(SimpleNode node, Object data);
     public Object visit(ASTprocess node, Object data);
  +  public Object visit(ASTAssignment node, Object data);
  +  public Object visit(ASTOrNode node, Object data);
  +  public Object visit(ASTAndNode node, Object data);
  +  public Object visit(ASTEQNode node, Object data);
  +  public Object visit(ASTNENode node, Object data);
  +  public Object visit(ASTLTNode node, Object data);
  +  public Object visit(ASTGTNode node, Object data);
  +  public Object visit(ASTLENode node, Object data);
  +  public Object visit(ASTGENode node, Object data);
  +  public Object visit(ASTAddNode node, Object data);
  +  public Object visit(ASTSubtractNode node, Object data);
  +  public Object visit(ASTMulNode node, Object data);
  +  public Object visit(ASTDivNode node, Object data);
  +  public Object visit(ASTModNode node, Object data);
  +  public Object visit(ASTNotNode node, Object data);
     public Object visit(ASTStringLiteral node, Object data);
     public Object visit(ASTIdentifier node, Object data);
     public Object visit(ASTMethod node, Object data);
     public Object visit(ASTReference node, Object data);
     public Object visit(ASTTrue node, Object data);
     public Object visit(ASTFalse node, Object data);
  -  public Object visit(ASTExpression node, Object data);
     public Object visit(ASTBlock node, Object data);
     public Object visit(ASTText node, Object data);
     public Object visit(ASTIfStatement node, Object data);
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTAddNode.java
  
  Index: ASTAddNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTAddNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTAddNode extends SimpleNode {
    public ASTAddNode(int id) {
      super(id);
    }
  
    public ASTAddNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTAndNode.java
  
  Index: ASTAndNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTAndNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTAndNode extends SimpleNode {
    public ASTAndNode(int id) {
      super(id);
    }
  
    public ASTAndNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTAssignment.java
  
  Index: ASTAssignment.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTAssignment.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTAssignment extends SimpleNode {
    public ASTAssignment(int id) {
      super(id);
    }
  
    public ASTAssignment(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTDivNode.java
  
  Index: ASTDivNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTDivNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTDivNode extends SimpleNode {
    public ASTDivNode(int id) {
      super(id);
    }
  
    public ASTDivNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTEQNode.java
  
  Index: ASTEQNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTEQNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTEQNode extends SimpleNode {
    public ASTEQNode(int id) {
      super(id);
    }
  
    public ASTEQNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTGENode.java
  
  Index: ASTGENode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTGENode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTGENode extends SimpleNode {
    public ASTGENode(int id) {
      super(id);
    }
  
    public ASTGENode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTGTNode.java
  
  Index: ASTGTNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTGTNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTGTNode extends SimpleNode {
    public ASTGTNode(int id) {
      super(id);
    }
  
    public ASTGTNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTLENode.java
  
  Index: ASTLENode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTLENode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTLENode extends SimpleNode {
    public ASTLENode(int id) {
      super(id);
    }
  
    public ASTLENode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTLTNode.java
  
  Index: ASTLTNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTLTNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTLTNode extends SimpleNode {
    public ASTLTNode(int id) {
      super(id);
    }
  
    public ASTLTNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTModNode.java
  
  Index: ASTModNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTModNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTModNode extends SimpleNode {
    public ASTModNode(int id) {
      super(id);
    }
  
    public ASTModNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTMulNode.java
  
  Index: ASTMulNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTMulNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTMulNode extends SimpleNode {
    public ASTMulNode(int id) {
      super(id);
    }
  
    public ASTMulNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTNENode.java
  
  Index: ASTNENode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTNENode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTNENode extends SimpleNode {
    public ASTNENode(int id) {
      super(id);
    }
  
    public ASTNENode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTNotNode.java
  
  Index: ASTNotNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTNotNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTNotNode extends SimpleNode {
    public ASTNotNode(int id) {
      super(id);
    }
  
    public ASTNotNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTOrNode.java
  
  Index: ASTOrNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTOrNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTOrNode extends SimpleNode {
    public ASTOrNode(int id) {
      super(id);
    }
  
    public ASTOrNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/processor/javacc/parser/ASTSubtractNode.java
  
  Index: ASTSubtractNode.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTSubtractNode.java */
  
  package org.apache.velocity.processor.javacc.parser;
  
  public class ASTSubtractNode extends SimpleNode {
    public ASTSubtractNode(int id) {
      super(id);
    }
  
    public ASTSubtractNode(Parser p, int id) {
      super(p, id);
    }
  
  
    /** Accept the visitor. **/
    public Object jjtAccept(ParserVisitor visitor, Object data) {
      return visitor.visit(this, data);
    }
  }
  
  
  
  1.3       +32 -14    jakarta-velocity/src/java/org/apache/velocity/processor/javacc/visitor/BaseVisitor.java
  
  Index: BaseVisitor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/visitor/BaseVisitor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BaseVisitor.java	2000/09/08 19:46:32	1.2
  +++ BaseVisitor.java	2000/09/08 21:06:31	1.3
  @@ -169,19 +169,37 @@
           }            
       }
   
  -    public Object visit(ASTElseStatement node, Object data)
  -    {
  -        return data;
  -    }
  -
  -    public Object visit(ASTTrue node, Object data)
  -    {
  -        return data;
  -    }
  -
  -    public Object visit(ASTFalse node, Object data)
  -    {
  -        return data;
  -    }
  +    public Object visit(SimpleNode node, Object data){ return data; }
  +    public Object visit(ASTprocess node, Object data){ return data; }
  +    public Object visit(ASTAssignment node, Object data){ return data; }
  +    public Object visit(ASTOrNode node, Object data){ return data; }
  +    public Object visit(ASTAndNode node, Object data){ return data; }
  +    public Object visit(ASTEQNode node, Object data){ return data; }
  +    public Object visit(ASTNENode node, Object data){ return data; }
  +    public Object visit(ASTLTNode node, Object data){ return data; }
  +    public Object visit(ASTGTNode node, Object data){ return data; }
  +    public Object visit(ASTLENode node, Object data){ return data; }
  +    public Object visit(ASTGENode node, Object data){ return data; }
  +    public Object visit(ASTAddNode node, Object data){ return data; }
  +    public Object visit(ASTSubtractNode node, Object data){ return data; }
  +    public Object visit(ASTMulNode node, Object data){ return data; }
  +    public Object visit(ASTDivNode node, Object data){ return data; }
  +    public Object visit(ASTModNode node, Object data){ return data; }
  +    public Object visit(ASTNotNode node, Object data){ return data; }
  +    public Object visit(ASTStringLiteral node, Object data){ return data; }
  +    public Object visit(ASTIdentifier node, Object data){ return data; }
  +    public Object visit(ASTMethod node, Object data){ return data; }
  +    public Object visit(ASTReference node, Object data){ return data; }
  +    public Object visit(ASTTrue node, Object data){ return data; }
  +    public Object visit(ASTFalse node, Object data){ return data; }
  +    public Object visit(ASTBlock node, Object data){ return data; }
  +    public Object visit(ASTText node, Object data){ return data; }
  +    public Object visit(ASTIfStatement node, Object data){ return data; }
  +    public Object visit(ASTElseStatement node, Object data){ return data; }
  +    public Object visit(ASTElseIfStatement node, Object data){ return data; }
  +    public Object visit(ASTForeachStatement node, Object data){ return data; }
  +    public Object visit(ASTSetStatement node, Object data){ return data; }
  +    public Object visit(ASTUseStatement node, Object data){ return data; }
  +    public Object visit(ASTParamStatement node, Object data){ return data; }
   
   }
  
  
  
  1.2       +34 -269   jakarta-velocity/src/java/org/apache/velocity/processor/javacc/visitor/DumpMode.java
  
  Index: DumpMode.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/visitor/DumpMode.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DumpMode.java	2000/09/06 09:13:31	1.1
  +++ DumpMode.java	2000/09/08 21:06:31	1.2
  @@ -66,7 +66,7 @@
    * as well.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: DumpMode.java,v 1.1 2000/09/06 09:13:31 jvanzyl Exp $
  + * @version $Id: DumpMode.java,v 1.2 2000/09/08 21:06:31 jvanzyl Exp $
    */
   public class DumpMode extends BaseVisitor
   {
  @@ -92,67 +92,8 @@
           return sb.toString();
       }
   
  -    public Object visit(SimpleNode node, Object data)
  +    private Object showNode(Node node, Object data)
       {
  -        System.out.println(indentString() + node);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -    }
  -    
  -    public Object visit(ASTprocess node, Object data)
  -    {
  -        data = node.childrenAccept(this, data);
  -        return data;
  -    }
  -    
  -    public Object visit(ASTIdentifier node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    
  -    public Object visit(ASTStringLiteral node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    
  -    public Object visit(ASTProperty node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    public Object visit(ASTReference node, Object data)
  -    {
           String tokens = "";
           
           if (showTokens) 
  @@ -160,218 +101,42 @@
           
           System.out.println(indentString() + node + tokens);
           ++indent;
  -        
  -        int children = node.jjtGetNumChildren();
  -
           data = node.childrenAccept(this, data);
           --indent;
           return data;
  -
       }
   
  -    public Object visit(ASTParameter node, Object data)
  -    {
  -        System.out.println(indentString() + node);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -
  -    public Object visit(ASTMethod node, Object data)
  -    {
  -        System.out.println(indentString() + node);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    public Object visit(ASTExpression node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    public Object visit(ASTBlock node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    public Object visit(ASTIfStatement node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        Token token = node.getFirstToken();
  -        if (showTokens) 
  -            tokens = " -> " + token.image + " " + token.next.image + " " +
  -                token.next.next.image + " " + token.next.next.next.image + " " +
  -                token.next.next.next.next.image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -
  -    public Object visit(ASTElseStatement node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -    }        
  -
  -    public Object visit(ASTElseIfStatement node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        Token token = node.getFirstToken();
  -        if (showTokens) 
  -            tokens = " -> " + token.image + " " + token.next.image + " " +
  -                token.next.next.image + " " + token.next.next.next.image + " " +
  -                token.next.next.next.next.image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    
  -    public Object visit(ASTForeachStatement node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        Token token = node.getFirstToken();
  -        if (showTokens) 
  -            tokens = " -> " + token.image + " " + token.next.image + " " +
  -                token.next.next.image + " " + token.next.next.next.image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    public Object visit(ASTSetStatement node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        Token token = node.getFirstToken();
  -        if (showTokens) 
  -            tokens = " -> " + token.image + " " + token.next.image + " " +
  -                token.next.next.image + " " + token.next.next.next.image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    public Object visit(ASTUseStatement node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    public Object visit(ASTParamStatement node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        Token token = node.getFirstToken();
  -        if (showTokens) 
  -            tokens = " -> " + token.image + " " + token.next.image + " " +
  -                token.next.next.image + " " + token.next.next.next.image;
  -
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -    
  -    public Object visit(ASTText node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -
  -    public Object visit(ASTTrue node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  -
  -    public Object visit(ASTFalse node, Object data)
  -    {
  -        String tokens = "";
  -        
  -        if (showTokens) 
  -            tokens = " -> " + node.getFirstToken().image;
  -        
  -        System.out.println(indentString() + node + tokens);
  -        ++indent;
  -        data = node.childrenAccept(this, data);
  -        --indent;
  -        return data;
  -
  -    }
  +    public Object visit(SimpleNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTprocess node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTAssignment node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTOrNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTAndNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTEQNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTNENode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTLTNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTGTNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTLENode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTGENode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTAddNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTSubtractNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTMulNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTDivNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTModNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTNotNode node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTStringLiteral node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTIdentifier node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTMethod node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTReference node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTTrue node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTFalse node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTBlock node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTText node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTIfStatement node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTElseStatement node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTElseIfStatement node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTForeachStatement node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTSetStatement node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTUseStatement node, Object data){ return showNode(node,data); }
  +    public Object visit(ASTParamStatement node, Object data){ return showNode(node,data); }
   
   }
  
  
  
  1.3       +3 -3      jakarta-velocity/src/java/org/apache/velocity/processor/javacc/visitor/NoCacheMode.java
  
  Index: NoCacheMode.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity/src/java/org/apache/velocity/processor/javacc/visitor/NoCacheMode.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NoCacheMode.java	2000/09/08 19:46:33	1.2
  +++ NoCacheMode.java	2000/09/08 21:06:31	1.3
  @@ -78,7 +78,7 @@
    * Look at the InjectorVisitor for that.
    *
    * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
  - * @version $Id: NoCacheMode.java,v 1.2 2000/09/08 19:46:33 jvanzyl Exp $
  + * @version $Id: NoCacheMode.java,v 1.3 2000/09/08 21:06:31 jvanzyl Exp $
    */
   public class NoCacheMode extends BaseVisitor
   {
  @@ -266,7 +266,7 @@
           ifExpression = false;
           
           // token 3
  -        Node expression = node.jjtGetChild(0).jjtGetChild(0);
  +        Node expression = node.jjtGetChild(0);//.jjtGetChild(0);
   
           // Only process the child nodes if the expression
           // evaluates to true. But we also need to look for
  @@ -344,7 +344,7 @@
           }            
           
           // token 3
  -        Node expression = node.jjtGetChild(0).jjtGetChild(0);
  +        Node expression = node.jjtGetChild(0);//.jjtGetChild(0);
   
           // Only process the child nodes if the expression
           // evaluates to true. But we also need to look for