jvanzyl     00/10/09 08:06:38

  Modified:    src/java/org/apache/velocity/runtime/parser
                        ASTDirective.java ASTIdentifier.java ASTMethod.java
                        ASTReference.java ASTprocess.java Node.java
                        Parser.java Parser.jj Parser.jjt
                        ParserConstants.java ParserTokenManager.java
                        SimpleNode.java
  Log:
  - more complete introspection, caching of reflection metadata via
    an new self-walking method in the node structure: init(). this
    method will allow to make any number of optimizations during
    the initial walk. subsequent walks with the render() method
    are much less expensive now. this has resulted in quite a
    dramatic speed improvement as far as i can tell and now
    tops WM in performance.
  
  Revision  Changes    Path
  1.3       +26 -5     
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTDirective.java
  
  Index: ASTDirective.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTDirective.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ASTDirective.java 2000/09/30 22:58:14     1.2
  +++ ASTDirective.java 2000/10/09 15:06:29     1.3
  @@ -6,9 +6,14 @@
   import java.io.IOException;
   
   import org.apache.velocity.Context;
  +import org.apache.velocity.runtime.directive.Directive;
   
   public class ASTDirective extends SimpleNode
   {
  +    private Directive directive;
  +    private String directiveName;
  +    private boolean isDirective;
  +    
       public ASTDirective(int id)
       {
           super(id);
  @@ -25,15 +30,31 @@
       {
           return visitor.visit(this, data);
       }
  +    
  +    public Object init(Context context, Object data) throws Exception
  +    {
  +        directiveName = getFirstToken().image.substring(1);
  +        
  +        if (parser.isDirective(directiveName))
  +        {
  +            isDirective = true;
  +            directive = parser.getDirective(directiveName);
  +            directive.init(context,this);
  +        }            
  +        else
  +        {
  +            isDirective = false;
  +        }            
  +    
  +        return data;
  +    }
   
       public void render(Context context, Writer writer)
           throws IOException
       {
  -        String directive = getFirstToken().image.substring(1);
  -        
  -        if (parser.isDirective(directive))
  -            parser.getDirective(directive).render(context, writer, this);
  +        if (isDirective)
  +            directive.render(context, writer, this);
           else
  -            writer.write(getFirstToken().image);
  +            writer.write(directiveName);
       }
   }
  
  
  
  1.2       +35 -1     
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTIdentifier.java
  
  Index: ASTIdentifier.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTIdentifier.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ASTIdentifier.java        2000/09/30 17:04:22     1.1
  +++ ASTIdentifier.java        2000/10/09 15:06:29     1.2
  @@ -3,12 +3,15 @@
   package org.apache.velocity.runtime.parser;
   
   import java.util.Map;
  +import java.lang.reflect.Method;
   
   import org.apache.velocity.Context;
   import org.apache.velocity.util.ClassUtils;
   
   public class ASTIdentifier extends SimpleNode
   {
  +    private AbstractExecutor executor;
  +    
       public ASTIdentifier(int id)
       {
           super(id);
  @@ -25,6 +28,37 @@
           return visitor.visit(this, data);
       }
   
  +    public Object init(Context context, Object data)
  +        throws Exception
  +    {
  +        String identifier = getFirstToken().image;
  +        String method = "get" + identifier;
  +
  +        //! Now there might just be an error here.
  +        //  If there is a typo in the property
  +        //  then a MapExecutor is created and
  +        //  this needs to be prevented.
  +
  +        try
  +        {
  +            executor = new PropertyExecutor();
  +            Method m = ((Class)data).getMethod(method,null);
  +            executor.setData(m);
  +            return m.getReturnType();
  +        }
  +        catch (NoSuchMethodException nsme)
  +        {
  +            executor = new MapExecutor();
  +            executor.setData(identifier);
  +            return Object.class;
  +        }
  +    }
  +
  +    public Object execute(Object o, Context context)
  +    {
  +        return executor.execute(o, context);
  +    }
  +
       public Object invoke(Object result, Context context)
       {
           String identifier = getFirstToken().image;
  @@ -52,7 +86,7 @@
           }
           else
               result = newResult;
  -    
  +        
           return result;
       }
   }
  
  
  
  1.2       +48 -2     
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTMethod.java
  
  Index: ASTMethod.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTMethod.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ASTMethod.java    2000/09/30 17:04:22     1.1
  +++ ASTMethod.java    2000/10/09 15:06:29     1.2
  @@ -2,11 +2,19 @@
   
   package org.apache.velocity.runtime.parser;
   
  +import java.lang.reflect.Method;
  +
   import org.apache.velocity.Context;
   import org.apache.velocity.util.ClassUtils;
  +import org.apache.velocity.util.Introspector;
   
   public class ASTMethod extends SimpleNode
   {
  +    private String methodName;
  +    private int paramCount;
  +    private Method method;
  +    private Object[] params;
  +
       public ASTMethod(int id)
       {
           super(id);
  @@ -23,6 +31,44 @@
           return visitor.visit(this, data);
       }
   
  +    public Object init(Context context, Object data)
  +        throws Exception
  +    {
  +        methodName = getFirstToken().image;
  +        
  +        paramCount = jjtGetNumChildren() - 1;
  +        params = new Object[paramCount];
  +        
  +        method = Introspector.getMethod((Class) data, methodName, paramCount);
  +        
  +        // Now the parameters have to be processed, there
  +        // may be references contained within that need
  +        // to be introspected.
  +        
  +        for (int i = 0; i < paramCount; i++)
  +            jjtGetChild(i + 1).init(context, null);
  +        
  +        return method.getReturnType();
  +    }
  +    
  +    public Object execute(Object o, Context context)
  +    {
  +        // I need to pass in the arguments to the
  +        // method. 
  +
  +        for (int j = 0; j < paramCount; j++)
  +            params[j] = jjtGetChild(j + 1).value(context);
  +        
  +        try
  +        {
  +            return method.invoke(o, params);
  +        }
  +        catch (Exception e)
  +        {
  +            return null;
  +        }            
  +    }
  +
       public Object invoke(Object result, Context context)
       {
           // node 1: method name
  @@ -42,7 +88,7 @@
               Node p = jjtGetChild(j + 1);
               params[j] = p.value(context);
           }
  -
  -        return ClassUtils.invoke(result, method, params);
  +        
  +        return ClassUtils.invoke(result, method, params); 
       }
   }
  
  
  
  1.3       +46 -27    
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTReference.java
  
  Index: ASTReference.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTReference.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ASTReference.java 2000/09/30 19:50:33     1.2
  +++ ASTReference.java 2000/10/09 15:06:30     1.3
  @@ -1,4 +1,4 @@
  -/* Generated By:JJTree: Do not edit this line. ASTReference.java */
  +//* Generated By:JJTree: Do not edit this line. ASTReference.java */
   
   package org.apache.velocity.runtime.parser;
   
  @@ -14,6 +14,8 @@
   public class ASTReference extends SimpleNode
   {
       private String nullString;
  +    private Object root;
  +    private Object value;
   
       public ASTReference(int id)
       {
  @@ -31,10 +33,46 @@
           return visitor.visit(this, data);
       }
   
  +    public Object init(Context context, Object data) throws Exception
  +    {
  +        root = getVariableValue(context, getRoot());
  +        
  +        // An object has to be in the context for
  +        // subsequent introspection.
  +
  +        if (root == null) return null;
  +        
  +        Class clazz = root.getClass();
  +        
  +        // All children here are either Identifier() nodes
  +        // or Method() nodes.
  +        
  +        int children = jjtGetNumChildren();
  +        for (int i = 0; i < children; i++)
  +            clazz = (Class) jjtGetChild(i).init(context, clazz);
  +    
  +        return data;
  +    }        
  +    
  +    public Object execute(Object o, Context context)
  +    {
  +        Object result = getVariableValue(context, getRoot());
  +        
  +        if (result == null)
  +            return null;
  +        
  +        int children = jjtGetNumChildren();
  +        
  +        for (int i = 0; i < children; i++)
  +            result = jjtGetChild(i).execute(result,context);
  +    
  +        return result;
  +    }
  +
       public void render(Context context, Writer writer)
           throws IOException
       {
  -        Object value = value(context);
  +        value = execute(null, context);
           
           if (value == null)
               writer.write(NodeUtils
  @@ -48,12 +86,13 @@
   
       public boolean evaluate(Context context)
       {
  -        Object o = value(context);
  -        if (o == null)
  +        value = execute(null, context);
  +        
  +        if (value == null)
               return false;
  -        else if (o instanceof Boolean)
  +        else if (value instanceof Boolean)
           {
  -            if (((Boolean) o).booleanValue())
  +            if (((Boolean) value).booleanValue())
                   return true;
               else
                   return false;
  @@ -64,27 +103,7 @@
   
       public Object value(Context context)
       {
  -        // The rootOfIntrospection is the object we will
  -        // retrieve from the Context. This is the base
  -        // object we will apply reflection to.
  -        String root = getRoot();
  -        Object result = getVariableValue(context, root);
  -        
  -        if (result == null)
  -        {
  -            Runtime.error("Reference error: " + root + " " +
  -                          "not defined in the context.");
  -            
  -            return null;
  -        }                          
  -        
  -        // How many child nodes do we have?
  -        int children = jjtGetNumChildren();
  -        
  -        for (int i = 0; i < children; i++)
  -            result = jjtGetChild(i).invoke(result, context);
  -
  -        return result;
  +        return execute(null, context);
       }
   
       public void setValue(Context context, Object value)
  
  
  
  1.2       +0 -1      
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTprocess.java
  
  Index: ASTprocess.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTprocess.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ASTprocess.java   2000/09/30 17:04:23     1.1
  +++ ASTprocess.java   2000/10/09 15:06:30     1.2
  @@ -33,5 +33,4 @@
           for (i = 0; i < k; i++)
               jjtGetChild(i).render(context, writer);
       }
  -
   }
  
  
  
  1.2       +7 -1      
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Node.java
  
  Index: Node.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Node.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Node.java 2000/09/30 17:04:23     1.1
  +++ Node.java 2000/10/09 15:06:30     1.2
  @@ -48,11 +48,17 @@
       public Token getLastToken();
       public int getType();
   
  +    public Object init(Context context, Object data) throws Exception;
  +
       public boolean evaluate(Context context);
       public Object value(Context context);
  -    public void process(Node node, Context context, ParserVisitor visitor);
  +
       public void render(Context context, Writer writer)
           throws IOException;
   
       public Object invoke(Object o, Context context);
  +    public Object execute(Object o, Context context);
  +
  +    public void setInfo(int info);
  +    public int getInfo();
   }
  
  
  
  1.4       +181 -165  
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Parser.java       2000/10/03 17:03:13     1.3
  +++ Parser.java       2000/10/09 15:06:31     1.4
  @@ -16,7 +16,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  - * @version $Id: Parser.java,v 1.3 2000/10/03 17:03:13 jvanzyl Exp $ 
  + * @version $Id: Parser.java,v 1.4 2000/10/09 15:06:31 jvanzyl Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants 
{/*@bgen(jjtree)*/
     protected JJTParserState jjtree = new JJTParserState();
  @@ -95,6 +95,7 @@
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
           case ESCAPE_SEQUENCE:
           case TEXT:
  +        case NUMBER_LITERAL:
           case SINGLE_LINE_COMMENT:
           case FORMAL_COMMENT:
           case MULTI_LINE_COMMENT:
  @@ -102,7 +103,6 @@
           case IF_DIRECTIVE:
           case SET_DIRECTIVE:
           case STOP_DIRECTIVE:
  -        case NUMBER_LITERAL:
           case WORD:
           case IDENTIFIER:
           case DOT:
  @@ -364,6 +364,7 @@
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case ESCAPE_SEQUENCE:
             case TEXT:
  +          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  @@ -371,7 +372,6 @@
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  -          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
             case DOT:
  @@ -601,6 +601,14 @@
           ;
         }
         jj_consume_token(IDENTIFIER);
  +      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +      case RCURLY:
  +        jj_consume_token(RCURLY);
  +        break;
  +      default:
  +        jj_la1[13] = jj_gen;
  +        ;
  +      }
         label_6:
         while (true) {
           if (jj_2_1(2)) {
  @@ -615,14 +623,6 @@
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case IDENTIFIER:
               Identifier();
  -            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  -            case RCURLY:
  -              jj_consume_token(RCURLY);
  -              break;
  -            default:
  -              jj_la1[13] = jj_gen;
  -              ;
  -            }
               break;
             default:
               jj_la1[14] = jj_gen;
  @@ -630,6 +630,14 @@
               throw new ParseException();
             }
           }
  +        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +        case RCURLY:
  +          jj_consume_token(RCURLY);
  +          break;
  +        default:
  +          jj_la1[15] = jj_gen;
  +          ;
  +        }
         }
       } catch (Throwable jjte000) {
         if (jjtc000) {
  @@ -708,7 +716,7 @@
           t.image = t.image.substring(1);
           break;
         default:
  -        jj_la1[15] = jj_gen;
  +        jj_la1[16] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -744,6 +752,7 @@
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case ESCAPE_SEQUENCE:
             case TEXT:
  +          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  @@ -751,7 +760,6 @@
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  -          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
             case DOT:
  @@ -760,7 +768,7 @@
               ;
               break;
             default:
  -            jj_la1[16] = jj_gen;
  +            jj_la1[17] = jj_gen;
               break label_7;
             }
           }
  @@ -793,13 +801,13 @@
               ;
               break;
             default:
  -            jj_la1[17] = jj_gen;
  +            jj_la1[18] = jj_gen;
               break label_8;
             }
           }
           break;
         default:
  -        jj_la1[18] = jj_gen;
  +        jj_la1[19] = jj_gen;
           ;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -807,7 +815,7 @@
           ElseStatement();
           break;
         default:
  -        jj_la1[19] = jj_gen;
  +        jj_la1[20] = jj_gen;
           ;
         }
         jj_consume_token(END);
  @@ -849,6 +857,7 @@
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case ESCAPE_SEQUENCE:
             case TEXT:
  +          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  @@ -856,7 +865,6 @@
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  -          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
             case DOT:
  @@ -865,7 +873,7 @@
               ;
               break;
             default:
  -            jj_la1[20] = jj_gen;
  +            jj_la1[21] = jj_gen;
               break label_9;
             }
           }
  @@ -929,6 +937,7 @@
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case ESCAPE_SEQUENCE:
             case TEXT:
  +          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  @@ -936,7 +945,6 @@
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  -          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
             case DOT:
  @@ -945,7 +953,7 @@
               ;
               break;
             default:
  -            jj_la1[21] = jj_gen;
  +            jj_la1[22] = jj_gen;
               break label_10;
             }
           }
  @@ -1061,17 +1069,17 @@
           case LPAREN:
           case LBRACKET:
           case STRING_LITERAL:
  +        case NUMBER_LITERAL:
           case TRUE:
           case FALSE:
           case LOGICAL_NOT:
  -        case NUMBER_LITERAL:
           case IDENTIFIER:
           case SHORTHAND:
           case LCURLY:
             ConditionalOrExpression();
             break;
           default:
  -          jj_la1[22] = jj_gen;
  +          jj_la1[23] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
  @@ -1136,7 +1144,7 @@
           ;
           break;
         default:
  -        jj_la1[23] = jj_gen;
  +        jj_la1[24] = jj_gen;
           break label_11;
         }
         jj_consume_token(LOGICAL_OR);
  @@ -1176,7 +1184,7 @@
           ;
           break;
         default:
  -        jj_la1[24] = jj_gen;
  +        jj_la1[25] = jj_gen;
           break label_12;
         }
         jj_consume_token(LOGICAL_AND);
  @@ -1217,7 +1225,7 @@
           ;
           break;
         default:
  -        jj_la1[25] = jj_gen;
  +        jj_la1[26] = jj_gen;
           break label_13;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -1276,7 +1284,7 @@
           }
           break;
         default:
  -        jj_la1[26] = jj_gen;
  +        jj_la1[27] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1295,7 +1303,7 @@
           ;
           break;
         default:
  -        jj_la1[27] = jj_gen;
  +        jj_la1[28] = jj_gen;
           break label_14;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -1408,7 +1416,7 @@
           }
           break;
         default:
  -        jj_la1[28] = jj_gen;
  +        jj_la1[29] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1425,7 +1433,7 @@
           ;
           break;
         default:
  -        jj_la1[29] = jj_gen;
  +        jj_la1[30] = jj_gen;
           break label_15;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -1484,7 +1492,7 @@
           }
           break;
         default:
  -        jj_la1[30] = jj_gen;
  +        jj_la1[31] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1502,7 +1510,7 @@
           ;
           break;
         default:
  -        jj_la1[31] = jj_gen;
  +        jj_la1[32] = jj_gen;
           break label_16;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -1588,7 +1596,7 @@
           }
           break;
         default:
  -        jj_la1[32] = jj_gen;
  +        jj_la1[33] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1627,16 +1635,16 @@
       case LPAREN:
       case LBRACKET:
       case STRING_LITERAL:
  +    case NUMBER_LITERAL:
       case TRUE:
       case FALSE:
  -    case NUMBER_LITERAL:
       case IDENTIFIER:
       case SHORTHAND:
       case LCURLY:
         PrimaryExpression();
         break;
       default:
  -      jj_la1[33] = jj_gen;
  +      jj_la1[34] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
  @@ -1670,7 +1678,7 @@
         jj_consume_token(RPAREN);
         break;
       default:
  -      jj_la1[34] = jj_gen;
  +      jj_la1[35] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
  @@ -1707,9 +1715,18 @@
       if (jj_3R_17()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    xsp = jj_scanpos;
  +    if (jj_3R_48()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  +  final private boolean jj_3R_44() {
  +    if (jj_scan_token(RCURLY)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
     final private boolean jj_3R_43() {
       if (jj_scan_token(LCURLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  @@ -1738,6 +1755,9 @@
       else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       if (jj_scan_token(IDENTIFIER)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    xsp = jj_scanpos;
  +    if (jj_3R_44()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       while (true) {
         xsp = jj_scanpos;
         if (jj_3_1()) { jj_scanpos = xsp; break; }
  @@ -1746,7 +1766,7 @@
       return false;
     }
   
  -  final private boolean jj_3R_47() {
  +  final private boolean jj_3R_49() {
       if (jj_scan_token(COMMA)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       if (jj_3R_29()) return true;
  @@ -1802,48 +1822,42 @@
       return false;
     }
   
  -  final private boolean jj_3R_41() {
  +  final private boolean jj_3R_24() {
       if (jj_3R_32()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_24() {
  +  final private boolean jj_3R_41() {
       if (jj_3R_32()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  +  final private boolean jj_3R_23() {
  +    if (jj_3R_31()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
     final private boolean jj_3R_40() {
       if (jj_3R_35()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_44() {
  +  final private boolean jj_3R_45() {
       if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_47()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_49()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_23() {
  -    if (jj_3R_31()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_39() {
  -    if (jj_3R_34()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
     final private boolean jj_3R_22() {
       if (jj_3R_30()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  @@ -1876,6 +1890,12 @@
       return false;
     }
   
  +  final private boolean jj_3R_39() {
  +    if (jj_3R_34()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
     final private boolean jj_3R_38() {
       if (jj_3R_33()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  @@ -1908,180 +1928,180 @@
       return false;
     }
   
  -  final private boolean jj_3R_73() {
  +  final private boolean jj_3R_74() {
       if (jj_3R_19()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_76() {
  +  final private boolean jj_3R_77() {
       if (jj_scan_token(MODULUS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_68()) return true;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_72() {
  +  final private boolean jj_3R_73() {
       if (jj_scan_token(LOGICAL_NOT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_68()) return true;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_68() {
  +  final private boolean jj_3R_69() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_72()) {
  +    if (jj_3R_73()) {
       jj_scanpos = xsp;
  -    if (jj_3R_73()) return true;
  +    if (jj_3R_74()) 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_75() {
  +  final private boolean jj_3R_76() {
       if (jj_scan_token(DIVIDE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_68()) return true;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_74() {
  +  final private boolean jj_3R_75() {
       if (jj_scan_token(MULTIPLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_68()) return true;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_69() {
  +  final private boolean jj_3R_70() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_74()) {
  -    jj_scanpos = xsp;
       if (jj_3R_75()) {
       jj_scanpos = xsp;
  -    if (jj_3R_76()) return true;
  +    if (jj_3R_76()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_77()) 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_48() {
  +    if (jj_scan_token(RCURLY)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
     final private boolean jj_3R_33() {
       if (jj_scan_token(LBRACKET)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_44()) jj_scanpos = xsp;
  +    if (jj_3R_45()) jj_scanpos = xsp;
       else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       if (jj_scan_token(RBRACKET)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  -
  -  final private boolean jj_3R_50() {
  -    if (jj_scan_token(RCURLY)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
   
  -  final private boolean jj_3R_71() {
  +  final private boolean jj_3R_72() {
       if (jj_scan_token(MINUS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_62()) return true;
  +    if (jj_3R_63()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_62() {
  -    if (jj_3R_68()) return true;
  +  final private boolean jj_3R_63() {
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_69()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_70()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_70() {
  +  final private boolean jj_3R_71() {
       if (jj_scan_token(PLUS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_62()) return true;
  +    if (jj_3R_63()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_63() {
  +  final private boolean jj_3R_64() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_70()) {
  +    if (jj_3R_71()) {
       jj_scanpos = xsp;
  -    if (jj_3R_71()) return true;
  +    if (jj_3R_72()) 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_67() {
  +  final private boolean jj_3R_68() {
       if (jj_scan_token(LOGICAL_GE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_58()) return true;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_58() {
  -    if (jj_3R_62()) return true;
  +  final private boolean jj_3R_59() {
  +    if (jj_3R_63()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_63()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_64()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_66() {
  +  final private boolean jj_3R_67() {
       if (jj_scan_token(LOGICAL_LE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_58()) return true;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_65() {
  +  final private boolean jj_3R_66() {
       if (jj_scan_token(LOGICAL_GT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_58()) return true;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_64() {
  +  final private boolean jj_3R_65() {
       if (jj_scan_token(LOGICAL_LT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_58()) return true;
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_59() {
  +  final private boolean jj_3R_60() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_64()) {
  -    jj_scanpos = xsp;
       if (jj_3R_65()) {
       jj_scanpos = xsp;
       if (jj_3R_66()) {
       jj_scanpos = xsp;
  -    if (jj_3R_67()) return true;
  +    if (jj_3R_67()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_68()) 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;
  @@ -2092,76 +2112,72 @@
     final private boolean jj_3R_17() {
       if (jj_3R_20()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_50()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_61() {
  +  final private boolean jj_3R_62() {
       if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_56()) return true;
  +    if (jj_3R_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_56() {
  -    if (jj_3R_58()) return true;
  +  final private boolean jj_3R_57() {
  +    if (jj_3R_59()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_59()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_60()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_60() {
  +  final private boolean jj_3R_61() {
       if (jj_scan_token(LOGICAL_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_56()) return true;
  +    if (jj_3R_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_57() {
  +  final private boolean jj_3R_58() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_60()) {
  +    if (jj_3R_61()) {
       jj_scanpos = xsp;
  -    if (jj_3R_61()) return true;
  +    if (jj_3R_62()) 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_55() {
  -    if (jj_scan_token(COMMA)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_29()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
   
  -  final private boolean jj_3R_53() {
  -    if (jj_3R_56()) return true;
  +  final private boolean jj_3R_54() {
  +    if (jj_3R_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_57()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_58()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_54() {
  +  final private boolean jj_3R_56() {
  +    if (jj_scan_token(COMMA)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_29()) 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_AND)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_53()) return true;
  +    if (jj_3R_54()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  @@ -2172,22 +2188,22 @@
       return false;
     }
   
  -  final private boolean jj_3R_51() {
  -    if (jj_3R_53()) return true;
  +  final private boolean jj_3R_52() {
  +    if (jj_3R_54()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_54()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_55()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_52() {
  +  final private boolean jj_3R_53() {
       if (jj_scan_token(LOGICAL_OR)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_51()) return true;
  +    if (jj_3R_52()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  @@ -2200,48 +2216,48 @@
       return false;
     }
   
  -  final private boolean jj_3R_21() {
  -    if (jj_3R_29()) return true;
  +  final private boolean jj_3R_51() {
  +    if (jj_3R_52()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_55()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_53()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_49() {
  -    if (jj_3R_51()) return true;
  +  final private boolean jj_3R_21() {
  +    if (jj_3R_29()) 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_3R_56()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_20() {
  -    if (jj_scan_token(IDENTIFIER)) return true;
  +  final private boolean jj_3R_50() {
  +    if (jj_3R_19()) 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_36()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_35() {
  -    if (jj_scan_token(FALSE)) return true;
  +  final private boolean jj_3R_20() {
  +    if (jj_scan_token(IDENTIFIER)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_48() {
  -    if (jj_3R_19()) 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_36()) return true;
  +  final private boolean jj_3R_35() {
  +    if (jj_scan_token(FALSE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  @@ -2252,8 +2268,8 @@
       return false;
     }
   
  -  final private boolean jj_3R_46() {
  -    if (jj_3R_49()) return true;
  +  final private boolean jj_3R_47() {
  +    if (jj_3R_51()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  @@ -2261,16 +2277,16 @@
     final private boolean jj_3R_36() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_45()) {
  +    if (jj_3R_46()) {
       jj_scanpos = xsp;
  -    if (jj_3R_46()) return true;
  +    if (jj_3R_47()) 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_45() {
  -    if (jj_3R_48()) return true;
  +  final private boolean jj_3R_46() {
  +    if (jj_3R_50()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  @@ -2284,9 +2300,9 @@
     public boolean lookingAhead = false;
     private boolean jj_semLA;
     private int jj_gen;
  -  final private int[] jj_la1 = new int[35];
  -  final private int[] jj_la1_0 = 
{0x70006,0x70006,0x70000,0xa0,0xa0,0x70006,0x100,0x6a0,0x6a0,0x100,0x6a0,0x0,0x0,0x0,0x0,0x6,0x70006,0x0,0x0,0x0,0x70006,0x70006,0x6a8,0x20000000,0x10000000,0x0,0x0,0xc0000000,0xc0000000,0x1800000,0x1800000,0xe000000,0xe000000,0x6a8,0x6a8,};
  -  final private int[] jj_la1_1 = 
{0xf15980,0xf15980,0x0,0xd14000,0xd14000,0xf15980,0x0,0xd00000,0xd00000,0x0,0xd00000,0x400000,0x800000,0x1000000,0x100000,0x204000,0xf15980,0x200,0x200,0x400,0xf15980,0xf15980,0xd04010,0x0,0x0,0xc,0xc,0x3,0x3,0x0,0x0,0x0,0x0,0xd04010,0xd04000,};
  +  final private int[] jj_la1 = new int[36];
  +  final private int[] jj_la1_0 = 
{0x380206,0x380206,0x380000,0x2a0,0x2a0,0x380206,0x400,0x18a0,0x18a0,0x400,0x18a0,0x0,0x0,0x0,0x0,0x0,0x206,0x380206,0x0,0x0,0x0,0x380206,0x380206,0x1aa8,0x0,0x80000000,0x0,0x0,0x0,0x0,0xc000000,0xc000000,0x70000000,0x70000000,0x1aa8,0x1aa8,};
  +  final private int[] jj_la1_1 = 
{0xf16600,0xf16600,0x0,0xd10000,0xd10000,0xf16600,0x0,0xd00000,0xd00000,0x0,0xd00000,0x400000,0x800000,0x1000000,0x100000,0x1000000,0x200000,0xf16600,0x800,0x800,0x1000,0xf16600,0xf16600,0xd00080,0x1,0x0,0x60,0x60,0x1e,0x1e,0x0,0x0,0x0,0x0,0xd00080,0xd00000,};
     final private JJCalls[] jj_2_rtns = new JJCalls[3];
     private boolean jj_rescan = false;
     private int jj_gc = 0;
  @@ -2297,7 +2313,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 36; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2308,7 +2324,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 36; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2318,7 +2334,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 36; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2329,7 +2345,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 36; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2338,7 +2354,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 36; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2348,7 +2364,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 36; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2463,7 +2479,7 @@
         la1tokens[jj_kind] = true;
         jj_kind = -1;
       }
  -    for (int i = 0; i < 35; i++) {
  +    for (int i = 0; i < 36; i++) {
         if (jj_la1[i] == jj_gen) {
           for (int j = 0; j < 32; j++) {
             if ((jj_la1_0[i] & (1<<j)) != 0) {
  
  
  
  1.4       +7 -7      
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.jj
  
  Index: Parser.jj
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.jj,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Parser.jj 2000/10/03 17:03:14     1.3
  +++ Parser.jj 2000/10/09 15:06:31     1.4
  @@ -96,7 +96,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  - * @version $Id: Parser.jj,v 1.3 2000/10/03 17:03:14 jvanzyl Exp $ 
  + * @version $Id: Parser.jj,v 1.4 2000/10/09 15:06:31 jvanzyl Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
   {/*@bgen(jjtree)*/
  @@ -305,10 +305,12 @@
           }
           incMode = false;
       }
  -
  +|   <#DIGIT: [ "0"-"9" ] >
  +|   <NUMBER_LITERAL: (<DIGIT>)+ >
   |   <COMMA: ",">
   |   <TRUE: "true">
   |   <FALSE: "false">
  +|   <EQUALS: "=" >
   }
   
   <*>
  @@ -426,7 +428,6 @@
   |   <LOGICAL_EQUALS: "==">
   |   <LOGICAL_NOT_EQUALS: "!=">
   |   <LOGICAL_NOT: "!">
  -|   <EQUALS: "=" >
   }
   
   <DIRECTIVE> 
  @@ -457,8 +458,6 @@
           fileDepth = 0;
       }
   
  -|   <#DIGIT: [ "0"-"9" ] >
  -|   <NUMBER_LITERAL: (<DIGIT>)+ >
   |   <#LETTER: [ "a"-"z" ] >
   |   <WORD: (<LETTER>)+ >
   }
  @@ -864,8 +863,9 @@
       // This should be changed to Indentifier() now. Make
       // it easier to walk the AST.
       [<LCURLY>]
  -    <IDENTIFIER> 
  -    (LOOKAHEAD(2) <DOT> (LOOKAHEAD(3) Method() | Identifier() [<RCURLY>] ) 
)*/*@bgen(jjtree)*/
  +    <IDENTIFIER>
  +    [<RCURLY>]
  +    (LOOKAHEAD(2) <DOT> (LOOKAHEAD(3) Method() | Identifier() ) [<RCURLY>] 
)*/*@bgen(jjtree)*/
       } catch (Throwable jjte000) {
         if (jjtc000) {
           jjtree.clearNodeScope(jjtn000);
  
  
  
  1.4       +7 -7      
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.jjt
  
  Index: Parser.jjt
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/Parser.jjt,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Parser.jjt        2000/10/03 17:03:15     1.3
  +++ Parser.jjt        2000/10/09 15:06:32     1.4
  @@ -120,7 +120,7 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  - * @version $Id: Parser.jjt,v 1.3 2000/10/03 17:03:15 jvanzyl Exp $ 
  + * @version $Id: Parser.jjt,v 1.4 2000/10/09 15:06:32 jvanzyl Exp $ 
   */
   public class Parser
   {
  @@ -326,10 +326,12 @@
           }
           incMode = false;
       }
  -
  +|   <#DIGIT: [ "0"-"9" ] >
  +|   <NUMBER_LITERAL: (<DIGIT>)+ >
   |   <COMMA: ",">
   |   <TRUE: "true">
   |   <FALSE: "false">
  +|   <EQUALS: "=" >
   }
   
   <*>
  @@ -447,7 +449,6 @@
   |   <LOGICAL_EQUALS: "==">
   |   <LOGICAL_NOT_EQUALS: "!=">
   |   <LOGICAL_NOT: "!">
  -|   <EQUALS: "=" >
   }
   
   <DIRECTIVE> 
  @@ -478,8 +479,6 @@
           fileDepth = 0;
       }
   
  -|   <#DIGIT: [ "0"-"9" ] >
  -|   <NUMBER_LITERAL: (<DIGIT>)+ >
   |   <#LETTER: [ "a"-"z" ] >
   |   <WORD: (<LETTER>)+ >
   }
  @@ -678,8 +677,9 @@
       // This should be changed to Indentifier() now. Make
       // it easier to walk the AST.
       [<LCURLY>]
  -    <IDENTIFIER> 
  -    (LOOKAHEAD(2) <DOT> (LOOKAHEAD(3) Method() | Identifier() [<RCURLY>] ) )*
  +    <IDENTIFIER>
  +    [<RCURLY>]
  +    (LOOKAHEAD(2) <DOT> (LOOKAHEAD(3) Method() | Identifier() ) [<RCURLY>] )*
   }
   
   void True() : {}
  
  
  
  1.3       +38 -38    
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserConstants.java
  
  Index: ParserConstants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserConstants.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParserConstants.java      2000/10/03 17:03:15     1.2
  +++ ParserConstants.java      2000/10/09 15:06:32     1.3
  @@ -11,39 +11,39 @@
     int LBRACKET = 5;
     int RBRACKET = 6;
     int STRING_LITERAL = 7;
  -  int COMMA = 8;
  -  int TRUE = 9;
  -  int FALSE = 10;
  -  int DOLLAR = 11;
  -  int HASH = 15;
  -  int SINGLE_LINE_COMMENT = 16;
  -  int FORMAL_COMMENT = 17;
  -  int MULTI_LINE_COMMENT = 18;
  -  int NEWLINE = 22;
  -  int MINUS = 23;
  -  int PLUS = 24;
  -  int MULTIPLY = 25;
  -  int DIVIDE = 26;
  -  int MODULUS = 27;
  -  int LOGICAL_AND = 28;
  -  int LOGICAL_OR = 29;
  -  int LOGICAL_LT = 30;
  -  int LOGICAL_LE = 31;
  -  int LOGICAL_GT = 32;
  -  int LOGICAL_GE = 33;
  -  int LOGICAL_EQUALS = 34;
  -  int LOGICAL_NOT_EQUALS = 35;
  -  int LOGICAL_NOT = 36;
  -  int EQUALS = 37;
  -  int END = 38;
  -  int INCLUDE_DIRECTIVE = 39;
  -  int IF_DIRECTIVE = 40;
  -  int ELSEIF_DIRECTIVE = 41;
  -  int ELSE_DIRECTIVE = 42;
  -  int SET_DIRECTIVE = 43;
  -  int STOP_DIRECTIVE = 44;
  -  int DIGIT = 45;
  -  int NUMBER_LITERAL = 46;
  +  int DIGIT = 8;
  +  int NUMBER_LITERAL = 9;
  +  int COMMA = 10;
  +  int TRUE = 11;
  +  int FALSE = 12;
  +  int EQUALS = 13;
  +  int DOLLAR = 14;
  +  int HASH = 18;
  +  int SINGLE_LINE_COMMENT = 19;
  +  int FORMAL_COMMENT = 20;
  +  int MULTI_LINE_COMMENT = 21;
  +  int NEWLINE = 25;
  +  int MINUS = 26;
  +  int PLUS = 27;
  +  int MULTIPLY = 28;
  +  int DIVIDE = 29;
  +  int MODULUS = 30;
  +  int LOGICAL_AND = 31;
  +  int LOGICAL_OR = 32;
  +  int LOGICAL_LT = 33;
  +  int LOGICAL_LE = 34;
  +  int LOGICAL_GT = 35;
  +  int LOGICAL_GE = 36;
  +  int LOGICAL_EQUALS = 37;
  +  int LOGICAL_NOT_EQUALS = 38;
  +  int LOGICAL_NOT = 39;
  +  int END = 40;
  +  int INCLUDE_DIRECTIVE = 41;
  +  int IF_DIRECTIVE = 42;
  +  int ELSEIF_DIRECTIVE = 43;
  +  int ELSE_DIRECTIVE = 44;
  +  int SET_DIRECTIVE = 45;
  +  int STOP_DIRECTIVE = 46;
     int LETTER = 47;
     int WORD = 48;
     int ALPHA_CHAR = 49;
  @@ -72,18 +72,21 @@
       "\"[\"",
       "\"]\"",
       "<STRING_LITERAL>",
  +    "<DIGIT>",
  +    "<NUMBER_LITERAL>",
       "\",\"",
       "\"true\"",
       "\"false\"",
  +    "\"=\"",
       "\"$\"",
       "\"##\"",
  -    "<token of kind 13>",
  +    "<token of kind 16>",
       "\"#*\"",
       "\"#\"",
       "<SINGLE_LINE_COMMENT>",
       "\"*#\"",
       "\"*#\"",
  -    "<token of kind 19>",
  +    "<token of kind 22>",
       "\" \"",
       "\"\\t\"",
       "<NEWLINE>",
  @@ -101,7 +104,6 @@
       "\"==\"",
       "\"!=\"",
       "\"!\"",
  -    "\"=\"",
       "\"end\"",
       "\"include\"",
       "\"if\"",
  @@ -109,8 +111,6 @@
       "\"else\"",
       "\"set\"",
       "\"stop\"",
  -    "<DIGIT>",
  -    "<NUMBER_LITERAL>",
       "<LETTER>",
       "<WORD>",
       "<ALPHA_CHAR>",
  
  
  
  1.3       +281 -266  
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTokenManager.java
  
  Index: ParserTokenManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTokenManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ParserTokenManager.java   2000/10/03 17:03:16     1.2
  +++ ParserTokenManager.java   2000/10/09 15:06:32     1.3
  @@ -91,7 +91,7 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0xd000L) != 0L)
  +         if ((active0 & 0x68000L) != 0L)
               return 5;
            return -1;
         default :
  @@ -121,10 +121,10 @@
      switch(curChar)
      {
         case 35:
  -         jjmatchedKind = 15;
  -         return jjMoveStringLiteralDfa1_0(0x5000L);
  +         jjmatchedKind = 18;
  +         return jjMoveStringLiteralDfa1_0(0x28000L);
         case 36:
  -         return jjStopAtPos(0, 11);
  +         return jjStopAtPos(0, 14);
         default :
            return jjMoveNfa_0(0, 0);
      }
  @@ -139,12 +139,12 @@
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStopAtPos(1, 12);
  +         if ((active0 & 0x8000L) != 0L)
  +            return jjStopAtPos(1, 15);
            break;
         case 42:
  -         if ((active0 & 0x4000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 14, 3);
  +         if ((active0 & 0x20000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 17, 3);
            break;
         default :
            break;
  @@ -229,8 +229,8 @@
                        jjstateSet[jjnewStateCnt++] = 4;
                     break;
                  case 4:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  case 5:
                     if (curChar == 42)
  @@ -273,8 +273,8 @@
                     jjCheckNAdd(2);
                     break;
                  case 4:
  -                  if (kind > 13)
  -                     kind = 13;
  +                  if (kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -301,8 +301,8 @@
                        kind = 1;
                     break;
                  case 4:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -326,7 +326,7 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0xd000L) != 0L)
  +         if ((active0 & 0x68000L) != 0L)
               return 2;
            return -1;
         default :
  @@ -350,12 +350,12 @@
      switch(curChar)
      {
         case 35:
  -         jjmatchedKind = 15;
  -         return jjMoveStringLiteralDfa1_3(0x5000L);
  +         jjmatchedKind = 18;
  +         return jjMoveStringLiteralDfa1_3(0x28000L);
         case 36:
  -         return jjStopAtPos(0, 11);
  +         return jjStopAtPos(0, 14);
         case 42:
  -         return jjMoveStringLiteralDfa1_3(0x40000L);
  +         return jjMoveStringLiteralDfa1_3(0x200000L);
         default :
            return jjMoveNfa_3(3, 0);
      }
  @@ -370,14 +370,14 @@
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStopAtPos(1, 12);
  -         else if ((active0 & 0x40000L) != 0L)
  -            return jjStopAtPos(1, 18);
  +         if ((active0 & 0x8000L) != 0L)
  +            return jjStopAtPos(1, 15);
  +         else if ((active0 & 0x200000L) != 0L)
  +            return jjStopAtPos(1, 21);
            break;
         case 42:
  -         if ((active0 & 0x4000L) != 0L)
  -            return jjStartNfaWithStates_3(1, 14, 0);
  +         if ((active0 & 0x20000L) != 0L)
  +            return jjStartNfaWithStates_3(1, 17, 0);
            break;
         default :
            break;
  @@ -408,8 +408,8 @@
                        jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  case 2:
                     if (curChar == 42)
  @@ -431,7 +431,7 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  kind = 13;
  +                  kind = 16;
                     break;
                  default : break;
               }
  @@ -446,8 +446,8 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -471,7 +471,7 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0xd000L) != 0L)
  +         if ((active0 & 0x68000L) != 0L)
               return 2;
            return -1;
         default :
  @@ -495,10 +495,10 @@
      switch(curChar)
      {
         case 35:
  -         jjmatchedKind = 15;
  -         return jjMoveStringLiteralDfa1_5(0x5000L);
  +         jjmatchedKind = 18;
  +         return jjMoveStringLiteralDfa1_5(0x28000L);
         case 36:
  -         return jjStopAtPos(0, 11);
  +         return jjStopAtPos(0, 14);
         default :
            return jjMoveNfa_5(3, 0);
      }
  @@ -513,12 +513,12 @@
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStopAtPos(1, 12);
  +         if ((active0 & 0x8000L) != 0L)
  +            return jjStopAtPos(1, 15);
            break;
         case 42:
  -         if ((active0 & 0x4000L) != 0L)
  -            return jjStartNfaWithStates_5(1, 14, 0);
  +         if ((active0 & 0x20000L) != 0L)
  +            return jjStartNfaWithStates_5(1, 17, 0);
            break;
         default :
            break;
  @@ -547,8 +547,8 @@
                  case 3:
                     if ((0x2400L & l) != 0L)
                     {
  -                     if (kind > 16)
  -                        kind = 16;
  +                     if (kind > 19)
  +                        kind = 19;
                     }
                     else if (curChar == 35)
                        jjstateSet[jjnewStateCnt++] = 2;
  @@ -560,20 +560,20 @@
                        jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  case 2:
                     if (curChar == 42)
                        jjstateSet[jjnewStateCnt++] = 0;
                     break;
                  case 4:
  -                  if ((0x2400L & l) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((0x2400L & l) != 0L && kind > 19)
  +                     kind = 19;
                     break;
                  case 5:
  -                  if (curChar == 10 && kind > 16)
  -                     kind = 16;
  +                  if (curChar == 10 && kind > 19)
  +                     kind = 19;
                     break;
                  case 6:
                     if (curChar == 13)
  @@ -591,7 +591,7 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  kind = 13;
  +                  kind = 16;
                     break;
                  default : break;
               }
  @@ -606,8 +606,8 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -631,30 +631,30 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x1fc000000600L) != 0L)
  +         if ((active0 & 0x7f0000001800L) != 0L)
            {
               jjmatchedKind = 48;
               return 11;
            }
  -         if ((active0 & 0xd000L) != 0L)
  -            return 5;
  +         if ((active0 & 0x68000L) != 0L)
  +            return 6;
            return -1;
         case 1:
  -         if ((active0 & 0x1ec000000600L) != 0L)
  +         if ((active0 & 0x20000L) != 0L)
  +            return 4;
  +         if ((active0 & 0x7b0000001800L) != 0L)
            {
               jjmatchedKind = 48;
               jjmatchedPos = 1;
               return 11;
            }
  -         if ((active0 & 0x10000000000L) != 0L)
  +         if ((active0 & 0x40000000000L) != 0L)
               return 11;
  -         if ((active0 & 0x4000L) != 0L)
  -            return 3;
            return -1;
         case 2:
  -         if ((active0 & 0x84000000000L) != 0L)
  +         if ((active0 & 0x210000000000L) != 0L)
               return 11;
  -         if ((active0 & 0x168000000600L) != 0L)
  +         if ((active0 & 0x5a0000001800L) != 0L)
            {
               jjmatchedKind = 48;
               jjmatchedPos = 2;
  @@ -662,7 +662,7 @@
            }
            return -1;
         case 3:
  -         if ((active0 & 0x8000000400L) != 0L)
  +         if ((active0 & 0x20000001000L) != 0L)
            {
               if (jjmatchedPos != 3)
               {
  @@ -671,23 +671,23 @@
               }
               return 11;
            }
  -         if ((active0 & 0x160000000200L) != 0L)
  +         if ((active0 & 0x580000000800L) != 0L)
               return 11;
            return -1;
         case 4:
  -         if ((active0 & 0x28000000000L) != 0L)
  +         if ((active0 & 0xa0000000000L) != 0L)
            {
               jjmatchedKind = 48;
               jjmatchedPos = 4;
               return 11;
            }
  -         if ((active0 & 0x400L) != 0L)
  +         if ((active0 & 0x1000L) != 0L)
               return 11;
            return -1;
         case 5:
  -         if ((active0 & 0x20000000000L) != 0L)
  +         if ((active0 & 0x80000000000L) != 0L)
               return 11;
  -         if ((active0 & 0x8000000000L) != 0L)
  +         if ((active0 & 0x20000000000L) != 0L)
            {
               jjmatchedKind = 48;
               jjmatchedPos = 5;
  @@ -715,56 +715,56 @@
      switch(curChar)
      {
         case 33:
  -         jjmatchedKind = 36;
  -         return jjMoveStringLiteralDfa1_2(0x800000000L);
  +         jjmatchedKind = 39;
  +         return jjMoveStringLiteralDfa1_2(0x4000000000L);
         case 35:
  -         jjmatchedKind = 15;
  -         return jjMoveStringLiteralDfa1_2(0x5000L);
  +         jjmatchedKind = 18;
  +         return jjMoveStringLiteralDfa1_2(0x28000L);
         case 36:
  -         return jjStopAtPos(0, 11);
  +         return jjStopAtPos(0, 14);
         case 37:
  -         return jjStopAtPos(0, 27);
  +         return jjStopAtPos(0, 30);
         case 38:
  -         return jjMoveStringLiteralDfa1_2(0x10000000L);
  +         return jjMoveStringLiteralDfa1_2(0x80000000L);
         case 40:
            return jjStopAtPos(0, 3);
         case 41:
            return jjStopAtPos(0, 4);
         case 42:
  -         return jjStopAtPos(0, 25);
  +         return jjStopAtPos(0, 28);
         case 43:
  -         return jjStopAtPos(0, 24);
  +         return jjStopAtPos(0, 27);
         case 44:
  -         return jjStopAtPos(0, 8);
  +         return jjStopAtPos(0, 10);
         case 45:
  -         return jjStopAtPos(0, 23);
  -      case 47:
            return jjStopAtPos(0, 26);
  +      case 47:
  +         return jjStopAtPos(0, 29);
         case 60:
  -         jjmatchedKind = 30;
  -         return jjMoveStringLiteralDfa1_2(0x80000000L);
  -      case 61:
  -         jjmatchedKind = 37;
  +         jjmatchedKind = 33;
            return jjMoveStringLiteralDfa1_2(0x400000000L);
  +      case 61:
  +         jjmatchedKind = 13;
  +         return jjMoveStringLiteralDfa1_2(0x2000000000L);
         case 62:
  -         jjmatchedKind = 32;
  -         return jjMoveStringLiteralDfa1_2(0x200000000L);
  +         jjmatchedKind = 35;
  +         return jjMoveStringLiteralDfa1_2(0x1000000000L);
         case 91:
            return jjStopAtPos(0, 5);
         case 93:
            return jjStopAtPos(0, 6);
         case 101:
  -         return jjMoveStringLiteralDfa1_2(0x64000000000L);
  +         return jjMoveStringLiteralDfa1_2(0x190000000000L);
         case 102:
  -         return jjMoveStringLiteralDfa1_2(0x400L);
  +         return jjMoveStringLiteralDfa1_2(0x1000L);
         case 105:
  -         return jjMoveStringLiteralDfa1_2(0x18000000000L);
  +         return jjMoveStringLiteralDfa1_2(0x60000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa1_2(0x180000000000L);
  +         return jjMoveStringLiteralDfa1_2(0x600000000000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_2(0x200L);
  +         return jjMoveStringLiteralDfa1_2(0x800L);
         case 124:
  -         return jjMoveStringLiteralDfa1_2(0x20000000L);
  +         return jjMoveStringLiteralDfa1_2(0x100000000L);
         default :
            return jjMoveNfa_2(0, 0);
      }
  @@ -779,46 +779,46 @@
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStopAtPos(1, 12);
  +         if ((active0 & 0x8000L) != 0L)
  +            return jjStopAtPos(1, 15);
            break;
         case 38:
  -         if ((active0 & 0x10000000L) != 0L)
  -            return jjStopAtPos(1, 28);
  +         if ((active0 & 0x80000000L) != 0L)
  +            return jjStopAtPos(1, 31);
            break;
         case 42:
  -         if ((active0 & 0x4000L) != 0L)
  -            return jjStartNfaWithStates_2(1, 14, 3);
  +         if ((active0 & 0x20000L) != 0L)
  +            return jjStartNfaWithStates_2(1, 17, 4);
            break;
         case 61:
  -         if ((active0 & 0x80000000L) != 0L)
  -            return jjStopAtPos(1, 31);
  -         else if ((active0 & 0x200000000L) != 0L)
  -            return jjStopAtPos(1, 33);
  -         else if ((active0 & 0x400000000L) != 0L)
  +         if ((active0 & 0x400000000L) != 0L)
               return jjStopAtPos(1, 34);
  -         else if ((active0 & 0x800000000L) != 0L)
  -            return jjStopAtPos(1, 35);
  +         else if ((active0 & 0x1000000000L) != 0L)
  +            return jjStopAtPos(1, 36);
  +         else if ((active0 & 0x2000000000L) != 0L)
  +            return jjStopAtPos(1, 37);
  +         else if ((active0 & 0x4000000000L) != 0L)
  +            return jjStopAtPos(1, 38);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x400L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x1000L);
         case 101:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x80000000000L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x200000000000L);
         case 102:
  -         if ((active0 & 0x10000000000L) != 0L)
  -            return jjStartNfaWithStates_2(1, 40, 11);
  +         if ((active0 & 0x40000000000L) != 0L)
  +            return jjStartNfaWithStates_2(1, 42, 11);
            break;
         case 108:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x60000000000L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x180000000000L);
         case 110:
  -         return jjMoveStringLiteralDfa2_2(active0, 0xc000000000L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x30000000000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x200L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x800L);
         case 116:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x100000000000L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x400000000000L);
         case 124:
  -         if ((active0 & 0x20000000L) != 0L)
  -            return jjStopAtPos(1, 29);
  +         if ((active0 & 0x100000000L) != 0L)
  +            return jjStopAtPos(1, 32);
            break;
         default :
            break;
  @@ -837,23 +837,23 @@
      switch(curChar)
      {
         case 99:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x8000000000L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x20000000000L);
         case 100:
  -         if ((active0 & 0x4000000000L) != 0L)
  -            return jjStartNfaWithStates_2(2, 38, 11);
  +         if ((active0 & 0x10000000000L) != 0L)
  +            return jjStartNfaWithStates_2(2, 40, 11);
            break;
         case 108:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x400L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x1000L);
         case 111:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x100000000000L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x400000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x60000000000L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x180000000000L);
         case 116:
  -         if ((active0 & 0x80000000000L) != 0L)
  -            return jjStartNfaWithStates_2(2, 43, 11);
  +         if ((active0 & 0x200000000000L) != 0L)
  +            return jjStartNfaWithStates_2(2, 45, 11);
            break;
         case 117:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x200L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x800L);
         default :
            break;
      }
  @@ -871,22 +871,22 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x200L) != 0L)
  -            return jjStartNfaWithStates_2(3, 9, 11);
  -         else if ((active0 & 0x40000000000L) != 0L)
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_2(3, 11, 11);
  +         else if ((active0 & 0x100000000000L) != 0L)
            {
  -            jjmatchedKind = 42;
  +            jjmatchedKind = 44;
               jjmatchedPos = 3;
            }
  -         return jjMoveStringLiteralDfa4_2(active0, 0x20000000000L);
  +         return jjMoveStringLiteralDfa4_2(active0, 0x80000000000L);
         case 108:
  -         return jjMoveStringLiteralDfa4_2(active0, 0x8000000000L);
  +         return jjMoveStringLiteralDfa4_2(active0, 0x20000000000L);
         case 112:
  -         if ((active0 & 0x100000000000L) != 0L)
  -            return jjStartNfaWithStates_2(3, 44, 11);
  +         if ((active0 & 0x400000000000L) != 0L)
  +            return jjStartNfaWithStates_2(3, 46, 11);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_2(active0, 0x400L);
  +         return jjMoveStringLiteralDfa4_2(active0, 0x1000L);
         default :
            break;
      }
  @@ -904,13 +904,13 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x400L) != 0L)
  -            return jjStartNfaWithStates_2(4, 10, 11);
  +         if ((active0 & 0x1000L) != 0L)
  +            return jjStartNfaWithStates_2(4, 12, 11);
            break;
         case 105:
  -         return jjMoveStringLiteralDfa5_2(active0, 0x20000000000L);
  +         return jjMoveStringLiteralDfa5_2(active0, 0x80000000000L);
         case 117:
  -         return jjMoveStringLiteralDfa5_2(active0, 0x8000000000L);
  +         return jjMoveStringLiteralDfa5_2(active0, 0x20000000000L);
         default :
            break;
      }
  @@ -928,10 +928,10 @@
      switch(curChar)
      {
         case 100:
  -         return jjMoveStringLiteralDfa6_2(active0, 0x8000000000L);
  +         return jjMoveStringLiteralDfa6_2(active0, 0x20000000000L);
         case 102:
  -         if ((active0 & 0x20000000000L) != 0L)
  -            return jjStartNfaWithStates_2(5, 41, 11);
  +         if ((active0 & 0x80000000000L) != 0L)
  +            return jjStartNfaWithStates_2(5, 43, 11);
            break;
         default :
            break;
  @@ -950,8 +950,8 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x8000000000L) != 0L)
  -            return jjStartNfaWithStates_2(6, 39, 11);
  +         if ((active0 & 0x20000000000L) != 0L)
  +            return jjStartNfaWithStates_2(6, 41, 11);
            break;
         default :
            break;
  @@ -980,21 +980,21 @@
                  case 0:
                     if ((0x3ff000000000000L & l) != 0L)
                     {
  -                     if (kind > 46)
  -                        kind = 46;
  -                     jjCheckNAdd(10);
  +                     if (kind > 9)
  +                        kind = 9;
  +                     jjCheckNAdd(3);
                     }
                     else if ((0x2400L & l) != 0L)
                     {
  -                     if (kind > 22)
  -                        kind = 22;
  +                     if (kind > 25)
  +                        kind = 25;
                     }
                     else if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  +                     jjstateSet[jjnewStateCnt++] = 6;
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(1, 2);
                     if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 8;
  +                     jjstateSet[jjnewStateCnt++] = 9;
                     break;
                  case 1:
                     if ((0xfffffffbffffdbffL & l) != 0L)
  @@ -1005,39 +1005,39 @@
                        kind = 7;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 4;
  +                  if ((0x3ff000000000000L & l) == 0L)
  +                     break;
  +                  if (kind > 9)
  +                     kind = 9;
  +                  jjCheckNAdd(3);
                     break;
                  case 4:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 13)
  -                     kind = 13;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 5;
                     break;
                  case 5:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  case 6:
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 4;
                     break;
                  case 7:
  -                  if ((0x2400L & l) != 0L && kind > 22)
  -                     kind = 22;
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 6;
                     break;
                  case 8:
  -                  if (curChar == 10 && kind > 22)
  -                     kind = 22;
  +                  if ((0x2400L & l) != 0L && kind > 25)
  +                     kind = 25;
                     break;
                  case 9:
  -                  if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 8;
  +                  if (curChar == 10 && kind > 25)
  +                     kind = 25;
                     break;
                  case 10:
  -                  if ((0x3ff000000000000L & l) == 0L)
  -                     break;
  -                  if (kind > 46)
  -                     kind = 46;
  -                  jjCheckNAdd(10);
  +                  if (curChar == 13)
  +                     jjstateSet[jjnewStateCnt++] = 9;
                     break;
                  default : break;
               }
  @@ -1061,9 +1061,9 @@
                  case 1:
                     jjAddStates(0, 1);
                     break;
  -               case 4:
  -                  if (kind > 13)
  -                     kind = 13;
  +               case 5:
  +                  if (kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -1081,9 +1081,9 @@
                     if ((jjbitVec0[i2] & l2) != 0L)
                        jjAddStates(0, 1);
                     break;
  -               case 4:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 13)
  -                     kind = 13;
  +               case 5:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -1107,7 +1107,7 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0xd000L) != 0L)
  +         if ((active0 & 0x68000L) != 0L)
               return 2;
            return -1;
         default :
  @@ -1131,12 +1131,12 @@
      switch(curChar)
      {
         case 35:
  -         jjmatchedKind = 15;
  -         return jjMoveStringLiteralDfa1_4(0x5000L);
  +         jjmatchedKind = 18;
  +         return jjMoveStringLiteralDfa1_4(0x28000L);
         case 36:
  -         return jjStopAtPos(0, 11);
  +         return jjStopAtPos(0, 14);
         case 42:
  -         return jjMoveStringLiteralDfa1_4(0x20000L);
  +         return jjMoveStringLiteralDfa1_4(0x100000L);
         default :
            return jjMoveNfa_4(3, 0);
      }
  @@ -1151,14 +1151,14 @@
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStopAtPos(1, 12);
  -         else if ((active0 & 0x20000L) != 0L)
  -            return jjStopAtPos(1, 17);
  +         if ((active0 & 0x8000L) != 0L)
  +            return jjStopAtPos(1, 15);
  +         else if ((active0 & 0x100000L) != 0L)
  +            return jjStopAtPos(1, 20);
            break;
         case 42:
  -         if ((active0 & 0x4000L) != 0L)
  -            return jjStartNfaWithStates_4(1, 14, 0);
  +         if ((active0 & 0x20000L) != 0L)
  +            return jjStartNfaWithStates_4(1, 17, 0);
            break;
         default :
            break;
  @@ -1189,8 +1189,8 @@
                        jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  case 2:
                     if (curChar == 42)
  @@ -1212,7 +1212,7 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  kind = 13;
  +                  kind = 16;
                     break;
                  default : break;
               }
  @@ -1227,8 +1227,8 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 13)
  -                     kind = 13;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -1252,41 +1252,41 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x600L) != 0L)
  +         if ((active0 & 0x68000L) != 0L)
  +            return 6;
  +         if ((active0 & 0x1800L) != 0L)
            {
               jjmatchedKind = 52;
  -            return 8;
  +            return 9;
            }
  -         if ((active0 & 0xd000L) != 0L)
  -            return 5;
            return -1;
         case 1:
  -         if ((active0 & 0x600L) != 0L)
  +         if ((active0 & 0x20000L) != 0L)
  +            return 4;
  +         if ((active0 & 0x1800L) != 0L)
            {
               jjmatchedKind = 52;
               jjmatchedPos = 1;
  -            return 8;
  +            return 9;
            }
  -         if ((active0 & 0x4000L) != 0L)
  -            return 3;
            return -1;
         case 2:
  -         if ((active0 & 0x600L) != 0L)
  +         if ((active0 & 0x1800L) != 0L)
            {
               jjmatchedKind = 52;
               jjmatchedPos = 2;
  -            return 8;
  +            return 9;
            }
            return -1;
         case 3:
  -         if ((active0 & 0x400L) != 0L)
  +         if ((active0 & 0x1000L) != 0L)
            {
               jjmatchedKind = 52;
               jjmatchedPos = 3;
  -            return 8;
  +            return 9;
            }
  -         if ((active0 & 0x200L) != 0L)
  -            return 8;
  +         if ((active0 & 0x800L) != 0L)
  +            return 9;
            return -1;
         default :
            return -1;
  @@ -1311,26 +1311,28 @@
         case 33:
            return jjStopAtPos(0, 54);
         case 35:
  -         jjmatchedKind = 15;
  -         return jjMoveStringLiteralDfa1_1(0x5000L);
  +         jjmatchedKind = 18;
  +         return jjMoveStringLiteralDfa1_1(0x28000L);
         case 36:
  -         return jjStopAtPos(0, 11);
  +         return jjStopAtPos(0, 14);
         case 40:
            return jjStopAtPos(0, 3);
         case 41:
            return jjStopAtPos(0, 4);
         case 44:
  -         return jjStopAtPos(0, 8);
  +         return jjStopAtPos(0, 10);
         case 46:
            return jjStopAtPos(0, 53);
  +      case 61:
  +         return jjStopAtPos(0, 13);
         case 91:
            return jjStopAtPos(0, 5);
         case 93:
            return jjStopAtPos(0, 6);
         case 102:
  -         return jjMoveStringLiteralDfa1_1(0x400L);
  +         return jjMoveStringLiteralDfa1_1(0x1000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_1(0x200L);
  +         return jjMoveStringLiteralDfa1_1(0x800L);
         case 123:
            return jjStopAtPos(0, 55);
         case 125:
  @@ -1349,17 +1351,17 @@
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStopAtPos(1, 12);
  +         if ((active0 & 0x8000L) != 0L)
  +            return jjStopAtPos(1, 15);
            break;
         case 42:
  -         if ((active0 & 0x4000L) != 0L)
  -            return jjStartNfaWithStates_1(1, 14, 3);
  +         if ((active0 & 0x20000L) != 0L)
  +            return jjStartNfaWithStates_1(1, 17, 4);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_1(active0, 0x400L);
  +         return jjMoveStringLiteralDfa2_1(active0, 0x1000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_1(active0, 0x200L);
  +         return jjMoveStringLiteralDfa2_1(active0, 0x800L);
         default :
            break;
      }
  @@ -1377,9 +1379,9 @@
      switch(curChar)
      {
         case 108:
  -         return jjMoveStringLiteralDfa3_1(active0, 0x400L);
  +         return jjMoveStringLiteralDfa3_1(active0, 0x1000L);
         case 117:
  -         return jjMoveStringLiteralDfa3_1(active0, 0x200L);
  +         return jjMoveStringLiteralDfa3_1(active0, 0x800L);
         default :
            break;
      }
  @@ -1397,11 +1399,11 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x200L) != 0L)
  -            return jjStartNfaWithStates_1(3, 9, 8);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_1(3, 11, 9);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_1(active0, 0x400L);
  +         return jjMoveStringLiteralDfa4_1(active0, 0x1000L);
         default :
            break;
      }
  @@ -1419,8 +1421,8 @@
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x400L) != 0L)
  -            return jjStartNfaWithStates_1(4, 10, 8);
  +         if ((active0 & 0x1000L) != 0L)
  +            return jjStartNfaWithStates_1(4, 12, 9);
            break;
         default :
            break;
  @@ -1431,7 +1433,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 9;
  +   jjnewStateCnt = 10;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1447,8 +1449,14 @@
               switch(jjstateSet[--i])
               {
                  case 0:
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  +                  if ((0x3ff000000000000L & l) != 0L)
  +                  {
  +                     if (kind > 9)
  +                        kind = 9;
  +                     jjCheckNAdd(3);
  +                  }
  +                  else if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 6;
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(1, 2);
                     break;
  @@ -1461,27 +1469,34 @@
                        kind = 7;
                     break;
                  case 3:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 4;
  +                  if ((0x3ff000000000000L & l) == 0L)
  +                     break;
  +                  if (kind > 9)
  +                     kind = 9;
  +                  jjCheckNAdd(3);
                     break;
                  case 4:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 13)
  -                     kind = 13;
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 5;
                     break;
                  case 5:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 3;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  case 6:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 4;
  +                  break;
  +               case 7:
                     if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  +                     jjstateSet[jjnewStateCnt++] = 6;
                     break;
  -               case 8:
  +               case 9:
                     if ((0x3ff200000000000L & l) == 0L)
                        break;
                     if (kind > 52)
                        kind = 52;
  -                  jjstateSet[jjnewStateCnt++] = 8;
  +                  jjstateSet[jjnewStateCnt++] = 9;
                     break;
                  default : break;
               }
  @@ -1499,21 +1514,21 @@
                        break;
                     if (kind > 52)
                        kind = 52;
  -                  jjCheckNAdd(8);
  +                  jjCheckNAdd(9);
                     break;
                  case 1:
                     jjAddStates(0, 1);
                     break;
  -               case 4:
  -                  if (kind > 13)
  -                     kind = 13;
  +               case 5:
  +                  if (kind > 16)
  +                     kind = 16;
                     break;
  -               case 8:
  +               case 9:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
                     if (kind > 52)
                        kind = 52;
  -                  jjCheckNAdd(8);
  +                  jjCheckNAdd(9);
                     break;
                  default : break;
               }
  @@ -1531,9 +1546,9 @@
                     if ((jjbitVec0[i2] & l2) != 0L)
                        jjAddStates(0, 1);
                     break;
  -               case 4:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 13)
  -                     kind = 13;
  +               case 5:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  +                     kind = 16;
                     break;
                  default : break;
               }
  @@ -1546,7 +1561,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 10 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1570,21 +1585,21 @@
      "IN_SINGLE_LINE_COMMENT", 
   };
   public static final int[] jjnewLexState = {
  -   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 4, 3, -1, 0, 0, 0, -1, -1, 
-1, -1, -1, -1, 
  -   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, 
-1, -1, -1, -1, -1, 
  +   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 4, 3, -1, 0, 0, 
0, -1, -1, -1, 
  +   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, 0, 
-1, -1, -1, -1, -1, 
      -1, -1, -1, -1, -1, -1, 0, -1, 
   };
   static final long[] jjtoToken = {
  -   0x1f15fffff8707ffL, 
  +   0x1f17ffffc383effL, 
   };
   static final long[] jjtoSkip = {
  -   0x200000000700000L, 
  +   0x200000003800000L, 
   };
   static final long[] jjtoSpecial = {
  -   0x200000000400000L, 
  +   0x200000002000000L, 
   };
   static final long[] jjtoMore = {
  -   0x8f800L, 
  +   0x47c000L, 
   };
   private ASCII_CharStream input_stream;
   private final int[] jjrounds = new int[12];
  @@ -1708,27 +1723,27 @@
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_3();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 19)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 22)
            {
  -            jjmatchedKind = 19;
  +            jjmatchedKind = 22;
            }
            break;
          case 4:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_4();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 19)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 22)
            {
  -            jjmatchedKind = 19;
  +            jjmatchedKind = 22;
            }
            break;
          case 5:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_5();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 19)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 22)
            {
  -            jjmatchedKind = 19;
  +            jjmatchedKind = 22;
            }
            break;
        }
  @@ -1805,7 +1820,7 @@
   {
      switch(jjmatchedKind)
      {
  -      case 22 :
  +      case 25 :
            if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -1844,7 +1859,7 @@
      jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
      switch(jjmatchedKind)
      {
  -      case 11 :
  +      case 14 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -1856,7 +1871,7 @@
               SwitchTo(REFERENCE);
           }
            break;
  -      case 12 :
  +      case 15 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -1864,7 +1879,7 @@
            jjimageLen = 0;
         inComment = true;
            break;
  -      case 13 :
  +      case 16 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -1872,7 +1887,7 @@
            jjimageLen = 0;
         input_stream.backup(1); inComment = true;
            break;
  -      case 14 :
  +      case 17 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -1880,7 +1895,7 @@
            jjimageLen = 0;
         inComment=true;
            break;
  -      case 15 :
  +      case 18 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -1932,49 +1947,49 @@
           }
           incMode = false;
            break;
  -      case 16 :
  +      case 19 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
       inComment = false;
            break;
  -      case 17 :
  +      case 20 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
       inComment = false;
            break;
  -      case 18 :
  +      case 21 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
       inComment = false;
            break;
  -      case 38 :
  +      case 40 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
           inDirective = false;
            break;
  -      case 39 :
  +      case 41 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
         incMode = true;
            break;
  -      case 43 :
  +      case 45 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
         inSet = true;
            break;
  -      case 44 :
  +      case 46 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  
  
  
  1.2       +53 -37    
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/SimpleNode.java
  
  Index: SimpleNode.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/SimpleNode.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SimpleNode.java   2000/09/30 17:04:24     1.1
  +++ SimpleNode.java   2000/10/09 15:06:33     1.2
  @@ -13,9 +13,11 @@
       protected Node[] children;
       protected int id;
       protected Parser parser;
  -
  +    
  +    protected  int info; // added
       public boolean state;
       
  +    
       /* Added */
       protected Token first, last;
   
  @@ -45,33 +47,6 @@
           last = parser.getToken(0); // added
       }
   
  -    public boolean evaluate(Context context)
  -    {
  -        return false;
  -    }        
  -
  -    public Object value(Context context)
  -    {
  -        return null;
  -    }        
  -
  -    public void process(Node node, Context context, ParserVisitor visitor)
  -    {
  -    }
  -
  -    public Object invoke(Object o, Context context) 
  -    { return null; }
  -
  -    public void render(Context context, Writer writer)
  -        throws IOException
  -    {
  -    }
  -
  -    public int getType()
  -    {
  -        return id;
  -    }
  -
       public void setFirstToken(Token t)
       {
           this.first = first;
  @@ -110,15 +85,6 @@
           children[i] = n;
       }
   
  -    // Added by jvz.
  -    public void jjtRemoveChild(int i)
  -    {
  -        Node c[] = new Node[children.length - 1];
  -        System.arraycopy(children, 0, c, 0, i - 1);
  -        System.arraycopy(children, i + 1, c, i, c.length - i);
  -        children = c;
  -    }
  -
       public Node jjtGetChild(int i)
       {
           return children[i];
  @@ -181,5 +147,55 @@
               }
           }
       }
  +
  +    // All additional methods
  +
  +    public Object init(Context context, Object data) throws Exception
  +    {
  +        int i, k = jjtGetNumChildren();
  +
  +        for (i = 0; i < k; i++)
  +            jjtGetChild(i).init(context, data);
  +    
  +        return data;
  +    }
  +
  +    public boolean evaluate(Context context)
  +    {
  +        return false;
  +    }        
  +
  +    public Object value(Context context)
  +    {
  +        return null;
  +    }        
  +
  +    public Object invoke(Object o, Context context) 
  +    { return null; }
  +
  +    public void render(Context context, Writer writer)
  +        throws IOException
  +    {
  +    }
  +
  +    public Object execute(Object o, Context context)
  +    {
  +        return null;
  +    }
  +
  +    public int getType()
  +    {
  +        return id;
  +    }
  +
  +    public void setInfo(int info)
  +    {
  +        this.info = info;
  +    }
  +    
  +    public int getInfo()
  +    {
  +        return info;
  +    }        
   }
   
  
  
  

Reply via email to