jvanzyl     00/10/03 10:03:22

  Modified:    src/java/org/apache/velocity/runtime/parser Parser.java
                        Parser.jj Parser.jjt ParserConstants.java
                        ParserTokenManager.java ParserTreeConstants.java
                        ParserVisitor.java
  Added:       src/java/org/apache/velocity/runtime/parser
                        ASTSetDirective.java
  Log:
  - grammar modified for new directive syntax. place the set
    directive back in the core.
  
  Revision  Changes    Path
  1.3       +398 -347  
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Parser.java       2000/09/30 22:58:14     1.2
  +++ Parser.java       2000/10/03 17:03:13     1.3
  @@ -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.2 2000/09/30 22:58:14 jvanzyl Exp $ 
  + * @version $Id: Parser.java,v 1.3 2000/10/03 17:03:13 jvanzyl Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants 
{/*@bgen(jjtree)*/
     protected JJTParserState jjtree = new JJTParserState();
  @@ -100,6 +100,7 @@
           case MULTI_LINE_COMMENT:
           case INCLUDE_DIRECTIVE:
           case IF_DIRECTIVE:
  +        case SET_DIRECTIVE:
           case STOP_DIRECTIVE:
           case NUMBER_LITERAL:
           case WORD:
  @@ -181,6 +182,9 @@
       case MULTI_LINE_COMMENT:
         Comment();
         break;
  +    case SET_DIRECTIVE:
  +      SetDirective();
  +      break;
       case WORD:
         Directive();
         break;
  @@ -272,38 +276,38 @@
       }
     }
   
  -  void DirectiveArgs(int args) throws ParseException {
  - /*@bgen(jjtree) DirectiveArgs */
  - ASTDirectiveArgs jjtn000 = new ASTDirectiveArgs(this, JJTDIRECTIVEARGS);
  - boolean jjtc000 = true;
  - jjtree.openNodeScope(jjtn000);
  - try {for (int i = 0; i < args; i++)
  -    {
  -        DirectiveArg();
  -    }/*@bgen(jjtree)*/
  - } finally {
  -   if (jjtc000) {
  -     jjtree.closeNodeScope(jjtn000, true);
  -   }
  - }
  +  final public void Word() throws ParseException {
  +               /*@bgen(jjtree) Word */
  +  ASTWord jjtn000 = new ASTWord(this, JJTWORD);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +    try {
  +      jj_consume_token(WORD);
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
     }
   
     final public void DirectiveArg() throws ParseException {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  -    case LPAREN:
  -    case LBRACKET:
  -    case STRING_LITERAL:
  -    case TRUE:
  -    case FALSE:
  -    case LOGICAL_NOT:
  -    case NUMBER_LITERAL:
       case IDENTIFIER:
       case SHORTHAND:
       case LCURLY:
  -      Expression();
  +      Reference();
         break;
       case WORD:
  -      jj_consume_token(WORD);
  +      Word();
  +      break;
  +    case STRING_LITERAL:
  +      StringLiteral();
  +      break;
  +    case NUMBER_LITERAL:
  +      NumberLiteral();
  +      break;
  +    case LBRACKET:
  +      ObjectArray();
         break;
       default:
         jj_la1[3] = jj_gen;
  @@ -317,7 +321,6 @@
       ASTDirective jjtn000 = new ASTDirective(this, JJTDIRECTIVE);
       boolean jjtc000 = true;
       jjtree.openNodeScope(jjtn000);Token t;
  -    int args;
       Directive d;
       try {
         t = jj_consume_token(WORD);
  @@ -326,21 +329,36 @@
           if (d == null)
           {
               token_source.SwitchTo(DEFAULT);
  +            token_source.inDirective = false;
               {if (true) return jjtn000;}
           }
  -
  -        args = d.getArgs();
  -      DirectiveArgs(args);
  +      jj_consume_token(LPAREN);
  +      label_2:
  +      while (true) {
  +        DirectiveArg();
  +        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +        case LBRACKET:
  +        case STRING_LITERAL:
  +        case NUMBER_LITERAL:
  +        case WORD:
  +        case IDENTIFIER:
  +        case SHORTHAND:
  +        case LCURLY:
  +          ;
  +          break;
  +        default:
  +          jj_la1[4] = jj_gen;
  +          break label_2;
  +        }
  +      }
  +      jj_consume_token(RPAREN);
           if (d.getType() == Directive.LINE)
  -        {
               {if (true) return jjtn000;}
  -        }
  -        token_source.SwitchTo(DEFAULT);
         ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_2:
  +        label_3:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -351,6 +369,7 @@
             case MULTI_LINE_COMMENT:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
  +          case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
             case WORD:
  @@ -361,8 +380,8 @@
               ;
               break;
             default:
  -            jj_la1[4] = jj_gen;
  -            break label_2;
  +            jj_la1[5] = jj_gen;
  +            break label_3;
             }
           }
         } catch (Throwable jjte001) {
  @@ -426,22 +445,22 @@
         case SHORTHAND:
         case LCURLY:
           Parameter();
  -        label_3:
  +        label_4:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case COMMA:
               ;
               break;
             default:
  -            jj_la1[5] = jj_gen;
  -            break label_3;
  +            jj_la1[6] = jj_gen;
  +            break label_4;
             }
             jj_consume_token(COMMA);
             Parameter();
           }
           break;
         default:
  -        jj_la1[6] = jj_gen;
  +        jj_la1[7] = jj_gen;
           ;
         }
         jj_consume_token(RBRACKET);
  @@ -491,7 +510,7 @@
         Reference();
         break;
       default:
  -      jj_la1[7] = jj_gen;
  +      jj_la1[8] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
  @@ -519,22 +538,22 @@
         case SHORTHAND:
         case LCURLY:
           Parameter();
  -        label_4:
  +        label_5:
           while (true) {
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
             case COMMA:
               ;
               break;
             default:
  -            jj_la1[8] = jj_gen;
  -            break label_4;
  +            jj_la1[9] = jj_gen;
  +            break label_5;
             }
             jj_consume_token(COMMA);
             Parameter();
           }
           break;
         default:
  -        jj_la1[9] = jj_gen;
  +        jj_la1[10] = jj_gen;
           ;
         }
         jj_consume_token(RPAREN);
  @@ -570,7 +589,7 @@
           jj_consume_token(SHORTHAND);
           break;
         default:
  -        jj_la1[10] = jj_gen;
  +        jj_la1[11] = jj_gen;
           ;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -578,16 +597,16 @@
           jj_consume_token(LCURLY);
           break;
         default:
  -        jj_la1[11] = jj_gen;
  +        jj_la1[12] = jj_gen;
           ;
         }
         jj_consume_token(IDENTIFIER);
  -      label_5:
  +      label_6:
         while (true) {
           if (jj_2_1(2)) {
             ;
           } else {
  -          break label_5;
  +          break label_6;
           }
           jj_consume_token(DOT);
           if (jj_2_2(3)) {
  @@ -601,12 +620,12 @@
                 jj_consume_token(RCURLY);
                 break;
               default:
  -              jj_la1[12] = jj_gen;
  +              jj_la1[13] = jj_gen;
                 ;
               }
               break;
             default:
  -            jj_la1[13] = jj_gen;
  +            jj_la1[14] = jj_gen;
               jj_consume_token(-1);
               throw new ParseException();
             }
  @@ -689,7 +708,7 @@
           t.image = t.image.substring(1);
           break;
         default:
  -        jj_la1[14] = jj_gen;
  +        jj_la1[15] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -719,7 +738,7 @@
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_6:
  +        label_7:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -730,6 +749,7 @@
             case MULTI_LINE_COMMENT:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
  +          case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
             case WORD:
  @@ -740,8 +760,8 @@
               ;
               break;
             default:
  -            jj_la1[15] = jj_gen;
  -            break label_6;
  +            jj_la1[16] = jj_gen;
  +            break label_7;
             }
           }
         } catch (Throwable jjte001) {
  @@ -765,7 +785,7 @@
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case ELSEIF_DIRECTIVE:
  -        label_7:
  +        label_8:
           while (true) {
             ElseIfStatement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -773,13 +793,13 @@
               ;
               break;
             default:
  -            jj_la1[16] = jj_gen;
  -            break label_7;
  +            jj_la1[17] = jj_gen;
  +            break label_8;
             }
           }
           break;
         default:
  -        jj_la1[17] = jj_gen;
  +        jj_la1[18] = jj_gen;
           ;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -787,7 +807,7 @@
           ElseStatement();
           break;
         default:
  -        jj_la1[18] = jj_gen;
  +        jj_la1[19] = jj_gen;
           ;
         }
         jj_consume_token(END);
  @@ -823,7 +843,7 @@
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_8:
  +        label_9:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -834,6 +854,7 @@
             case MULTI_LINE_COMMENT:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
  +          case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
             case WORD:
  @@ -844,8 +865,8 @@
               ;
               break;
             default:
  -            jj_la1[19] = jj_gen;
  -            break label_8;
  +            jj_la1[20] = jj_gen;
  +            break label_9;
             }
           }
         } catch (Throwable jjte001) {
  @@ -902,7 +923,7 @@
         boolean jjtc001 = true;
         jjtree.openNodeScope(jjtn001);
         try {
  -        label_9:
  +        label_10:
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  @@ -913,6 +934,7 @@
             case MULTI_LINE_COMMENT:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
  +          case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
             case NUMBER_LITERAL:
             case WORD:
  @@ -923,8 +945,8 @@
               ;
               break;
             default:
  -            jj_la1[20] = jj_gen;
  -            break label_9;
  +            jj_la1[21] = jj_gen;
  +            break label_10;
             }
           }
         } catch (Throwable jjte001) {
  @@ -967,6 +989,35 @@
       }
     }
   
  +  final public void SetDirective() throws ParseException {
  +                       /*@bgen(jjtree) SetDirective */
  +  ASTSetDirective jjtn000 = new ASTSetDirective(this, JJTSETDIRECTIVE);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +    try {
  +      jj_consume_token(SET_DIRECTIVE);
  +      Expression();
  +    } catch (Throwable jjte000) {
  +      if (jjtc000) {
  +        jjtree.clearNodeScope(jjtn000);
  +        jjtc000 = false;
  +      } else {
  +        jjtree.popNode();
  +      }
  +      if (jjte000 instanceof RuntimeException) {
  +        {if (true) throw (RuntimeException)jjte000;}
  +      }
  +      if (jjte000 instanceof ParseException) {
  +        {if (true) throw (ParseException)jjte000;}
  +      }
  +      {if (true) throw (Error)jjte000;}
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +  }
  +
   /**
    * This method corresponds to an #include
    * directive in a Velocity template. The
  @@ -1020,7 +1071,7 @@
             ConditionalOrExpression();
             break;
           default:
  -          jj_la1[21] = jj_gen;
  +          jj_la1[22] = jj_gen;
             jj_consume_token(-1);
             throw new ParseException();
           }
  @@ -1078,15 +1129,15 @@
   
     final public void ConditionalOrExpression() throws ParseException {
       ConditionalAndExpression();
  -    label_10:
  +    label_11:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_OR:
           ;
           break;
         default:
  -        jj_la1[22] = jj_gen;
  -        break label_10;
  +        jj_la1[23] = jj_gen;
  +        break label_11;
         }
         jj_consume_token(LOGICAL_OR);
                      ASTOrNode jjtn001 = new ASTOrNode(this, JJTORNODE);
  @@ -1118,15 +1169,15 @@
   
     final public void ConditionalAndExpression() throws ParseException {
       EqualityExpression();
  -    label_11:
  +    label_12:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_AND:
           ;
           break;
         default:
  -        jj_la1[23] = jj_gen;
  -        break label_11;
  +        jj_la1[24] = jj_gen;
  +        break label_12;
         }
         jj_consume_token(LOGICAL_AND);
                        ASTAndNode jjtn001 = new ASTAndNode(this, JJTANDNODE);
  @@ -1158,7 +1209,7 @@
   
     final public void EqualityExpression() throws ParseException {
       RelationalExpression();
  -    label_12:
  +    label_13:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_EQUALS:
  @@ -1166,8 +1217,8 @@
           ;
           break;
         default:
  -        jj_la1[24] = jj_gen;
  -        break label_12;
  +        jj_la1[25] = jj_gen;
  +        break label_13;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_EQUALS:
  @@ -1225,7 +1276,7 @@
           }
           break;
         default:
  -        jj_la1[25] = jj_gen;
  +        jj_la1[26] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1234,7 +1285,7 @@
   
     final public void RelationalExpression() throws ParseException {
       AdditiveExpression();
  -    label_13:
  +    label_14:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_LT:
  @@ -1244,8 +1295,8 @@
           ;
           break;
         default:
  -        jj_la1[26] = jj_gen;
  -        break label_13;
  +        jj_la1[27] = jj_gen;
  +        break label_14;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case LOGICAL_LT:
  @@ -1357,7 +1408,7 @@
           }
           break;
         default:
  -        jj_la1[27] = jj_gen;
  +        jj_la1[28] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1366,7 +1417,7 @@
   
     final public void AdditiveExpression() throws ParseException {
       MultiplicativeExpression();
  -    label_14:
  +    label_15:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case MINUS:
  @@ -1374,8 +1425,8 @@
           ;
           break;
         default:
  -        jj_la1[28] = jj_gen;
  -        break label_14;
  +        jj_la1[29] = jj_gen;
  +        break label_15;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case PLUS:
  @@ -1433,7 +1484,7 @@
           }
           break;
         default:
  -        jj_la1[29] = jj_gen;
  +        jj_la1[30] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1442,7 +1493,7 @@
   
     final public void MultiplicativeExpression() throws ParseException {
       UnaryExpression();
  -    label_15:
  +    label_16:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case MULTIPLY:
  @@ -1451,8 +1502,8 @@
           ;
           break;
         default:
  -        jj_la1[30] = jj_gen;
  -        break label_15;
  +        jj_la1[31] = jj_gen;
  +        break label_16;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case MULTIPLY:
  @@ -1537,7 +1588,7 @@
           }
           break;
         default:
  -        jj_la1[31] = jj_gen;
  +        jj_la1[32] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
  @@ -1585,7 +1636,7 @@
         PrimaryExpression();
         break;
       default:
  -      jj_la1[32] = jj_gen;
  +      jj_la1[33] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
  @@ -1619,7 +1670,7 @@
         jj_consume_token(RPAREN);
         break;
       default:
  -      jj_la1[33] = jj_gen;
  +      jj_la1[34] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
  @@ -1646,54 +1697,6 @@
       return retval;
     }
   
  -  final private boolean jj_3R_34() {
  -    if (jj_scan_token(FALSE)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3_3() {
  -    if (jj_3R_18()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(EQUALS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_48() {
  -    if (jj_3R_50()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_51()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_19() {
  -    if (jj_scan_token(IDENTIFIER)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_33() {
  -    if (jj_scan_token(TRUE)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_47() {
  -    if (jj_3R_18()) 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_35()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
     final private boolean jj_3_1() {
       if (jj_scan_token(DOT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  @@ -1701,54 +1704,37 @@
       xsp = jj_scanpos;
       if (jj_3_2()) {
       jj_scanpos = xsp;
  -    if (jj_3R_16()) return true;
  +    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;
       return false;
     }
  -
  -  final private boolean jj_3R_45() {
  -    if (jj_3R_48()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
   
  -  final private boolean jj_3R_42() {
  +  final private boolean jj_3R_43() {
       if (jj_scan_token(LCURLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  -
  -  final private boolean jj_3R_35() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_44()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_45()) 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_44() {
  -    if (jj_3R_47()) return true;
  +  final private boolean jj_3R_42() {
  +    if (jj_scan_token(SHORTHAND)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_41() {
  -    if (jj_scan_token(SHORTHAND)) return true;
  +  final private boolean jj_3R_30() {
  +    if (jj_scan_token(STRING_LITERAL)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_31() {
  +  final private boolean jj_3R_32() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_41()) jj_scanpos = xsp;
  +    if (jj_3R_42()) jj_scanpos = xsp;
       else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       xsp = jj_scanpos;
  -    if (jj_3R_42()) jj_scanpos = xsp;
  +    if (jj_3R_43()) jj_scanpos = xsp;
       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;
  @@ -1760,127 +1746,89 @@
       return false;
     }
   
  -  final private boolean jj_3R_46() {
  +  final private boolean jj_3R_47() {
       if (jj_scan_token(COMMA)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_28()) return true;
  +    if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_17() {
  -    if (jj_3R_19()) return true;
  +  final private boolean jj_3R_31() {
  +    if (jj_scan_token(NUMBER_LITERAL)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_18() {
  +    if (jj_3R_20()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       if (jj_scan_token(LPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_20()) jj_scanpos = xsp;
  +    if (jj_3R_21()) jj_scanpos = xsp;
       else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       if (jj_scan_token(RPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_29() {
  -    if (jj_scan_token(STRING_LITERAL)) return true;
  +  final private boolean jj_3R_28() {
  +    if (jj_scan_token(LPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_30() {
  -    if (jj_scan_token(NUMBER_LITERAL)) return true;
  +    if (jj_3R_36()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_scan_token(RPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_40() {
  -    if (jj_3R_31()) return true;
  +  final private boolean jj_3R_27() {
  +    if (jj_3R_35()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_39() {
  +  final private boolean jj_3R_26() {
       if (jj_3R_34()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_43() {
  -    if (jj_3R_28()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_46()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_27() {
  -    if (jj_scan_token(LPAREN)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_35()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(RPAREN)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_38() {
  +  final private boolean jj_3R_25() {
       if (jj_3R_33()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  -
  -  final private boolean jj_3R_26() {
  -    if (jj_3R_34()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
   
  -  final private boolean jj_3R_37() {
  +  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_25() {
  -    if (jj_3R_33()) return true;
  +  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_28() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_36()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_37()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_38()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_39()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_40()) return true;
  +  final private boolean jj_3R_40() {
  +    if (jj_3R_35()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_36() {
  +  final private boolean jj_3R_44() {
       if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_24() {
  -    if (jj_3R_32()) 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_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  @@ -1890,23 +1838,21 @@
       return false;
     }
   
  -  final private boolean jj_3R_22() {
  -    if (jj_3R_30()) return true;
  +  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_21() {
  -    if (jj_3R_29()) return true;
  +  final private boolean jj_3R_22() {
  +    if (jj_3R_30()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_18() {
  +  final private boolean jj_3R_19() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_21()) {
  -    jj_scanpos = xsp;
       if (jj_3R_22()) {
       jj_scanpos = xsp;
       if (jj_3R_23()) {
  @@ -1917,7 +1863,9 @@
       jj_scanpos = xsp;
       if (jj_3R_26()) {
       jj_scanpos = xsp;
  -    if (jj_3R_27()) return true;
  +    if (jj_3R_27()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_28()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  @@ -1928,190 +1876,212 @@
       return false;
     }
   
  -  final private boolean jj_3R_72() {
  -    if (jj_3R_18()) return true;
  +  final private boolean jj_3R_38() {
  +    if (jj_3R_33()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_75() {
  +  final private boolean jj_3R_29() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_37()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_38()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_39()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_40()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_41()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_37() {
  +    if (jj_3R_30()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_73() {
  +    if (jj_3R_19()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_76() {
       if (jj_scan_token(MODULUS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_67()) return true;
  +    if (jj_3R_68()) 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(LOGICAL_NOT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_67()) return true;
  +    if (jj_3R_68()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_67() {
  +  final private boolean jj_3R_68() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_71()) {
  +    if (jj_3R_72()) {
       jj_scanpos = xsp;
  -    if (jj_3R_72()) return true;
  +    if (jj_3R_73()) 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_74() {
  +  final private boolean jj_3R_75() {
       if (jj_scan_token(DIVIDE)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_67()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_32() {
  -    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_43()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(RBRACKET)) return true;
  +    if (jj_3R_68()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_73() {
  +  final private boolean jj_3R_74() {
       if (jj_scan_token(MULTIPLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_67()) return true;
  +    if (jj_3R_68()) 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_73()) {
  -    jj_scanpos = xsp;
       if (jj_3R_74()) {
       jj_scanpos = xsp;
  -    if (jj_3R_75()) return true;
  +    if (jj_3R_75()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_76()) 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_49() {
  +  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;
  +    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_70() {
  +  final private boolean jj_3R_71() {
       if (jj_scan_token(MINUS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_61()) return true;
  +    if (jj_3R_62()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_61() {
  -    if (jj_3R_67()) return true;
  +  final private boolean jj_3R_62() {
  +    if (jj_3R_68()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_68()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_69()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_69() {
  +  final private boolean jj_3R_70() {
       if (jj_scan_token(PLUS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_61()) return true;
  +    if (jj_3R_62()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_62() {
  +  final private boolean jj_3R_63() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_69()) {
  +    if (jj_3R_70()) {
       jj_scanpos = xsp;
  -    if (jj_3R_70()) return true;
  +    if (jj_3R_71()) 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_16() {
  -    if (jj_3R_19()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_49()) jj_scanpos = xsp;
  -    else 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_GE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_57()) return true;
  +    if (jj_3R_58()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_57() {
  -    if (jj_3R_61()) return true;
  +  final private boolean jj_3R_58() {
  +    if (jj_3R_62()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_62()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_63()) { jj_scanpos = xsp; break; }
         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_LE)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_57()) return true;
  +    if (jj_3R_58()) 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_GT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_57()) return true;
  +    if (jj_3R_58()) 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() {
       if (jj_scan_token(LOGICAL_LT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_57()) return true;
  +    if (jj_3R_58()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_58() {
  +  final private boolean jj_3R_59() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_63()) {
  -    jj_scanpos = xsp;
       if (jj_3R_64()) {
       jj_scanpos = xsp;
       if (jj_3R_65()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_66()) {
       jj_scanpos = xsp;
  -    if (jj_3R_66()) return true;
  +    if (jj_3R_67()) 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;
  @@ -2119,107 +2089,188 @@
       return false;
     }
   
  -  final private boolean jj_3R_60() {
  +  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() {
       if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_55()) return true;
  +    if (jj_3R_56()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_55() {
  -    if (jj_3R_57()) return true;
  +  final private boolean jj_3R_56() {
  +    if (jj_3R_58()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_58()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_59()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_59() {
  +  final private boolean jj_3R_60() {
       if (jj_scan_token(LOGICAL_EQUALS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_55()) return true;
  +    if (jj_3R_56()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_56() {
  +  final private boolean jj_3R_57() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_59()) {
  +    if (jj_3R_60()) {
       jj_scanpos = xsp;
  -    if (jj_3R_60()) return true;
  +    if (jj_3R_61()) 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_54() {
  +  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_28()) return true;
  +    if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_52() {
  -    if (jj_3R_55()) return true;
  +  final private boolean jj_3R_53() {
  +    if (jj_3R_56()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_56()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_57()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  +  final private boolean jj_3R_54() {
  +    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_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
     final private boolean jj_3_2() {
  -    if (jj_3R_17()) return true;
  +    if (jj_3R_18()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_53() {
  -    if (jj_scan_token(LOGICAL_AND)) return true;
  +  final private boolean jj_3R_51() {
  +    if (jj_3R_53()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_52()) return true;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      if (jj_3R_54()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_52() {
  +    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_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_50() {
  -    if (jj_3R_52()) return true;
  +  final private boolean jj_3_3() {
  +    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;
  +    return false;
  +  }
  +
  +  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_53()) { 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_20() {
  -    if (jj_3R_28()) return true;
  +  final private boolean jj_3R_49() {
  +    if (jj_3R_51()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
       while (true) {
         xsp = jj_scanpos;
  -      if (jj_3R_54()) { jj_scanpos = xsp; break; }
  +      if (jj_3R_52()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_51() {
  -    if (jj_scan_token(LOGICAL_OR)) 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;
  -    if (jj_3R_50()) return true;
  +    return false;
  +  }
  +
  +  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;
  +  }
  +
  +  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;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_34() {
  +    if (jj_scan_token(TRUE)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_46() {
  +    if (jj_3R_49()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_36() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_45()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_46()) 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;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
  @@ -2233,9 +2284,9 @@
     public boolean lookingAhead = false;
     private boolean jj_semLA;
     private int jj_gen;
  -  final private int[] jj_la1 = new int[34];
  -  final private int[] jj_la1_0 = 
{0x70006,0x70006,0x70000,0x6a8,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 = 
{0x78a980,0x78a980,0x0,0x68a010,0x78a980,0x0,0x680000,0x680000,0x0,0x680000,0x200000,0x400000,0x800000,0x80000,0x102000,0x78a980,0x200,0x200,0x400,0x78a980,0x78a980,0x682010,0x0,0x0,0xc,0xc,0x3,0x3,0x0,0x0,0x0,0x0,0x682010,0x682000,};
  +  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 JJCalls[] jj_2_rtns = new JJCalls[3];
     private boolean jj_rescan = false;
     private int jj_gc = 0;
  @@ -2246,7 +2297,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 34; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2257,7 +2308,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 34; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2267,7 +2318,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 34; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2278,7 +2329,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 34; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2287,7 +2338,7 @@
       token = new Token();
       jj_ntk = -1;
       jj_gen = 0;
  -    for (int i = 0; i < 34; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2297,7 +2348,7 @@
       jj_ntk = -1;
       jjtree.reset();
       jj_gen = 0;
  -    for (int i = 0; i < 34; i++) jj_la1[i] = -1;
  +    for (int i = 0; i < 35; i++) jj_la1[i] = -1;
       for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
     }
   
  @@ -2404,15 +2455,15 @@
   
     final public ParseException generateParseException() {
       jj_expentries.removeAllElements();
  -    boolean[] la1tokens = new boolean[57];
  -    for (int i = 0; i < 57; i++) {
  +    boolean[] la1tokens = new boolean[58];
  +    for (int i = 0; i < 58; i++) {
         la1tokens[i] = false;
       }
       if (jj_kind >= 0) {
         la1tokens[jj_kind] = true;
         jj_kind = -1;
       }
  -    for (int i = 0; i < 34; i++) {
  +    for (int i = 0; i < 35; i++) {
         if (jj_la1[i] == jj_gen) {
           for (int j = 0; j < 32; j++) {
             if ((jj_la1_0[i] & (1<<j)) != 0) {
  @@ -2424,7 +2475,7 @@
           }
         }
       }
  -    for (int i = 0; i < 57; i++) {
  +    for (int i = 0; i < 58; i++) {
         if (la1tokens[i]) {
           jj_expentry = new int[1];
           jj_expentry[0] = i;
  
  
  
  1.3       +81 -41    
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Parser.jj 2000/09/30 22:58:14     1.2
  +++ Parser.jj 2000/10/03 17:03:14     1.3
  @@ -75,7 +75,6 @@
       
       DEBUG_PARSER=false;
       DEBUG_TOKEN_MANAGER=false;
  -
   }    
   
   PARSER_BEGIN(Parser)
  @@ -97,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.2 2000/09/30 22:58:14 jvanzyl Exp $ 
  + * @version $Id: Parser.jj,v 1.3 2000/10/03 17:03:14 jvanzyl Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
   {/*@bgen(jjtree)*/
  @@ -188,8 +187,9 @@
       private int rparen = 0;
   
       private boolean inReference;
  -    private boolean inDirective;
  +    public boolean inDirective;
       private boolean inComment;
  +    private boolean inSet;
   
       Stack streams = new Stack();
       Stack states = new Stack();
  @@ -279,12 +279,18 @@
   {
       <LPAREN: "(" > 
       { 
  -        lparen++; 
  +        lparen++;
       }
   
   |   <RPAREN: ")" > 
       {
           rparen++;
  +    
  +        if (lparen == rparen)
  +        {
  +            SwitchTo(DEFAULT);
  +            inDirective = false;
  +        }            
       }    
   
   |   <LBRACKET: "[">
  @@ -298,7 +304,7 @@
               pushFile(matchedToken.image);
           }
           incMode = false;
  -    } 
  +    }
   
   |   <COMMA: ",">
   |   <TRUE: "true">
  @@ -385,14 +391,22 @@
   {
       " "
   |   "\t"
  +//|   "\n"
  +//|   "\r"
   }
   
  -<DIRECTIVE,REFERENCE>
  +<DIRECTIVE>
   SPECIAL_TOKEN :
   {
  -    <NEWLINE: ("\r\n" | "\r" | "\n") > 
  -    { inDirective = false; }
  -    : DEFAULT
  +    <NEWLINE: "\n" | "\r" | "\r\n" >
  +    {
  +        if (inSet)
  +        {
  +            SwitchTo(DEFAULT);
  +            inSet = false;
  +            inDirective = false;
  +        }
  +    }        
   }    
   
   <DIRECTIVE>
  @@ -418,8 +432,6 @@
   <DIRECTIVE> 
   TOKEN :
   {
  -//    <TRUE: "true">
  -//|   <FALSE: "false">
       <END: "end"> 
       { 
           inDirective = false; 
  @@ -436,7 +448,8 @@
   |   <ELSE_DIRECTIVE: "else"> 
       : DEFAULT
   
  -//|   <SET_DIRECTIVE: "set" >
  +|   <SET_DIRECTIVE: "set" >
  +    { inSet = true; }
   
   |   <STOP_DIRECTIVE: "stop">
       {
  @@ -558,6 +571,7 @@
   |   StopStatement()
   |   Reference()
   |   Comment()
  +|   SetDirective()
   |   Directive()
   }
   
  @@ -642,31 +656,31 @@
   /*@egen*/
   }
   
  -JAVACODE
  -void DirectiveArgs(int args)
  -{/*@bgen(jjtree) DirectiveArgs */
  - ASTDirectiveArgs jjtn000 = new ASTDirectiveArgs(this, JJTDIRECTIVEARGS);
  - boolean jjtc000 = true;
  - jjtree.openNodeScope(jjtn000);
  - try {
  +void Word() : {/*@bgen(jjtree) Word */
  +  ASTWord jjtn000 = new ASTWord(this, JJTWORD);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
  +{/*@bgen(jjtree) Word */
  +    try {
   /*@egen*/
  -    for (int i = 0; i < args; i++)
  -    {
  -        DirectiveArg();
  -    }/*@bgen(jjtree)*/
  - } finally {
  -   if (jjtc000) {
  -     jjtree.closeNodeScope(jjtn000, true);
  -   }
  - }
  -/*@egen*/ 
  -}
  +    <WORD>/*@bgen(jjtree)*/
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +/*@egen*/
  +}    
   
   void DirectiveArg()       : {}
   {
  -    Expression() 
  -|   <WORD>
  -}    
  +    Reference()
  +|   Word()  
  +|   StringLiteral()
  +|   NumberLiteral()
  +|   ObjectArray()
  +}
   
   SimpleNode Directive() : 
   {/*@bgen(jjtree) Directive */
  @@ -675,7 +689,6 @@
       jjtree.openNodeScope(jjtn000);
   /*@egen*/
       Token t;
  -    int args;
       Directive d;
   }
   {/*@bgen(jjtree) Directive */
  @@ -688,19 +701,15 @@
           if (d == null)
           {
               token_source.SwitchTo(DEFAULT);
  +            token_source.inDirective = false;
               return jjtn000;
           }            
  -        
  -        args = d.getArgs();
       }
   
  -    DirectiveArgs(args)
  +    <LPAREN> (DirectiveArg())+ <RPAREN>
       {
           if (d.getType() == Directive.LINE)
  -        {
               return jjtn000;
  -        }
  -        token_source.SwitchTo(DEFAULT);
       }/*@bgen(jjtree) Block */
       {
         ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
  @@ -759,7 +768,7 @@
           jjtree.closeNodeScope(jjtn000, true);
         }
       }
  -/*@egen*/        
  +/*@egen*/ 
   }    
   
   void ObjectArray() : {/*@bgen(jjtree) ObjectArray */
  @@ -1135,6 +1144,37 @@
       }
   /*@egen*/
   }
  +
  +void SetDirective() : {/*@bgen(jjtree) SetDirective */
  +  ASTSetDirective jjtn000 = new ASTSetDirective(this, JJTSETDIRECTIVE);
  +  boolean jjtc000 = true;
  +  jjtree.openNodeScope(jjtn000);
  +/*@egen*/}
  +{/*@bgen(jjtree) SetDirective */
  +    try {
  +/*@egen*/
  +    <SET_DIRECTIVE> Expression()/*@bgen(jjtree)*/
  +    } catch (Throwable jjte000) {
  +      if (jjtc000) {
  +        jjtree.clearNodeScope(jjtn000);
  +        jjtc000 = false;
  +      } else {
  +        jjtree.popNode();
  +      }
  +      if (jjte000 instanceof RuntimeException) {
  +        throw (RuntimeException)jjte000;
  +      }
  +      if (jjte000 instanceof ParseException) {
  +        throw (ParseException)jjte000;
  +      }
  +      throw (Error)jjte000;
  +    } finally {
  +      if (jjtc000) {
  +        jjtree.closeNodeScope(jjtn000, true);
  +      }
  +    }
  +/*@egen*/
  +}    
   
   /**
    * This method corresponds to an #include
  
  
  
  1.3       +43 -30    
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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Parser.jjt        2000/09/30 22:58:14     1.2
  +++ Parser.jjt        2000/10/03 17:03:15     1.3
  @@ -99,7 +99,6 @@
       
       DEBUG_PARSER=false;
       DEBUG_TOKEN_MANAGER=false;
  -
   }    
   
   PARSER_BEGIN(Parser)
  @@ -121,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.2 2000/09/30 22:58:14 jvanzyl Exp $ 
  + * @version $Id: Parser.jjt,v 1.3 2000/10/03 17:03:15 jvanzyl Exp $ 
   */
   public class Parser
   {
  @@ -209,8 +208,9 @@
       private int rparen = 0;
   
       private boolean inReference;
  -    private boolean inDirective;
  +    public boolean inDirective;
       private boolean inComment;
  +    private boolean inSet;
   
       Stack streams = new Stack();
       Stack states = new Stack();
  @@ -300,12 +300,18 @@
   {
       <LPAREN: "(" > 
       { 
  -        lparen++; 
  +        lparen++;
       }
   
   |   <RPAREN: ")" > 
       {
           rparen++;
  +    
  +        if (lparen == rparen)
  +        {
  +            SwitchTo(DEFAULT);
  +            inDirective = false;
  +        }            
       }    
   
   |   <LBRACKET: "[">
  @@ -319,7 +325,7 @@
               pushFile(matchedToken.image);
           }
           incMode = false;
  -    } 
  +    }
   
   |   <COMMA: ",">
   |   <TRUE: "true">
  @@ -406,14 +412,22 @@
   {
       " "
   |   "\t"
  +//|   "\n"
  +//|   "\r"
   }
   
  -<DIRECTIVE,REFERENCE>
  +<DIRECTIVE>
   SPECIAL_TOKEN :
   {
  -    <NEWLINE: ("\r\n" | "\r" | "\n") > 
  -    { inDirective = false; }
  -    : DEFAULT
  +    <NEWLINE: "\n" | "\r" | "\r\n" >
  +    {
  +        if (inSet)
  +        {
  +            SwitchTo(DEFAULT);
  +            inSet = false;
  +            inDirective = false;
  +        }
  +    }        
   }    
   
   <DIRECTIVE>
  @@ -439,8 +453,6 @@
   <DIRECTIVE> 
   TOKEN :
   {
  -//    <TRUE: "true">
  -//|   <FALSE: "false">
       <END: "end"> 
       { 
           inDirective = false; 
  @@ -457,7 +469,8 @@
   |   <ELSE_DIRECTIVE: "else"> 
       : DEFAULT
   
  -//|   <SET_DIRECTIVE: "set" >
  +|   <SET_DIRECTIVE: "set" >
  +    { inSet = true; }
   
   |   <STOP_DIRECTIVE: "stop">
       {
  @@ -548,6 +561,7 @@
   |   StopStatement()
   |   Reference()
   |   Comment()
  +|   SetDirective()
   |   Directive()
   }
   
  @@ -584,25 +598,23 @@
       <IDENTIFIER>
   }
   
  -JAVACODE
  -void DirectiveArgs(int args)
  +void Word() : {}
   {
  -    for (int i = 0; i < args; i++)
  -    {
  -        DirectiveArg();
  -    } 
  -}
  +    <WORD>
  +}    
   
   void DirectiveArg() #void : {}
   {
  -    Expression() 
  -|   <WORD>
  -}    
  +    Reference()
  +|   Word()  
  +|   StringLiteral()
  +|   NumberLiteral()
  +|   ObjectArray()
  +}
   
   SimpleNode Directive() : 
   {
       Token t;
  -    int args;
       Directive d;
   }
   {
  @@ -613,26 +625,22 @@
           if (d == null)
           {
               token_source.SwitchTo(DEFAULT);
  +            token_source.inDirective = false;
               return jjtThis;
           }            
  -        
  -        args = d.getArgs();
       }
   
  -    DirectiveArgs(args)
  +    <LPAREN> (DirectiveArg())+ <RPAREN>
       {
           if (d.getType() == Directive.LINE)
  -        {
               return jjtThis;
  -        }
  -        token_source.SwitchTo(DEFAULT);
       }
       
       ( Statement() )+ #Block 
       <END>
       {
           return jjtThis;
  -    }        
  +    } 
   }    
   
   void ObjectArray() : {}
  @@ -730,6 +738,11 @@
       <LPAREN> Expression() <RPAREN>
       ( Statement() )+ #Block
   }
  +
  +void SetDirective() : {}
  +{
  +    <SET_DIRECTIVE> Expression()
  +}    
   
   /**
    * This method corresponds to an #include
  
  
  
  1.2       +16 -14    
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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ParserConstants.java      2000/09/30 17:04:28     1.1
  +++ ParserConstants.java      2000/10/03 17:03:15     1.2
  @@ -40,20 +40,21 @@
     int IF_DIRECTIVE = 40;
     int ELSEIF_DIRECTIVE = 41;
     int ELSE_DIRECTIVE = 42;
  -  int STOP_DIRECTIVE = 43;
  -  int DIGIT = 44;
  -  int NUMBER_LITERAL = 45;
  -  int LETTER = 46;
  -  int WORD = 47;
  -  int ALPHA_CHAR = 48;
  -  int ALPHANUM_CHAR = 49;
  -  int IDENTIFIER_CHAR = 50;
  -  int IDENTIFIER = 51;
  -  int DOT = 52;
  -  int SHORTHAND = 53;
  -  int LCURLY = 54;
  -  int RCURLY = 55;
  -  int REFERENCE_TERMINATOR = 56;
  +  int SET_DIRECTIVE = 43;
  +  int STOP_DIRECTIVE = 44;
  +  int DIGIT = 45;
  +  int NUMBER_LITERAL = 46;
  +  int LETTER = 47;
  +  int WORD = 48;
  +  int ALPHA_CHAR = 49;
  +  int ALPHANUM_CHAR = 50;
  +  int IDENTIFIER_CHAR = 51;
  +  int IDENTIFIER = 52;
  +  int DOT = 53;
  +  int SHORTHAND = 54;
  +  int LCURLY = 55;
  +  int RCURLY = 56;
  +  int REFERENCE_TERMINATOR = 57;
   
     int DEFAULT = 0;
     int REFERENCE = 1;
  @@ -106,6 +107,7 @@
       "\"if\"",
       "\"elseif\"",
       "\"else\"",
  +    "\"set\"",
       "\"stop\"",
       "<DIGIT>",
       "<NUMBER_LITERAL>",
  
  
  
  1.2       +96 -90    
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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ParserTokenManager.java   2000/09/30 17:04:27     1.1
  +++ ParserTokenManager.java   2000/10/03 17:03:16     1.2
  @@ -13,8 +13,9 @@
       private int rparen = 0;
   
       private boolean inReference;
  -    private boolean inDirective;
  +    public boolean inDirective;
       private boolean inComment;
  +    private boolean inSet;
   
       Stack streams = new Stack();
       Stack states = new Stack();
  @@ -630,32 +631,32 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0xfc000000600L) != 0L)
  +         if ((active0 & 0x1fc000000600L) != 0L)
            {
  -            jjmatchedKind = 47;
  +            jjmatchedKind = 48;
               return 11;
            }
            if ((active0 & 0xd000L) != 0L)
               return 5;
            return -1;
         case 1:
  -         if ((active0 & 0x10000000000L) != 0L)
  -            return 11;
  -         if ((active0 & 0x4000L) != 0L)
  -            return 3;
  -         if ((active0 & 0xec000000600L) != 0L)
  +         if ((active0 & 0x1ec000000600L) != 0L)
            {
  -            jjmatchedKind = 47;
  +            jjmatchedKind = 48;
               jjmatchedPos = 1;
               return 11;
            }
  +         if ((active0 & 0x10000000000L) != 0L)
  +            return 11;
  +         if ((active0 & 0x4000L) != 0L)
  +            return 3;
            return -1;
         case 2:
  -         if ((active0 & 0x4000000000L) != 0L)
  +         if ((active0 & 0x84000000000L) != 0L)
               return 11;
  -         if ((active0 & 0xe8000000600L) != 0L)
  +         if ((active0 & 0x168000000600L) != 0L)
            {
  -            jjmatchedKind = 47;
  +            jjmatchedKind = 48;
               jjmatchedPos = 2;
               return 11;
            }
  @@ -665,18 +666,18 @@
            {
               if (jjmatchedPos != 3)
               {
  -               jjmatchedKind = 47;
  +               jjmatchedKind = 48;
                  jjmatchedPos = 3;
               }
               return 11;
            }
  -         if ((active0 & 0xe0000000200L) != 0L)
  +         if ((active0 & 0x160000000200L) != 0L)
               return 11;
            return -1;
         case 4:
            if ((active0 & 0x28000000000L) != 0L)
            {
  -            jjmatchedKind = 47;
  +            jjmatchedKind = 48;
               jjmatchedPos = 4;
               return 11;
            }
  @@ -688,7 +689,7 @@
               return 11;
            if ((active0 & 0x8000000000L) != 0L)
            {
  -            jjmatchedKind = 47;
  +            jjmatchedKind = 48;
               jjmatchedPos = 5;
               return 11;
            }
  @@ -759,7 +760,7 @@
         case 105:
            return jjMoveStringLiteralDfa1_2(0x18000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa1_2(0x80000000000L);
  +         return jjMoveStringLiteralDfa1_2(0x180000000000L);
         case 116:
            return jjMoveStringLiteralDfa1_2(0x200L);
         case 124:
  @@ -801,6 +802,8 @@
            break;
         case 97:
            return jjMoveStringLiteralDfa2_2(active0, 0x400L);
  +      case 101:
  +         return jjMoveStringLiteralDfa2_2(active0, 0x80000000000L);
         case 102:
            if ((active0 & 0x10000000000L) != 0L)
               return jjStartNfaWithStates_2(1, 40, 11);
  @@ -812,7 +815,7 @@
         case 114:
            return jjMoveStringLiteralDfa2_2(active0, 0x200L);
         case 116:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x80000000000L);
  +         return jjMoveStringLiteralDfa2_2(active0, 0x100000000000L);
         case 124:
            if ((active0 & 0x20000000L) != 0L)
               return jjStopAtPos(1, 29);
  @@ -842,9 +845,13 @@
         case 108:
            return jjMoveStringLiteralDfa3_2(active0, 0x400L);
         case 111:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x80000000000L);
  +         return jjMoveStringLiteralDfa3_2(active0, 0x100000000000L);
         case 115:
            return jjMoveStringLiteralDfa3_2(active0, 0x60000000000L);
  +      case 116:
  +         if ((active0 & 0x80000000000L) != 0L)
  +            return jjStartNfaWithStates_2(2, 43, 11);
  +         break;
         case 117:
            return jjMoveStringLiteralDfa3_2(active0, 0x200L);
         default :
  @@ -875,8 +882,8 @@
         case 108:
            return jjMoveStringLiteralDfa4_2(active0, 0x8000000000L);
         case 112:
  -         if ((active0 & 0x80000000000L) != 0L)
  -            return jjStartNfaWithStates_2(3, 43, 11);
  +         if ((active0 & 0x100000000000L) != 0L)
  +            return jjStartNfaWithStates_2(3, 44, 11);
            break;
         case 115:
            return jjMoveStringLiteralDfa4_2(active0, 0x400L);
  @@ -973,8 +980,8 @@
                  case 0:
                     if ((0x3ff000000000000L & l) != 0L)
                     {
  -                     if (kind > 45)
  -                        kind = 45;
  +                     if (kind > 46)
  +                        kind = 46;
                        jjCheckNAdd(10);
                     }
                     else if ((0x2400L & l) != 0L)
  @@ -987,7 +994,7 @@
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(1, 2);
                     if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 7;
  +                     jjstateSet[jjnewStateCnt++] = 8;
                     break;
                  case 1:
                     if ((0xfffffffbffffdbffL & l) != 0L)
  @@ -1014,22 +1021,22 @@
                        jjstateSet[jjnewStateCnt++] = 5;
                     break;
                  case 7:
  -                  if (curChar == 10 && kind > 22)
  +                  if ((0x2400L & l) != 0L && kind > 22)
                        kind = 22;
                     break;
                  case 8:
  -                  if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 7;
  +                  if (curChar == 10 && kind > 22)
  +                     kind = 22;
                     break;
                  case 9:
  -                  if ((0x2400L & l) != 0L && kind > 22)
  -                     kind = 22;
  +                  if (curChar == 13)
  +                     jjstateSet[jjnewStateCnt++] = 8;
                     break;
                  case 10:
                     if ((0x3ff000000000000L & l) == 0L)
                        break;
  -                  if (kind > 45)
  -                     kind = 45;
  +                  if (kind > 46)
  +                     kind = 46;
                     jjCheckNAdd(10);
                     break;
                  default : break;
  @@ -1047,8 +1054,8 @@
                  case 11:
                     if ((0x7fffffe00000000L & l) == 0L)
                        break;
  -                  if (kind > 47)
  -                     kind = 47;
  +                  if (kind > 48)
  +                     kind = 48;
                     jjCheckNAdd(11);
                     break;
                  case 1:
  @@ -1247,8 +1254,8 @@
         case 0:
            if ((active0 & 0x600L) != 0L)
            {
  -            jjmatchedKind = 51;
  -            return 11;
  +            jjmatchedKind = 52;
  +            return 8;
            }
            if ((active0 & 0xd000L) != 0L)
               return 5;
  @@ -1256,9 +1263,9 @@
         case 1:
            if ((active0 & 0x600L) != 0L)
            {
  -            jjmatchedKind = 51;
  +            jjmatchedKind = 52;
               jjmatchedPos = 1;
  -            return 11;
  +            return 8;
            }
            if ((active0 & 0x4000L) != 0L)
               return 3;
  @@ -1266,20 +1273,20 @@
         case 2:
            if ((active0 & 0x600L) != 0L)
            {
  -            jjmatchedKind = 51;
  +            jjmatchedKind = 52;
               jjmatchedPos = 2;
  -            return 11;
  +            return 8;
            }
            return -1;
         case 3:
            if ((active0 & 0x400L) != 0L)
            {
  -            jjmatchedKind = 51;
  +            jjmatchedKind = 52;
               jjmatchedPos = 3;
  -            return 11;
  +            return 8;
            }
            if ((active0 & 0x200L) != 0L)
  -            return 11;
  +            return 8;
            return -1;
         default :
            return -1;
  @@ -1302,7 +1309,7 @@
      switch(curChar)
      {
         case 33:
  -         return jjStopAtPos(0, 53);
  +         return jjStopAtPos(0, 54);
         case 35:
            jjmatchedKind = 15;
            return jjMoveStringLiteralDfa1_1(0x5000L);
  @@ -1315,7 +1322,7 @@
         case 44:
            return jjStopAtPos(0, 8);
         case 46:
  -         return jjStopAtPos(0, 52);
  +         return jjStopAtPos(0, 53);
         case 91:
            return jjStopAtPos(0, 5);
         case 93:
  @@ -1325,9 +1332,9 @@
         case 116:
            return jjMoveStringLiteralDfa1_1(0x200L);
         case 123:
  -         return jjStopAtPos(0, 54);
  -      case 125:
            return jjStopAtPos(0, 55);
  +      case 125:
  +         return jjStopAtPos(0, 56);
         default :
            return jjMoveNfa_1(0, 0);
      }
  @@ -1391,7 +1398,7 @@
      {
         case 101:
            if ((active0 & 0x200L) != 0L)
  -            return jjStartNfaWithStates_1(3, 9, 11);
  +            return jjStartNfaWithStates_1(3, 9, 8);
            break;
         case 115:
            return jjMoveStringLiteralDfa4_1(active0, 0x400L);
  @@ -1413,7 +1420,7 @@
      {
         case 101:
            if ((active0 & 0x400L) != 0L)
  -            return jjStartNfaWithStates_1(4, 10, 11);
  +            return jjStartNfaWithStates_1(4, 10, 8);
            break;
         default :
            break;
  @@ -1424,7 +1431,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 12;
  +   jjnewStateCnt = 9;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1440,17 +1447,10 @@
               switch(jjstateSet[--i])
               {
                  case 0:
  -                  if ((0x2400L & l) != 0L)
  -                  {
  -                     if (kind > 22)
  -                        kind = 22;
  -                  }
  -                  else if (curChar == 35)
  +                  if (curChar == 35)
                        jjstateSet[jjnewStateCnt++] = 5;
                     else if (curChar == 34)
                        jjCheckNAddTwoStates(1, 2);
  -                  if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 7;
                     break;
                  case 1:
                     if ((0xfffffffbffffdbffL & l) != 0L)
  @@ -1476,24 +1476,12 @@
                     if (curChar == 35)
                        jjstateSet[jjnewStateCnt++] = 5;
                     break;
  -               case 7:
  -                  if (curChar == 10 && kind > 22)
  -                     kind = 22;
  -                  break;
                  case 8:
  -                  if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 7;
  -                  break;
  -               case 9:
  -                  if ((0x2400L & l) != 0L && kind > 22)
  -                     kind = 22;
  -                  break;
  -               case 11:
                     if ((0x3ff200000000000L & l) == 0L)
                        break;
  -                  if (kind > 51)
  -                     kind = 51;
  -                  jjstateSet[jjnewStateCnt++] = 11;
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjstateSet[jjnewStateCnt++] = 8;
                     break;
                  default : break;
               }
  @@ -1509,9 +1497,9 @@
                  case 0:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
  -                  if (kind > 51)
  -                     kind = 51;
  -                  jjCheckNAdd(11);
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjCheckNAdd(8);
                     break;
                  case 1:
                     jjAddStates(0, 1);
  @@ -1520,12 +1508,12 @@
                     if (kind > 13)
                        kind = 13;
                     break;
  -               case 11:
  +               case 8:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
  -                  if (kind > 51)
  -                     kind = 51;
  -                  jjCheckNAdd(11);
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjCheckNAdd(8);
                     break;
                  default : break;
               }
  @@ -1558,7 +1546,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 12 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -1572,7 +1560,7 @@
   null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
   null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
   null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
  -null, null, };
  +null, null, null, };
   public static final String[] lexStateNames = {
      "DEFAULT", 
      "REFERENCE", 
  @@ -1582,18 +1570,18 @@
      "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, 0, -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, -1, 0, -1, -1, -1, 0, -1, -1, 
-1, -1, -1, -1, -1, 
  -   -1, -1, -1, -1, -1, 0, -1, 
  +   -1, -1, -1, -1, -1, -1, 0, -1, 
   };
   static final long[] jjtoToken = {
  -   0xf8afffff8707ffL, 
  +   0x1f15fffff8707ffL, 
   };
   static final long[] jjtoSkip = {
  -   0x100000000700000L, 
  +   0x200000000700000L, 
   };
   static final long[] jjtoSpecial = {
  -   0x100000000400000L, 
  +   0x200000000400000L, 
   };
   static final long[] jjtoMore = {
      0x8f800L, 
  @@ -1701,9 +1689,9 @@
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_1();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 56)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 57)
            {
  -            jjmatchedKind = 56;
  +            jjmatchedKind = 57;
            }
            break;
          case 2:
  @@ -1822,9 +1810,14 @@
               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;
  +        if (inSet)
  +        {
  +            SwitchTo(DEFAULT);
  +            inSet = false;
  +            inDirective = false;
  +        }
            break;
  -      case 56 :
  +      case 57 :
            if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  @@ -1920,6 +1913,12 @@
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
           rparen++;
  +
  +        if (lparen == rparen)
  +        {
  +            SwitchTo(DEFAULT);
  +            inDirective = false;
  +        }
            break;
         case 7 :
           if (image == null)
  @@ -1969,6 +1968,13 @@
         incMode = true;
            break;
         case 43 :
  +        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 :
           if (image == null)
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
  
  
  
  1.2       +20 -18    
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTreeConstants.java
  
  Index: ParserTreeConstants.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserTreeConstants.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ParserTreeConstants.java  2000/09/30 17:04:24     1.1
  +++ ParserTreeConstants.java  2000/10/03 17:03:16     1.2
  @@ -10,7 +10,7 @@
     public int JJTNUMBERLITERAL = 3;
     public int JJTSTRINGLITERAL = 4;
     public int JJTIDENTIFIER = 5;
  -  public int JJTDIRECTIVEARGS = 6;
  +  public int JJTWORD = 6;
     public int JJTDIRECTIVE = 7;
     public int JJTBLOCK = 8;
     public int JJTOBJECTARRAY = 9;
  @@ -22,22 +22,23 @@
     public int JJTIFSTATEMENT = 15;
     public int JJTELSESTATEMENT = 16;
     public int JJTELSEIFSTATEMENT = 17;
  -  public int JJTEXPRESSION = 18;
  -  public int JJTASSIGNMENT = 19;
  -  public int JJTORNODE = 20;
  -  public int JJTANDNODE = 21;
  -  public int JJTEQNODE = 22;
  -  public int JJTNENODE = 23;
  -  public int JJTLTNODE = 24;
  -  public int JJTGTNODE = 25;
  -  public int JJTLENODE = 26;
  -  public int JJTGENODE = 27;
  -  public int JJTADDNODE = 28;
  -  public int JJTSUBTRACTNODE = 29;
  -  public int JJTMULNODE = 30;
  -  public int JJTDIVNODE = 31;
  -  public int JJTMODNODE = 32;
  -  public int JJTNOTNODE = 33;
  +  public int JJTSETDIRECTIVE = 18;
  +  public int JJTEXPRESSION = 19;
  +  public int JJTASSIGNMENT = 20;
  +  public int JJTORNODE = 21;
  +  public int JJTANDNODE = 22;
  +  public int JJTEQNODE = 23;
  +  public int JJTNENODE = 24;
  +  public int JJTLTNODE = 25;
  +  public int JJTGTNODE = 26;
  +  public int JJTLENODE = 27;
  +  public int JJTGENODE = 28;
  +  public int JJTADDNODE = 29;
  +  public int JJTSUBTRACTNODE = 30;
  +  public int JJTMULNODE = 31;
  +  public int JJTDIVNODE = 32;
  +  public int JJTMODNODE = 33;
  +  public int JJTNOTNODE = 34;
   
   
     public String[] jjtNodeName = {
  @@ -47,7 +48,7 @@
       "NumberLiteral",
       "StringLiteral",
       "Identifier",
  -    "DirectiveArgs",
  +    "Word",
       "Directive",
       "Block",
       "ObjectArray",
  @@ -59,6 +60,7 @@
       "IfStatement",
       "ElseStatement",
       "ElseIfStatement",
  +    "SetDirective",
       "Expression",
       "Assignment",
       "OrNode",
  
  
  
  1.2       +2 -1      
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserVisitor.java
  
  Index: ParserVisitor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ParserVisitor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ParserVisitor.java        2000/09/30 17:04:24     1.1
  +++ ParserVisitor.java        2000/10/03 17:03:17     1.2
  @@ -10,7 +10,7 @@
     public Object visit(ASTNumberLiteral node, Object data);
     public Object visit(ASTStringLiteral node, Object data);
     public Object visit(ASTIdentifier node, Object data);
  -  public Object visit(ASTDirectiveArgs node, Object data);
  +  public Object visit(ASTWord node, Object data);
     public Object visit(ASTDirective node, Object data);
     public Object visit(ASTBlock node, Object data);
     public Object visit(ASTObjectArray node, Object data);
  @@ -22,6 +22,7 @@
     public Object visit(ASTIfStatement node, Object data);
     public Object visit(ASTElseStatement node, Object data);
     public Object visit(ASTElseIfStatement node, Object data);
  +  public Object visit(ASTSetDirective node, Object data);
     public Object visit(ASTExpression node, Object data);
     public Object visit(ASTAssignment node, Object data);
     public Object visit(ASTOrNode node, Object data);
  
  
  
  1.1                  
jakarta-velocity/src/java/org/apache/velocity/runtime/parser/ASTSetDirective.java
  
  Index: ASTSetDirective.java
  ===================================================================
  /* Generated By:JJTree: Do not edit this line. ASTSetDirective.java */
  
  package org.apache.velocity.runtime.parser;
  
  import java.io.IOException;
  import java.io.Writer;
  
  import org.apache.velocity.Context;
  
  public class ASTSetDirective extends SimpleNode
  {
      public ASTSetDirective(int id)
      {
          super(id);
      }
  
      public ASTSetDirective(Parser p, int id)
      {
          super(p, id);
      }
  
  
      /** Accept the visitor. **/
      public Object jjtAccept(ParserVisitor visitor, Object data)
      {
          return visitor.visit(this, data);
      }
  
      public void render(Context context, Writer writer)
          throws IOException
      {
          Object value = null;
          Node right = jjtGetChild(0).jjtGetChild(0)
                          .jjtGetChild(1).jjtGetChild(0);
  
          value = right.value(context);
          
          ASTReference left = (ASTReference) jjtGetChild(0)
                          .jjtGetChild(0).jjtGetChild(0);
          
          if (left.jjtGetNumChildren() == 0)
              context.put(left.getFirstToken().image.substring(1), value);
          else
              left.setValue(context, value);
      
      }
  }
  
  
  

Reply via email to