jvanzyl     00/10/11 07:46:28

  Modified:    src/java/org/apache/velocity/runtime/parser Parser.java
                        Parser.jj Parser.jjt ParserConstants.java
                        ParserTokenManager.java
  Log:
  - updating parser with geirs great work on the grammar! all parsing
    problems appear to be fixed, everything passes the testbed.
  
  Revision  Changes    Path
  1.5       +367 -338  
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Parser.java       2000/10/09 15:06:31     1.4
  +++ Parser.java       2000/10/11 14:46:24     1.5
  @@ -16,7 +16,8 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  - * @version $Id: Parser.java,v 1.4 2000/10/09 15:06:31 jvanzyl Exp $ 
  + * @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
  + * @version $Id: Parser.java,v 1.5 2000/10/11 14:46:24 jvanzyl Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants, ParserConstants 
{/*@bgen(jjtree)*/
     protected JJTParserState jjtree = new JJTParserState();
  @@ -53,6 +54,7 @@
        */
       public SimpleNode parse(InputStream stream) throws ParseException
       {
  +        token_source.clearStateVars();
           ReInit(stream);
           return process();
       }
  @@ -93,20 +95,23 @@
         label_1:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +        case LPAREN:
  +        case RPAREN:
           case ESCAPE_SEQUENCE:
           case TEXT:
  -        case NUMBER_LITERAL:
           case SINGLE_LINE_COMMENT:
           case FORMAL_COMMENT:
           case MULTI_LINE_COMMENT:
  +        case STRING_LITERAL:
           case INCLUDE_DIRECTIVE:
           case IF_DIRECTIVE:
           case SET_DIRECTIVE:
           case STOP_DIRECTIVE:
  +        case NUMBER_LITERAL:
           case WORD:
           case IDENTIFIER:
  -        case DOT:
           case SHORTHAND:
  +        case DOT:
           case LCURLY:
             ;
             break;
  @@ -157,12 +162,6 @@
    */
     final public void Statement() throws ParseException {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  -    case ESCAPE_SEQUENCE:
  -    case TEXT:
  -    case NUMBER_LITERAL:
  -    case DOT:
  -      Text();
  -      break;
       case IF_DIRECTIVE:
         IfStatement();
         break;
  @@ -188,6 +187,15 @@
       case WORD:
         Directive();
         break;
  +    case LPAREN:
  +    case RPAREN:
  +    case ESCAPE_SEQUENCE:
  +    case TEXT:
  +    case STRING_LITERAL:
  +    case NUMBER_LITERAL:
  +    case DOT:
  +      Text();
  +      break;
       default:
         jj_la1[1] = jj_gen;
         jj_consume_token(-1);
  @@ -328,7 +336,7 @@
   
           if (d == null)
           {
  -            token_source.SwitchTo(DEFAULT);
  +            token_source.stateStackPop();
               token_source.inDirective = false;
               {if (true) return jjtn000;}
           }
  @@ -362,20 +370,23 @@
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +          case LPAREN:
  +          case RPAREN:
             case ESCAPE_SEQUENCE:
             case TEXT:
  -          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  +          case STRING_LITERAL:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  +          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
  -          case DOT:
             case SHORTHAND:
  +          case DOT:
             case LCURLY:
               ;
               break;
  @@ -706,9 +717,18 @@
         case DOT:
           jj_consume_token(DOT);
           break;
  +      case RPAREN:
  +        jj_consume_token(RPAREN);
  +        break;
  +      case LPAREN:
  +        jj_consume_token(LPAREN);
  +        break;
         case NUMBER_LITERAL:
           jj_consume_token(NUMBER_LITERAL);
           break;
  +      case STRING_LITERAL:
  +        jj_consume_token(STRING_LITERAL);
  +        break;
         case ESCAPE_SEQUENCE:
           t = jj_consume_token(ESCAPE_SEQUENCE);
         jjtree.closeNodeScope(jjtn000, true);
  @@ -750,20 +770,23 @@
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +          case LPAREN:
  +          case RPAREN:
             case ESCAPE_SEQUENCE:
             case TEXT:
  -          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  +          case STRING_LITERAL:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  +          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
  -          case DOT:
             case SHORTHAND:
  +          case DOT:
             case LCURLY:
               ;
               break;
  @@ -820,23 +843,23 @@
         }
         jj_consume_token(END);
       } 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;}
  +       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);
  -      }
  +       if (jjtc000) {
  +         jjtree.closeNodeScope(jjtn000, true);
  +       }
       }
     }
   
  @@ -855,20 +878,23 @@
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +          case LPAREN:
  +          case RPAREN:
             case ESCAPE_SEQUENCE:
             case TEXT:
  -          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  +          case STRING_LITERAL:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  +          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
  -          case DOT:
             case SHORTHAND:
  +          case DOT:
             case LCURLY:
               ;
               break;
  @@ -935,20 +961,23 @@
           while (true) {
             Statement();
             switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  +          case LPAREN:
  +          case RPAREN:
             case ESCAPE_SEQUENCE:
             case TEXT:
  -          case NUMBER_LITERAL:
             case SINGLE_LINE_COMMENT:
             case FORMAL_COMMENT:
             case MULTI_LINE_COMMENT:
  +          case STRING_LITERAL:
             case INCLUDE_DIRECTIVE:
             case IF_DIRECTIVE:
             case SET_DIRECTIVE:
             case STOP_DIRECTIVE:
  +          case NUMBER_LITERAL:
             case WORD:
             case IDENTIFIER:
  -          case DOT:
             case SHORTHAND:
  +          case DOT:
             case LCURLY:
               ;
               break;
  @@ -1066,13 +1095,13 @@
           Assignment();
         } else {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  -        case LPAREN:
           case LBRACKET:
  +        case LPAREN:
           case STRING_LITERAL:
  -        case NUMBER_LITERAL:
           case TRUE:
           case FALSE:
           case LOGICAL_NOT:
  +        case NUMBER_LITERAL:
           case IDENTIFIER:
           case SHORTHAND:
           case LCURLY:
  @@ -1632,12 +1661,12 @@
                       }
         }
         break;
  -    case LPAREN:
       case LBRACKET:
  +    case LPAREN:
       case STRING_LITERAL:
  -    case NUMBER_LITERAL:
       case TRUE:
       case FALSE:
  +    case NUMBER_LITERAL:
       case IDENTIFIER:
       case SHORTHAND:
       case LCURLY:
  @@ -1705,589 +1734,589 @@
       return retval;
     }
   
  -  final private boolean jj_3_1() {
  -    if (jj_scan_token(DOT)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3_2()) {
  -    jj_scanpos = xsp;
  -    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() {
  +  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_43() {
  -    if (jj_scan_token(LCURLY)) return true;
  +  final private boolean jj_3R_72() {
  +    if (jj_scan_token(MINUS)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_42() {
  -    if (jj_scan_token(SHORTHAND)) 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_30() {
  -    if (jj_scan_token(STRING_LITERAL)) return true;
  +  final private boolean jj_3R_63() {
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_32() {
       Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_42()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    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(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; }
  +      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_49() {
  -    if (jj_scan_token(COMMA)) return true;
  +  final private boolean jj_3R_33() {
  +    if (jj_scan_token(LBRACKET)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_29()) return true;
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    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_31() {
  -    if (jj_scan_token(NUMBER_LITERAL)) return true;
  +  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_63()) 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;
  +  final private boolean jj_3R_64() {
       Token xsp;
       xsp = jj_scanpos;
  -    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_3R_71()) {
  +    jj_scanpos = xsp;
  +    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_28() {
  -    if (jj_scan_token(LPAREN)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_36()) return true;
  +  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_scan_token(RPAREN)) 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_27() {
  -    if (jj_3R_35()) 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_64()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_26() {
  -    if (jj_3R_34()) return true;
  +  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_59()) 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_66() {
  +    if (jj_scan_token(LOGICAL_GT)) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    if (jj_3R_59()) 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;
  +  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_59()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_41() {
  -    if (jj_3R_32()) return true;
  +  final private boolean jj_3R_60() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_65()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_66()) {
  +    jj_scanpos = xsp;
  +    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;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_23() {
  -    if (jj_3R_31()) return true;
  +  final private boolean jj_3R_17() {
  +    if (jj_3R_20()) 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;
  +  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_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_45() {
  -    if (jj_3R_29()) 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_49()) { 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_22() {
  -    if (jj_3R_30()) return true;
  +  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_57()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_19() {
  +  final private boolean jj_3R_58() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_22()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_23()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_24()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_25()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_26()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_27()) {
  +    if (jj_3R_61()) {
       jj_scanpos = xsp;
  -    if (jj_3R_28()) 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;
  -    } 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;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_39() {
  -    if (jj_3R_34()) 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_58()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_38() {
  -    if (jj_3R_33()) return true;
  +  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_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;
  +  final private boolean jj_3R_55() {
  +    if (jj_scan_token(LOGICAL_AND)) 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;
  +    if (jj_3R_54()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_37() {
  -    if (jj_3R_30()) 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_55()) { jj_scanpos = xsp; break; }
  +      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    }
       return false;
     }
   
  -  final private boolean jj_3R_74() {
  -    if (jj_3R_19()) return true;
  +  final private boolean jj_3_2() {
  +    if (jj_3R_18()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_77() {
  -    if (jj_scan_token(MODULUS)) return true;
  +  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_69()) return true;
  +    if (jj_3R_52()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_73() {
  -    if (jj_scan_token(LOGICAL_NOT)) 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_3R_69()) return true;
  +    if (jj_scan_token(EQUALS)) 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_51() {
  +    if (jj_3R_52()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_73()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_74()) return true;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      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_50() {
  +    if (jj_3R_19()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    } else 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_76() {
  -    if (jj_scan_token(DIVIDE)) return true;
  +  final private boolean jj_3R_21() {
  +    if (jj_3R_29()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_69()) return true;
  +    Token xsp;
  +    while (true) {
  +      xsp = jj_scanpos;
  +      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;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_75() {
  -    if (jj_scan_token(MULTIPLY)) 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;
  -    if (jj_3R_69()) return true;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_47() {
  +    if (jj_3R_51()) 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_36() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_75()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_76()) {
  +    if (jj_3R_46()) {
       jj_scanpos = xsp;
  -    if (jj_3R_77()) 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;
  -    } 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;
  +  final private boolean jj_3R_46() {
  +    if (jj_3R_50()) 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_45()) jj_scanpos = xsp;
  -    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_scan_token(RBRACKET)) return true;
  +  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_72() {
  -    if (jj_scan_token(MINUS)) return true;
  +  final private boolean jj_3_1() {
  +    if (jj_scan_token(DOT)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_63()) return true;
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3_2()) {
  +    jj_scanpos = xsp;
  +    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_63() {
  -    if (jj_3R_69()) return true;
  +  final private boolean jj_3R_44() {
  +    if (jj_scan_token(RCURLY)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      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_71() {
  -    if (jj_scan_token(PLUS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_63()) return true;
  +  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_64() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_71()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_72()) 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;
  -    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  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_59()) 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_59() {
  -    if (jj_3R_63()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +  final private boolean jj_3R_32() {
       Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_42()) jj_scanpos = xsp;
  +    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    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(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_3R_64()) { jj_scanpos = xsp; break; }
  +      if (jj_3_1()) { jj_scanpos = xsp; break; }
         if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       }
       return false;
     }
   
  -  final private boolean jj_3R_67() {
  -    if (jj_scan_token(LOGICAL_LE)) return true;
  +  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_59()) 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_66() {
  -    if (jj_scan_token(LOGICAL_GT)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) 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_65() {
  -    if (jj_scan_token(LOGICAL_LT)) return true;
  +  final private boolean jj_3R_18() {
  +    if (jj_3R_20()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_59()) return true;
  +    if (jj_scan_token(LPAREN)) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_60() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_65()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_66()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_67()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_68()) return true;
  +    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;
  -    } 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_17() {
  -    if (jj_3R_20()) 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;
  +    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_62() {
  -    if (jj_scan_token(LOGICAL_NOT_EQUALS)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_57()) 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_57() {
  -    if (jj_3R_59()) return true;
  +  final private boolean jj_3R_26() {
  +    if (jj_3R_34()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    Token xsp;
  -    while (true) {
  -      xsp = jj_scanpos;
  -      if (jj_3R_60()) { jj_scanpos = xsp; break; }
  -      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
       return false;
     }
   
  -  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_57()) return true;
  +  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_58() {
  -    Token xsp;
  -    xsp = jj_scanpos;
  -    if (jj_3R_61()) {
  -    jj_scanpos = xsp;
  -    if (jj_3R_62()) return true;
  +  final private boolean jj_3R_24() {
  +    if (jj_3R_32()) 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() {
  -    if (jj_3R_57()) return true;
  +  final private boolean jj_3R_23() {
  +    if (jj_3R_31()) 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_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
       return false;
     }
   
  -  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;
  +  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_55() {
  -    if (jj_scan_token(LOGICAL_AND)) return true;
  +  final private boolean jj_3R_19() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_22()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_23()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_24()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_25()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_26()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_27()) {
  +    jj_scanpos = xsp;
  +    if (jj_3R_28()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_54()) return true;
  +    } 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;
  +    } 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_41() {
  +    if (jj_3R_32()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3_2() {
  -    if (jj_3R_18()) return true;
  +  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_52() {
  -    if (jj_3R_54()) return true;
  +  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_55()) { 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_53() {
  -    if (jj_scan_token(LOGICAL_OR)) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_52()) 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_3_3() {
  +  final private boolean jj_3R_74() {
       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_51() {
  -    if (jj_3R_52()) return true;
  +  final private boolean jj_3R_38() {
  +    if (jj_3R_33()) 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_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_77() {
  +    if (jj_scan_token(MODULUS)) 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_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    }
  +    if (jj_3R_69()) return true;
  +    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_50() {
  -    if (jj_3R_19()) return true;
  +  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_scan_token(EQUALS)) return true;
  +    if (jj_3R_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  -    if (jj_3R_36()) return true;
  +    return false;
  +  }
  +
  +  final private boolean jj_3R_69() {
  +    Token xsp;
  +    xsp = jj_scanpos;
  +    if (jj_3R_73()) {
  +    jj_scanpos = xsp;
  +    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_20() {
  -    if (jj_scan_token(IDENTIFIER)) return true;
  +  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_35() {
  -    if (jj_scan_token(FALSE)) return true;
  +  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_34() {
  -    if (jj_scan_token(TRUE)) return true;
  +  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_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_47() {
  -    if (jj_3R_51()) return true;
  +  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_69()) return true;
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  -  final private boolean jj_3R_36() {
  +  final private boolean jj_3R_70() {
       Token xsp;
       xsp = jj_scanpos;
  -    if (jj_3R_46()) {
  +    if (jj_3R_75()) {
       jj_scanpos = xsp;
  -    if (jj_3R_47()) 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;
  -    return false;
  -  }
  -
  -  final private boolean jj_3R_46() {
  -    if (jj_3R_50()) return true;
  -    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
  +    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
       return false;
     }
   
  @@ -2301,8 +2330,8 @@
     private boolean jj_semLA;
     private int jj_gen;
     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 int[] jj_la1_0 = 
{0x8e0f0,0x8e0f0,0xe000,0x80002,0x80002,0x8e0f0,0x8,0x380002,0x380002,0x8,0x380002,0x0,0x0,0x0,0x0,0x0,0x800f0,0x8e0f0,0x0,0x0,0x0,0x8e0f0,0x8e0f0,0x380012,0x20000000,0x10000000,0x0,0x0,0xc0000000,0xc0000000,0x1800000,0x1800000,0xe000000,0xe000000,0x380012,0x380012,};
  +  final private int[] jj_la1_1 = 
{0xf15980,0xf15980,0x0,0xb14000,0xb14000,0xf15980,0x0,0xb00000,0xb00000,0x0,0xb00000,0x200000,0x800000,0x1000000,0x100000,0x1000000,0x404000,0xf15980,0x200,0x200,0x400,0xf15980,0xf15980,0xb04010,0x0,0x0,0xc,0xc,0x3,0x3,0x0,0x0,0x0,0x0,0xb04010,0xb04000,};
     final private JJCalls[] jj_2_rtns = new JJCalls[3];
     private boolean jj_rescan = false;
     private int jj_gc = 0;
  
  
  
  1.5       +317 -94   
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Parser.jj 2000/10/09 15:06:31     1.4
  +++ Parser.jj 2000/10/11 14:46:25     1.5
  @@ -96,7 +96,8 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  - * @version $Id: Parser.jj,v 1.4 2000/10/09 15:06:31 jvanzyl Exp $ 
  + * @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
  + * @version $Id: Parser.jj,v 1.5 2000/10/11 14:46:25 jvanzyl Exp $ 
   */
   public class Parser/*@bgen(jjtree)*/implements ParserTreeConstants/*@egen*/
   {/*@bgen(jjtree)*/
  @@ -137,7 +138,8 @@
        */
       public SimpleNode parse(InputStream stream) throws ParseException
       {
  -        ReInit(stream);
  +        token_source.clearStateVars();
  +        ReInit(stream);  
           return process();
       }        
   
  @@ -186,6 +188,12 @@
       private int lparen = 0;
       private int rparen = 0;
   
  +    /*
  +     * gmj : make sure this is reset before each parse
  +     */
  +    Stack stateStack = new Stack();
  +    public boolean bDebugPrint_ = false;
  +
       private boolean inReference;
       public boolean inDirective;
       private boolean inComment;
  @@ -260,59 +268,184 @@
               t.specialToken = new_t.specialToken;
           }
       } 
  +
  +    /**
  +     *  pushes the current state onto the 'state stack',
  +     *  and maintains the parens counts
  +     *  public because we need it in PD & VM handling
  +     *
  +     *  @return boolean : success.  It can fail if the state machine
  +     *     gets messed up.
  +     */
  +    public boolean stateStackPop()
  +    {
  +      
  +        Hashtable hStack;
  +
  +        try
  +        {
  +            hStack = (Hashtable) stateStack.pop();
  +        }
  +        catch( EmptyStackException e)
  +        {
  +            lparen=0;
  +            SwitchTo(DEFAULT);
  +            return false;
  +        }
  +
  +        if( bDebugPrint_ )
  +            System.out.println(" stack pop (" + stateStack.size() + ") : lparen=" + 
( (Integer) hStack.get("lparen")).intValue() 
  +                + " newstate=" +  ( (Integer)  hStack.get("lexstate")).intValue() );
  +       
  +        lparen = ( (Integer) hStack.get("lparen")).intValue();
  +        rparen = ( (Integer) hStack.get("rparen")).intValue();
  +        SwitchTo( ( (Integer) hStack.get("lexstate")).intValue() ); 
  +    
  +        return true;
  +    }
  +
  +    /**
  +     *  pops a state off the stack, and restores paren counts
  +     *
  +     *  @return boolean : success of operation
  +     */
  +    public boolean stateStackPush()
  +    {
  +        if( bDebugPrint_ )
  +            System.out.println(" (" + stateStack.size() + ") pushing cur state : " 
+ curLexState );
  +            
  +        Hashtable hStack = new Hashtable();
  +        hStack.put("lexstate", new Integer( curLexState ) );
  +        hStack.put("lparen", new Integer( lparen ));
  +        hStack.put("rparen", new Integer( rparen ));
  +        lparen = 0;
  +
  +        stateStack.push( hStack );
  +
  +        return true;
  +    }
  +
  +    /**
  +     *  Clears all state variables, resets to
  +     *  start values, clears stateStack.  Call
  +     *  before parsing.
  +     *  @return void
  +     */   
  +    public void clearStateVars()
  +    {
  +        stateStack.clear();
  +        
  +        lparen = 0;
  +        rparen = 0;
  +        inReference = false;
  +        inDirective = false;
  +        inComment = false;
  +        inSet = false;
  +        
  +        return;
  +    }
   } 
   
   /* ------------------------------------------------------------------------
    *
    * Tokens
    *
  + *  Note : we now have another state, REFMODIFIER.  This is sort of a 
  + *  type of REFERENCE state, simply use to use the DIRECTIVE token
  + *  set when we are processing a $foo.bar() construct
  + *
    * ------------------------------------------------------------------------- */
   
  -TOKEN :
  +<DIRECTIVE,REFMODIFIER,REFMOD2>
  +TOKEN:
  +{ 
  +    <LBRACKET: "[">
  +|   <RBRACKET: "]">
  +}
  +
  +<DIRECTIVE,REFMOD2>
  +TOKEN:
   {
  -    <ESCAPE_SEQUENCE: "\\" ~[] >
  -|   <TEXT: (~["$", "#", "\\"])+ >
  -}    
  +    <COMMA:",">
  +}
   
  -<REFERENCE,DIRECTIVE>
  -TOKEN :
  +
  +<DIRECTIVE,REFMODIFIER,REFMOD2>
  +TOKEN:
   {
  -    <LPAREN: "(" > 
  -    { 
  -        lparen++;
  +    <LPAREN: "(">
  +    {
  +        if (!inComment)
  +            lparen++;
  +
  +        /*
  +         *  if we have seen the dot, then move to REFMOD2 -> Modifier()
  +         */
  +
  +        if (curLexState == REFMODIFIER )
  +            SwitchTo( REFMOD2 );
  +
       }
   
  -|   <RPAREN: ")" > 
  +|   <RPAREN: ")">
       {
  -        rparen++;
  +        /*
  +         *  Ultimately, we want to drop down to the state below the one that has an 
open (
  +         *  if we hit bottom (DEFAULT), that's fine. It's just text schmoo.
  +         *
  +         */
       
  -        if (lparen == rparen)
  -        {
  -            SwitchTo(DEFAULT);
  -            inDirective = false;
  -        }            
  -    }    
  +     
  +        boolean bClosed = false;
   
  -|   <LBRACKET: "[">
  -|   <RBRACKET: "]">
  +        if (inComment)
  +            bClosed = true;
   
  -|   <STRING_LITERAL: ( "\"" ( ~["\"","\n","\r"] )* "\"" ) >
  -    {
  -        if (incMode)
  +        while( !bClosed) 
           {
  -            matchedToken.image = stripQuotes(image.toString());
  -            pushFile(matchedToken.image);
  +            /*
  +             * look at current state.  If we haven't seen a lparen in this state
  +             * then we drop a state, because this lparen clearly closes our state
  +             */
  +
  +            if( lparen > 0)
  +            {
  +                /*
  +                 *  if rparen + 1 == lparen, then this state is closed. Otherwise, 
increment
  +                 *  and keep parsing
  +                 */
  +
  +                 if( lparen == rparen + 1)
  +                 {
  +                       stateStackPop();
  +                 }  
  +                else
  +                {   
  +                    rparen++;
  +                }
  +                      
  +                 bClosed = true;
  +            }
  +            else
  +            {
  +                /*
  +                 * now, drop a state
  +                 */
  +        
  +                if(!stateStackPop())
  +                    break;
  +            } 
           }
  -        incMode = false;
  -    }
  -|   <#DIGIT: [ "0"-"9" ] >
  -|   <NUMBER_LITERAL: (<DIGIT>)+ >
  -|   <COMMA: ",">
  -|   <TRUE: "true">
  -|   <FALSE: "false">
  -|   <EQUALS: "=" >
  +    }    
   }
   
  +
  +TOKEN :
  +{
  +    <ESCAPE_SEQUENCE: "\\" ~[] >
  +|   <TEXT: (~["$", "#", "\\"])+ >
  +}    
  +
   <*>
   MORE :
   {
  @@ -321,26 +454,49 @@
           if (! inComment)
           {
               inReference = true;
  +
  +           if ( bDebugPrint_ )
  +                System.out.print( "$  : going to " + REFERENCE );
  +
  +            stateStackPush();
               SwitchTo(REFERENCE);
           }            
       }
  +
   |   "##"
  -    { inComment = true; } 
  -    : IN_SINGLE_LINE_COMMENT
  +   { 
  +        inComment = true;
  +        stateStackPush();
  +        SwitchTo(IN_SINGLE_LINE_COMMENT);
  +     }
   
   |   <"#**" ~["#"]> 
  -    { input_stream.backup(1); inComment = true; } 
  -    : IN_FORMAL_COMMENT
  +    { 
  +        input_stream.backup(1); 
  +        inComment = true; 
  +        stateStackPush();
  +        SwitchTo( IN_FORMAL_COMMENT);
  +        // was : IN_FORMAL_COMMENT
  +    } 
       
   |   "#*" 
  -    { inComment=true; } 
  -    : IN_MULTI_LINE_COMMENT
  +    { 
  +        inComment=true;
  +        stateStackPush();
  +        SwitchTo( IN_MULTI_LINE_COMMENT ); 
  +    } 
   
  +
   |   <HASH : "#"> 
  -    { 
  +  { 
           if (! inComment)
           {
               inDirective = true;
  +
  +            if ( bDebugPrint_ )
  +                System.out.print("# :  going to " + DIRECTIVE );
  +            
  +            stateStackPush();
               SwitchTo(DIRECTIVE);
           }
       } 
  @@ -356,24 +512,34 @@
   TOKEN :
   {
     <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n" > 
  -  { inComment = false; } 
  -  : DEFAULT
  +  { 
  +     inComment = false;
  +     stateStackPop();
  +    // was :DEFAULT
  +  } 
  +
   }
   
   <IN_FORMAL_COMMENT>
   TOKEN :
   {
     <FORMAL_COMMENT: "*#" > 
  -  { inComment = false; } 
  -  : DEFAULT
  +  {     
  +    inComment = false;
  +    stateStackPop();
  +    // was :DEFAULT
  +  } 
   }
   
   <IN_MULTI_LINE_COMMENT>
   TOKEN :
   {
     <MULTI_LINE_COMMENT: "*#" > 
  -  { inComment = false; } 
  -  : DEFAULT
  +  { 
  +    inComment = false; 
  +    stateStackPop();
  +    // was :DEFAULT
  +  } 
   }
   
   <IN_SINGLE_LINE_COMMENT,IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT>
  @@ -388,7 +554,7 @@
   // 
   // -----------------------------------------------------------------------
   
  -<DIRECTIVE> 
  +<DIRECTIVE,REFMOD2> 
   SKIP:
   {
       " "
  @@ -397,18 +563,41 @@
   //|   "\r"
   }
   
  +<REFERENCE,DIRECTIVE,REFMODIFIER,REFMOD2>
  +TOKEN :
  +{
  +
  +   <STRING_LITERAL: ( "\"" ( ~["\"","\n","\r"] )* "\"" ) >
  +    {
  +        if (incMode)
  +        {
  +            matchedToken.image = stripQuotes(image.toString());
  +            pushFile(matchedToken.image);
  +        }
  +        incMode = false;
  +    
  +        if (lparen == 0)
  +            SwitchTo(DEFAULT);
  +    }
  +
  +|   <TRUE: "true">
  +|   <FALSE: "false">
  +}
  +
   <DIRECTIVE>
   SPECIAL_TOKEN :
   {
       <NEWLINE: "\n" | "\r" | "\r\n" >
       {
           if (inSet)
  -        {
  -            SwitchTo(DEFAULT);
  -            inSet = false;
  -            inDirective = false;
  +       {
  +           if ( bDebugPrint_ )
  +                System.out.print(" NEWLINE :");
  +            stateStackPop();        
  +           inSet = false;
  +           inDirective = false;
           }
  -    }        
  +   }        
   }    
   
   <DIRECTIVE>
  @@ -428,6 +617,7 @@
   |   <LOGICAL_EQUALS: "==">
   |   <LOGICAL_NOT_EQUALS: "!=">
   |   <LOGICAL_NOT: "!">
  +|   <EQUALS: "=" >
   }
   
   <DIRECTIVE> 
  @@ -436,8 +626,9 @@
       <END: "end"> 
       { 
           inDirective = false; 
  +        stateStackPop();
  +        // was :DEFAULT
       } 
  -    : DEFAULT
   
   |   <INCLUDE_DIRECTIVE: "include"> 
       { incMode = true; }
  @@ -458,6 +649,8 @@
           fileDepth = 0;
       }
   
  +|   <#DIGIT: [ "0"-"9" ] >
  +|   <NUMBER_LITERAL: (<DIGIT>)+ >
   |   <#LETTER: [ "a"-"z" ] >
   |   <WORD: (<LETTER>)+ >
   }
  @@ -469,36 +662,63 @@
   // 
   // -----------------------------------------------------------------------
   
  -<REFERENCE> 
  +<REFERENCE,REFMODIFIER,REFMOD2> 
   TOKEN :
   {
       <#ALPHA_CHAR: ["a"-"z", "A"-"Z"] >
   |   <#ALPHANUM_CHAR: [ "a"-"z", "A"-"Z", "0"-"9" ] >
   |   <#IDENTIFIER_CHAR: [ "a"-"z", "A"-"Z", "0"-"9", "-", "_" ] >
  -|   <IDENTIFIER: <ALPHA_CHAR> (<IDENTIFIER_CHAR>)* >
  -|   <DOT: ".">
  +|   <IDENTIFIER:  <ALPHA_CHAR> (<IDENTIFIER_CHAR>)* >
   |   <SHORTHAND: "!">
  +|   <DOT: ".">
  +    {
  +        if ( bDebugPrint_ )
  +            System.out.print("DOT : switching to " + REFMODIFIER);
  +        SwitchTo(REFMODIFIER);
  +    }
   |   <LCURLY: "{">
  -|   <RCURLY: "}"> : DEFAULT
  +|   <RCURLY: "}">
  +    {
  +        // was :DEFAULT
  +        stateStackPop();
  +    }
   }
   
  -<REFERENCE> 
  +<REFERENCE,REFMODIFIER,REFMOD2> 
   SPECIAL_TOKEN :
   {
       <REFERENCE_TERMINATOR: ~[] >
  -    {
  -        if (inDirective)
  -            SwitchTo(DIRECTIVE);
  -        else if (lparen == rparen)
  +    {   
  +        /*
  +         *  These can terminate a reference, but are needed in subsequent states
  +         */
  +
  +        if (image.toString().equals("="))
           {
  -            lparen = 0;
  -            rparen = 0;
  -            inReference = false;
  -            
  -            SwitchTo(DEFAULT);
  +            input_stream.backup(1);
  +        } 
  +                
  +        inReference = false;
  +    
  +        if ( bDebugPrint_ )
  +            System.out.print("REF_TERM :");
  +        
  +        stateStackPop();
  +
  +        /*
  +         *  I removed LPAREN & RPAREN from REFERENCE;  as there is no LPAREN,RPAREN 
in REF is there is REFMETHOD
  +         */
  +        
  +        if (curLexState != DEFAULT && ( image.toString().equals(")") 
  +                                        || image.toString().equals(",") 
  +                                        || image.toString().equals("[") 
  +                                        || image.toString().equals("]")
  +                                        || image.toString().equals("\n")
  +                                        ) )
  +        {
  +            input_stream.backup(1);
           }
  -        else
  -            SwitchTo(REFERENCE);
  +
       }
   }
   
  @@ -564,14 +784,14 @@
   
   void Statement()       : {}
   {
  -    Text()
  -|   IfStatement()
  +   IfStatement()
   |   IncludeStatement()
   |   StopStatement()
   |   Reference()
   |   Comment()
   |   SetDirective()
   |   Directive()
  +|   Text()
   }
   
   void Comment() : {/*@bgen(jjtree) Comment */
  @@ -699,7 +919,7 @@
           
           if (d == null)
           {
  -            token_source.SwitchTo(DEFAULT);
  +            token_source.stateStackPop();
               token_source.inDirective = false;
               return jjtn000;
           }            
  @@ -940,7 +1160,10 @@
   /*@egen*/
       <TEXT>
   |   <DOT>
  +|   <RPAREN>
  +|   <LPAREN>
   |   <NUMBER_LITERAL>
  +|   <STRING_LITERAL>
   |   t = <ESCAPE_SEQUENCE>/*@bgen(jjtree)*/
       {
         jjtree.closeNodeScope(jjtn000, true);
  @@ -970,9 +1193,9 @@
     jjtree.openNodeScope(jjtn000);
   /*@egen*/}
   {/*@bgen(jjtree) IfStatement */
  -    try {
  +     try {
   /*@egen*/
  -    <IF_DIRECTIVE> <LPAREN> Expression() <RPAREN>/*@bgen(jjtree) Block */
  +     <IF_DIRECTIVE> <LPAREN> Expression() <RPAREN>/*@bgen(jjtree) Block */
       {
         ASTBlock jjtn001 = new ASTBlock(this, JJTBLOCK);
         boolean jjtc001 = true;
  @@ -1004,25 +1227,25 @@
       [ LOOKAHEAD(1) ( ElseIfStatement() )+ ]
       [ LOOKAHEAD(1) ElseStatement() ]
       <END>/*@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);
  -      }
  -    }
  +     } 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*/
   }
   
  
  
  
  1.5       +297 -74   
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Parser.jjt        2000/10/09 15:06:32     1.4
  +++ Parser.jjt        2000/10/11 14:46:26     1.5
  @@ -120,7 +120,8 @@
    * what controls the generation of this class.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  - * @version $Id: Parser.jjt,v 1.4 2000/10/09 15:06:32 jvanzyl Exp $ 
  + * @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
  + * @version $Id: Parser.jjt,v 1.5 2000/10/11 14:46:26 jvanzyl Exp $ 
   */
   public class Parser
   {
  @@ -158,7 +159,8 @@
        */
       public SimpleNode parse(InputStream stream) throws ParseException
       {
  -        ReInit(stream);
  +        token_source.clearStateVars();
  +        ReInit(stream);  
           return process();
       }        
   
  @@ -207,6 +209,12 @@
       private int lparen = 0;
       private int rparen = 0;
   
  +    /*
  +     * gmj : make sure this is reset before each parse
  +     */
  +    Stack stateStack = new Stack();
  +    public boolean bDebugPrint_ = false;
  +
       private boolean inReference;
       public boolean inDirective;
       private boolean inComment;
  @@ -281,59 +289,184 @@
               t.specialToken = new_t.specialToken;
           }
       } 
  +
  +    /**
  +     *  pushes the current state onto the 'state stack',
  +     *  and maintains the parens counts
  +     *  public because we need it in PD & VM handling
  +     *
  +     *  @return boolean : success.  It can fail if the state machine
  +     *     gets messed up.
  +     */
  +    public boolean stateStackPop()
  +    {
  +      
  +        Hashtable hStack;
  +
  +        try
  +        {
  +            hStack = (Hashtable) stateStack.pop();
  +        }
  +        catch( EmptyStackException e)
  +        {
  +            lparen=0;
  +            SwitchTo(DEFAULT);
  +            return false;
  +        }
  +
  +        if( bDebugPrint_ )
  +            System.out.println(" stack pop (" + stateStack.size() + ") : lparen=" + 
( (Integer) hStack.get("lparen")).intValue() 
  +                + " newstate=" +  ( (Integer)  hStack.get("lexstate")).intValue() );
  +       
  +        lparen = ( (Integer) hStack.get("lparen")).intValue();
  +        rparen = ( (Integer) hStack.get("rparen")).intValue();
  +        SwitchTo( ( (Integer) hStack.get("lexstate")).intValue() ); 
  +    
  +        return true;
  +    }
  +
  +    /**
  +     *  pops a state off the stack, and restores paren counts
  +     *
  +     *  @return boolean : success of operation
  +     */
  +    public boolean stateStackPush()
  +    {
  +        if( bDebugPrint_ )
  +            System.out.println(" (" + stateStack.size() + ") pushing cur state : " 
+ curLexState );
  +            
  +        Hashtable hStack = new Hashtable();
  +        hStack.put("lexstate", new Integer( curLexState ) );
  +        hStack.put("lparen", new Integer( lparen ));
  +        hStack.put("rparen", new Integer( rparen ));
  +        lparen = 0;
  +
  +        stateStack.push( hStack );
  +
  +        return true;
  +    }
  +
  +    /**
  +     *  Clears all state variables, resets to
  +     *  start values, clears stateStack.  Call
  +     *  before parsing.
  +     *  @return void
  +     */   
  +    public void clearStateVars()
  +    {
  +        stateStack.clear();
  +        
  +        lparen = 0;
  +        rparen = 0;
  +        inReference = false;
  +        inDirective = false;
  +        inComment = false;
  +        inSet = false;
  +        
  +        return;
  +    }
   } 
   
   /* ------------------------------------------------------------------------
    *
    * Tokens
    *
  + *  Note : we now have another state, REFMODIFIER.  This is sort of a 
  + *  type of REFERENCE state, simply use to use the DIRECTIVE token
  + *  set when we are processing a $foo.bar() construct
  + *
    * ------------------------------------------------------------------------- */
   
  -TOKEN :
  +<DIRECTIVE,REFMODIFIER,REFMOD2>
  +TOKEN:
  +{ 
  +    <LBRACKET: "[">
  +|   <RBRACKET: "]">
  +}
  +
  +<DIRECTIVE,REFMOD2>
  +TOKEN:
   {
  -    <ESCAPE_SEQUENCE: "\\" ~[] >
  -|   <TEXT: (~["$", "#", "\\"])+ >
  -}    
  +    <COMMA:",">
  +}
   
  -<REFERENCE,DIRECTIVE>
  -TOKEN :
  +
  +<DIRECTIVE,REFMODIFIER,REFMOD2>
  +TOKEN:
   {
  -    <LPAREN: "(" > 
  -    { 
  -        lparen++;
  +    <LPAREN: "(">
  +    {
  +        if (!inComment)
  +            lparen++;
  +
  +        /*
  +         *  if we have seen the dot, then move to REFMOD2 -> Modifier()
  +         */
  +
  +        if (curLexState == REFMODIFIER )
  +            SwitchTo( REFMOD2 );
  +
       }
   
  -|   <RPAREN: ")" > 
  +|   <RPAREN: ")">
       {
  -        rparen++;
  +        /*
  +         *  Ultimately, we want to drop down to the state below the one that has an 
open (
  +         *  if we hit bottom (DEFAULT), that's fine. It's just text schmoo.
  +         *
  +         */
       
  -        if (lparen == rparen)
  -        {
  -            SwitchTo(DEFAULT);
  -            inDirective = false;
  -        }            
  -    }    
  +     
  +        boolean bClosed = false;
   
  -|   <LBRACKET: "[">
  -|   <RBRACKET: "]">
  +        if (inComment)
  +            bClosed = true;
   
  -|   <STRING_LITERAL: ( "\"" ( ~["\"","\n","\r"] )* "\"" ) >
  -    {
  -        if (incMode)
  +        while( !bClosed) 
           {
  -            matchedToken.image = stripQuotes(image.toString());
  -            pushFile(matchedToken.image);
  +            /*
  +             * look at current state.  If we haven't seen a lparen in this state
  +             * then we drop a state, because this lparen clearly closes our state
  +             */
  +
  +            if( lparen > 0)
  +            {
  +                /*
  +                 *  if rparen + 1 == lparen, then this state is closed. Otherwise, 
increment
  +                 *  and keep parsing
  +                 */
  +
  +                 if( lparen == rparen + 1)
  +                 {
  +                       stateStackPop();
  +                 }  
  +                else
  +                {   
  +                    rparen++;
  +                }
  +                      
  +                 bClosed = true;
  +            }
  +            else
  +            {
  +                /*
  +                 * now, drop a state
  +                 */
  +        
  +                if(!stateStackPop())
  +                    break;
  +            } 
           }
  -        incMode = false;
  -    }
  -|   <#DIGIT: [ "0"-"9" ] >
  -|   <NUMBER_LITERAL: (<DIGIT>)+ >
  -|   <COMMA: ",">
  -|   <TRUE: "true">
  -|   <FALSE: "false">
  -|   <EQUALS: "=" >
  +    }    
   }
   
  +
  +TOKEN :
  +{
  +    <ESCAPE_SEQUENCE: "\\" ~[] >
  +|   <TEXT: (~["$", "#", "\\"])+ >
  +}    
  +
   <*>
   MORE :
   {
  @@ -342,26 +475,49 @@
           if (! inComment)
           {
               inReference = true;
  +
  +           if ( bDebugPrint_ )
  +                System.out.print( "$  : going to " + REFERENCE );
  +
  +            stateStackPush();
               SwitchTo(REFERENCE);
           }            
       }
  +
   |   "##"
  -    { inComment = true; } 
  -    : IN_SINGLE_LINE_COMMENT
  +   { 
  +        inComment = true;
  +        stateStackPush();
  +        SwitchTo(IN_SINGLE_LINE_COMMENT);
  +     }
   
   |   <"#**" ~["#"]> 
  -    { input_stream.backup(1); inComment = true; } 
  -    : IN_FORMAL_COMMENT
  +    { 
  +        input_stream.backup(1); 
  +        inComment = true; 
  +        stateStackPush();
  +        SwitchTo( IN_FORMAL_COMMENT);
  +        // was : IN_FORMAL_COMMENT
  +    } 
       
   |   "#*" 
  -    { inComment=true; } 
  -    : IN_MULTI_LINE_COMMENT
  +    { 
  +        inComment=true;
  +        stateStackPush();
  +        SwitchTo( IN_MULTI_LINE_COMMENT ); 
  +    } 
  +
   
   |   <HASH : "#"> 
  -    { 
  +  { 
           if (! inComment)
           {
               inDirective = true;
  +
  +            if ( bDebugPrint_ )
  +                System.out.print("# :  going to " + DIRECTIVE );
  +            
  +            stateStackPush();
               SwitchTo(DIRECTIVE);
           }
       } 
  @@ -377,24 +533,34 @@
   TOKEN :
   {
     <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n" > 
  -  { inComment = false; } 
  -  : DEFAULT
  +  { 
  +     inComment = false;
  +     stateStackPop();
  +    // was :DEFAULT
  +  } 
  +
   }
   
   <IN_FORMAL_COMMENT>
   TOKEN :
   {
     <FORMAL_COMMENT: "*#" > 
  -  { inComment = false; } 
  -  : DEFAULT
  +  {     
  +    inComment = false;
  +    stateStackPop();
  +    // was :DEFAULT
  +  } 
   }
   
   <IN_MULTI_LINE_COMMENT>
   TOKEN :
   {
     <MULTI_LINE_COMMENT: "*#" > 
  -  { inComment = false; } 
  -  : DEFAULT
  +  { 
  +    inComment = false; 
  +    stateStackPop();
  +    // was :DEFAULT
  +  } 
   }
   
   <IN_SINGLE_LINE_COMMENT,IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT>
  @@ -409,7 +575,7 @@
   // 
   // -----------------------------------------------------------------------
   
  -<DIRECTIVE> 
  +<DIRECTIVE,REFMOD2> 
   SKIP:
   {
       " "
  @@ -418,18 +584,41 @@
   //|   "\r"
   }
   
  +<REFERENCE,DIRECTIVE,REFMODIFIER,REFMOD2>
  +TOKEN :
  +{
  +
  +   <STRING_LITERAL: ( "\"" ( ~["\"","\n","\r"] )* "\"" ) >
  +    {
  +        if (incMode)
  +        {
  +            matchedToken.image = stripQuotes(image.toString());
  +            pushFile(matchedToken.image);
  +        }
  +        incMode = false;
  +    
  +        if (lparen == 0)
  +            SwitchTo(DEFAULT);
  +    }
  +
  +|   <TRUE: "true">
  +|   <FALSE: "false">
  +}
  +
   <DIRECTIVE>
   SPECIAL_TOKEN :
   {
       <NEWLINE: "\n" | "\r" | "\r\n" >
       {
           if (inSet)
  -        {
  -            SwitchTo(DEFAULT);
  -            inSet = false;
  -            inDirective = false;
  +       {
  +           if ( bDebugPrint_ )
  +                System.out.print(" NEWLINE :");
  +            stateStackPop();        
  +           inSet = false;
  +           inDirective = false;
           }
  -    }        
  +   }        
   }    
   
   <DIRECTIVE>
  @@ -449,6 +638,7 @@
   |   <LOGICAL_EQUALS: "==">
   |   <LOGICAL_NOT_EQUALS: "!=">
   |   <LOGICAL_NOT: "!">
  +|   <EQUALS: "=" >
   }
   
   <DIRECTIVE> 
  @@ -457,8 +647,9 @@
       <END: "end"> 
       { 
           inDirective = false; 
  +        stateStackPop();
  +        // was :DEFAULT
       } 
  -    : DEFAULT
   
   |   <INCLUDE_DIRECTIVE: "include"> 
       { incMode = true; }
  @@ -479,6 +670,8 @@
           fileDepth = 0;
       }
   
  +|   <#DIGIT: [ "0"-"9" ] >
  +|   <NUMBER_LITERAL: (<DIGIT>)+ >
   |   <#LETTER: [ "a"-"z" ] >
   |   <WORD: (<LETTER>)+ >
   }
  @@ -490,36 +683,63 @@
   // 
   // -----------------------------------------------------------------------
   
  -<REFERENCE> 
  +<REFERENCE,REFMODIFIER,REFMOD2> 
   TOKEN :
   {
       <#ALPHA_CHAR: ["a"-"z", "A"-"Z"] >
   |   <#ALPHANUM_CHAR: [ "a"-"z", "A"-"Z", "0"-"9" ] >
   |   <#IDENTIFIER_CHAR: [ "a"-"z", "A"-"Z", "0"-"9", "-", "_" ] >
  -|   <IDENTIFIER: <ALPHA_CHAR> (<IDENTIFIER_CHAR>)* >
  -|   <DOT: ".">
  +|   <IDENTIFIER:  <ALPHA_CHAR> (<IDENTIFIER_CHAR>)* >
   |   <SHORTHAND: "!">
  +|   <DOT: ".">
  +    {
  +        if ( bDebugPrint_ )
  +            System.out.print("DOT : switching to " + REFMODIFIER);
  +        SwitchTo(REFMODIFIER);
  +    }
   |   <LCURLY: "{">
  -|   <RCURLY: "}"> : DEFAULT
  +|   <RCURLY: "}">
  +    {
  +        // was :DEFAULT
  +        stateStackPop();
  +    }
   }
   
  -<REFERENCE> 
  +<REFERENCE,REFMODIFIER,REFMOD2> 
   SPECIAL_TOKEN :
   {
       <REFERENCE_TERMINATOR: ~[] >
  -    {
  -        if (inDirective)
  -            SwitchTo(DIRECTIVE);
  -        else if (lparen == rparen)
  +    {   
  +        /*
  +         *  These can terminate a reference, but are needed in subsequent states
  +         */
  +
  +        if (image.toString().equals("="))
           {
  -            lparen = 0;
  -            rparen = 0;
  -            inReference = false;
  -            
  -            SwitchTo(DEFAULT);
  +            input_stream.backup(1);
  +        } 
  +                
  +        inReference = false;
  +    
  +        if ( bDebugPrint_ )
  +            System.out.print("REF_TERM :");
  +        
  +        stateStackPop();
  +
  +        /*
  +         *  I removed LPAREN & RPAREN from REFERENCE;  as there is no LPAREN,RPAREN 
in REF is there is REFMETHOD
  +         */
  +        
  +        if (curLexState != DEFAULT && ( image.toString().equals(")") 
  +                                        || image.toString().equals(",") 
  +                                        || image.toString().equals("[") 
  +                                        || image.toString().equals("]")
  +                                        || image.toString().equals("\n")
  +                                        ) )
  +        {
  +            input_stream.backup(1);
           }
  -        else
  -            SwitchTo(REFERENCE);
  +
       }
   }
   
  @@ -554,14 +774,14 @@
   
   void Statement() #void : {}
   {
  -    Text()
  -|   IfStatement()
  +   IfStatement()
   |   IncludeStatement()
   |   StopStatement()
   |   Reference()
   |   Comment()
   |   SetDirective()
   |   Directive()
  +|   Text()
   }
   
   void Comment() : {}
  @@ -623,7 +843,7 @@
           
           if (d == null)
           {
  -            token_source.SwitchTo(DEFAULT);
  +            token_source.stateStackPop();
               token_source.inDirective = false;
               return jjtThis;
           }            
  @@ -704,7 +924,10 @@
   {
       <TEXT>
   |   <DOT>
  +|   <RPAREN>
  +|   <LPAREN>
   |   <NUMBER_LITERAL>
  +|   <STRING_LITERAL>
   |   t = <ESCAPE_SEQUENCE>
       {
           t.image = t.image.substring(1);
  @@ -719,7 +942,7 @@
   
   void IfStatement() : {}
   {
  -    <IF_DIRECTIVE> <LPAREN> Expression() <RPAREN>
  +     <IF_DIRECTIVE> <LPAREN> Expression() <RPAREN>
       ( Statement() )+ #Block
       [ LOOKAHEAD(1) ( ElseIfStatement() )+ ]
       [ LOOKAHEAD(1) ElseStatement() ]
  
  
  
  1.4       +63 -61    
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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ParserConstants.java      2000/10/09 15:06:32     1.3
  +++ ParserConstants.java      2000/10/11 14:46:26     1.4
  @@ -4,91 +4,90 @@
   public interface ParserConstants {
   
     int EOF = 0;
  -  int ESCAPE_SEQUENCE = 1;
  -  int TEXT = 2;
  -  int LPAREN = 3;
  -  int RPAREN = 4;
  -  int LBRACKET = 5;
  -  int RBRACKET = 6;
  -  int STRING_LITERAL = 7;
  -  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 LBRACKET = 1;
  +  int RBRACKET = 2;
  +  int COMMA = 3;
  +  int LPAREN = 4;
  +  int RPAREN = 5;
  +  int ESCAPE_SEQUENCE = 6;
  +  int TEXT = 7;
  +  int DOLLAR = 8;
  +  int HASH = 12;
  +  int SINGLE_LINE_COMMENT = 13;
  +  int FORMAL_COMMENT = 14;
  +  int MULTI_LINE_COMMENT = 15;
  +  int STRING_LITERAL = 19;
  +  int TRUE = 20;
  +  int FALSE = 21;
  +  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 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 SHORTHAND = 53;
  +  int DOT = 54;
     int LCURLY = 55;
     int RCURLY = 56;
     int REFERENCE_TERMINATOR = 57;
   
  -  int DEFAULT = 0;
  -  int REFERENCE = 1;
  -  int DIRECTIVE = 2;
  -  int IN_MULTI_LINE_COMMENT = 3;
  -  int IN_FORMAL_COMMENT = 4;
  -  int IN_SINGLE_LINE_COMMENT = 5;
  +  int DIRECTIVE = 0;
  +  int REFMODIFIER = 1;
  +  int REFMOD2 = 2;
  +  int DEFAULT = 3;
  +  int REFERENCE = 4;
  +  int IN_MULTI_LINE_COMMENT = 5;
  +  int IN_FORMAL_COMMENT = 6;
  +  int IN_SINGLE_LINE_COMMENT = 7;
   
     String[] tokenImage = {
       "<EOF>",
  -    "<ESCAPE_SEQUENCE>",
  -    "<TEXT>",
  -    "\"(\"",
  -    "\")\"",
       "\"[\"",
       "\"]\"",
  -    "<STRING_LITERAL>",
  -    "<DIGIT>",
  -    "<NUMBER_LITERAL>",
       "\",\"",
  -    "\"true\"",
  -    "\"false\"",
  -    "\"=\"",
  +    "\"(\"",
  +    "\")\"",
  +    "<ESCAPE_SEQUENCE>",
  +    "<TEXT>",
       "\"$\"",
       "\"##\"",
  -    "<token of kind 16>",
  +    "<token of kind 10>",
       "\"#*\"",
       "\"#\"",
       "<SINGLE_LINE_COMMENT>",
       "\"*#\"",
       "\"*#\"",
  -    "<token of kind 22>",
  +    "<token of kind 16>",
       "\" \"",
       "\"\\t\"",
  +    "<STRING_LITERAL>",
  +    "\"true\"",
  +    "\"false\"",
       "<NEWLINE>",
       "\"-\"",
       "\"+\"",
  @@ -104,6 +103,7 @@
       "\"==\"",
       "\"!=\"",
       "\"!\"",
  +    "\"=\"",
       "\"end\"",
       "\"include\"",
       "\"if\"",
  @@ -111,14 +111,16 @@
       "\"else\"",
       "\"set\"",
       "\"stop\"",
  +    "<DIGIT>",
  +    "<NUMBER_LITERAL>",
       "<LETTER>",
       "<WORD>",
       "<ALPHA_CHAR>",
       "<ALPHANUM_CHAR>",
       "<IDENTIFIER_CHAR>",
       "<IDENTIFIER>",
  -    "\".\"",
       "\"!\"",
  +    "\".\"",
       "\"{\"",
       "\"}\"",
       "<REFERENCE_TERMINATOR>",
  
  
  
  1.4       +1285 -487 
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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ParserTokenManager.java   2000/10/09 15:06:32     1.3
  +++ ParserTokenManager.java   2000/10/11 14:46:26     1.4
  @@ -12,6 +12,12 @@
       private int lparen = 0;
       private int rparen = 0;
   
  +    /*
  +     * gmj : make sure this is reset before each parse
  +     */
  +    Stack stateStack = new Stack();
  +    public boolean bDebugPrint_ = false;
  +
       private boolean inReference;
       public boolean inDirective;
       private boolean inComment;
  @@ -86,21 +92,97 @@
               t.specialToken = new_t.specialToken;
           }
       }
  -private final int jjStopStringLiteralDfa_0(int pos, long active0)
  +
  +    /**
  +     *  pushes the current state onto the 'state stack',
  +     *  and maintains the parens counts
  +     *  public because we need it in PD & VM handling
  +     *
  +     *  @return boolean : success.  It can fail if the state machine
  +     *     gets messed up.
  +     */
  +    public boolean stateStackPop()
  +    {
  +
  +        Hashtable hStack;
  +
  +        try
  +        {
  +            hStack = (Hashtable) stateStack.pop();
  +        }
  +        catch( EmptyStackException e)
  +        {
  +            lparen=0;
  +            SwitchTo(DEFAULT);
  +            return false;
  +        }
  +
  +        if( bDebugPrint_ )
  +            System.out.println(" stack pop (" + stateStack.size() + ") : lparen=" + 
( (Integer) hStack.get("lparen")).intValue()
  +                + " newstate=" +  ( (Integer)  hStack.get("lexstate")).intValue() );
  +
  +        lparen = ( (Integer) hStack.get("lparen")).intValue();
  +        rparen = ( (Integer) hStack.get("rparen")).intValue();
  +        SwitchTo( ( (Integer) hStack.get("lexstate")).intValue() );
  +
  +        return true;
  +    }
  +
  +    /**
  +     *  pops a state off the stack, and restores paren counts
  +     *
  +     *  @return boolean : success of operation
  +     */
  +    public boolean stateStackPush()
  +    {
  +        if( bDebugPrint_ )
  +            System.out.println(" (" + stateStack.size() + ") pushing cur state : " 
+ curLexState );
  +
  +        Hashtable hStack = new Hashtable();
  +        hStack.put("lexstate", new Integer( curLexState ) );
  +        hStack.put("lparen", new Integer( lparen ));
  +        hStack.put("rparen", new Integer( rparen ));
  +        lparen = 0;
  +
  +        stateStack.push( hStack );
  +
  +        return true;
  +    }
  +
  +    /**
  +     *  Clears all state variables, resets to
  +     *  start values, clears stateStack.  Call
  +     *  before parsing.
  +     *  @return void
  +     */
  +    public void clearStateVars()
  +    {
  +        stateStack.clear();
  +
  +        lparen = 0;
  +        rparen = 0;
  +        inReference = false;
  +        inDirective = false;
  +        inComment = false;
  +        inSet = false;
  +
  +        return;
  +    }
  +private final int jjStopStringLiteralDfa_3(int pos, long active0)
   {
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x68000L) != 0L)
  +         if ((active0 & 0x1a00L) != 0L)
               return 5;
            return -1;
         default :
            return -1;
      }
   }
  -private final int jjStartNfa_0(int pos, long active0)
  +private final int jjStartNfa_3(int pos, long active0)
   {
  -   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
  +   return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1);
   }
   private final int jjStopAtPos(int pos, int kind)
   {
  @@ -108,48 +190,48 @@
      jjmatchedPos = pos;
      return pos + 1;
   }
  -private final int jjStartNfaWithStates_0(int pos, int kind, int state)
  +private final int jjStartNfaWithStates_3(int pos, int kind, int state)
   {
      jjmatchedKind = kind;
      jjmatchedPos = pos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return pos + 1; }
  -   return jjMoveNfa_0(state, pos + 1);
  +   return jjMoveNfa_3(state, pos + 1);
   }
  -private final int jjMoveStringLiteralDfa0_0()
  +private final int jjMoveStringLiteralDfa0_3()
   {
      switch(curChar)
      {
         case 35:
  -         jjmatchedKind = 18;
  -         return jjMoveStringLiteralDfa1_0(0x28000L);
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_3(0xa00L);
         case 36:
  -         return jjStopAtPos(0, 14);
  +         return jjStopAtPos(0, 8);
         default :
  -         return jjMoveNfa_0(0, 0);
  +         return jjMoveNfa_3(0, 0);
      }
   }
  -private final int jjMoveStringLiteralDfa1_0(long active0)
  +private final int jjMoveStringLiteralDfa1_3(long active0)
   {
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_0(0, active0);
  +      jjStopStringLiteralDfa_3(0, active0);
         return 1;
      }
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
            break;
         case 42:
  -         if ((active0 & 0x20000L) != 0L)
  -            return jjStartNfaWithStates_0(1, 17, 3);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_3(1, 11, 3);
            break;
         default :
            break;
      }
  -   return jjStartNfa_0(0, active0);
  +   return jjStartNfa_3(0, active0);
   }
   private final void jjCheckNAdd(int state)
   {
  @@ -184,7 +266,7 @@
   static final long[] jjbitVec0 = {
      0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
   };
  -private final int jjMoveNfa_0(int startState, int curPos)
  +private final int jjMoveNfa_3(int startState, int curPos)
   {
      int[] nextStates;
      int startsAt = 0;
  @@ -206,22 +288,22 @@
                  case 0:
                     if ((0xffffffe7ffffffffL & l) != 0L)
                     {
  -                     if (kind > 2)
  -                        kind = 2;
  +                     if (kind > 7)
  +                        kind = 7;
                        jjCheckNAdd(2);
                     }
                     else if (curChar == 35)
                        jjstateSet[jjnewStateCnt++] = 5;
                     break;
                  case 1:
  -                  if (kind > 1)
  -                     kind = 1;
  +                  if (kind > 6)
  +                     kind = 6;
                     break;
                  case 2:
                     if ((0xffffffe7ffffffffL & l) == 0L)
                        break;
  -                  if (kind > 2)
  -                     kind = 2;
  +                  if (kind > 7)
  +                     kind = 7;
                     jjCheckNAdd(2);
                     break;
                  case 3:
  @@ -229,8 +311,8 @@
                        jjstateSet[jjnewStateCnt++] = 4;
                     break;
                  case 4:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 5:
                     if (curChar == 42)
  @@ -254,27 +336,27 @@
                  case 0:
                     if ((0xffffffffefffffffL & l) != 0L)
                     {
  -                     if (kind > 2)
  -                        kind = 2;
  +                     if (kind > 7)
  +                        kind = 7;
                        jjCheckNAdd(2);
                     }
                     else if (curChar == 92)
                        jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if (kind > 1)
  -                     kind = 1;
  +                  if (kind > 6)
  +                     kind = 6;
                     break;
                  case 2:
                     if ((0xffffffffefffffffL & l) == 0L)
                        break;
  -                  if (kind > 2)
  -                     kind = 2;
  +                  if (kind > 7)
  +                     kind = 7;
                     jjCheckNAdd(2);
                     break;
                  case 4:
  -                  if (kind > 16)
  -                     kind = 16;
  +                  if (kind > 10)
  +                     kind = 10;
                     break;
                  default : break;
               }
  @@ -292,17 +374,17 @@
                  case 2:
                     if ((jjbitVec0[i2] & l2) == 0L)
                        break;
  -                  if (kind > 2)
  -                     kind = 2;
  +                  if (kind > 7)
  +                     kind = 7;
                     jjCheckNAdd(2);
                     break;
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 1)
  -                     kind = 1;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 6)
  +                     kind = 6;
                     break;
                  case 4:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  default : break;
               }
  @@ -321,74 +403,191 @@
         catch(java.io.IOException e) { return curPos; }
      }
   }
  -private final int jjStopStringLiteralDfa_3(int pos, long active0)
  +private final int jjStopStringLiteralDfa_2(int pos, long active0)
   {
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x68000L) != 0L)
  +         if ((active0 & 0x300000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            return 8;
  +         }
  +         if ((active0 & 0x1a00L) != 0L)
               return 2;
            return -1;
  +      case 1:
  +         if ((active0 & 0x800L) != 0L)
  +            return 0;
  +         if ((active0 & 0x300000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            jjmatchedPos = 1;
  +            return 8;
  +         }
  +         return -1;
  +      case 2:
  +         if ((active0 & 0x300000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            jjmatchedPos = 2;
  +            return 8;
  +         }
  +         return -1;
  +      case 3:
  +         if ((active0 & 0x200000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            jjmatchedPos = 3;
  +            return 8;
  +         }
  +         if ((active0 & 0x100000L) != 0L)
  +            return 8;
  +         return -1;
         default :
            return -1;
      }
   }
  -private final int jjStartNfa_3(int pos, long active0)
  +private final int jjStartNfa_2(int pos, long active0)
   {
  -   return jjMoveNfa_3(jjStopStringLiteralDfa_3(pos, active0), pos + 1);
  +   return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1);
   }
  -private final int jjStartNfaWithStates_3(int pos, int kind, int state)
  +private final int jjStartNfaWithStates_2(int pos, int kind, int state)
   {
      jjmatchedKind = kind;
      jjmatchedPos = pos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return pos + 1; }
  -   return jjMoveNfa_3(state, pos + 1);
  +   return jjMoveNfa_2(state, pos + 1);
   }
  -private final int jjMoveStringLiteralDfa0_3()
  +private final int jjMoveStringLiteralDfa0_2()
   {
      switch(curChar)
      {
  +      case 33:
  +         return jjStopAtPos(0, 53);
         case 35:
  -         jjmatchedKind = 18;
  -         return jjMoveStringLiteralDfa1_3(0x28000L);
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_2(0xa00L);
         case 36:
  -         return jjStopAtPos(0, 14);
  -      case 42:
  -         return jjMoveStringLiteralDfa1_3(0x200000L);
  +         return jjStopAtPos(0, 8);
  +      case 40:
  +         return jjStopAtPos(0, 4);
  +      case 41:
  +         return jjStopAtPos(0, 5);
  +      case 44:
  +         return jjStopAtPos(0, 3);
  +      case 46:
  +         return jjStopAtPos(0, 54);
  +      case 91:
  +         return jjStopAtPos(0, 1);
  +      case 93:
  +         return jjStopAtPos(0, 2);
  +      case 102:
  +         return jjMoveStringLiteralDfa1_2(0x200000L);
  +      case 116:
  +         return jjMoveStringLiteralDfa1_2(0x100000L);
  +      case 123:
  +         return jjStopAtPos(0, 55);
  +      case 125:
  +         return jjStopAtPos(0, 56);
         default :
  -         return jjMoveNfa_3(3, 0);
  +         return jjMoveNfa_2(3, 0);
      }
   }
  -private final int jjMoveStringLiteralDfa1_3(long active0)
  +private final int jjMoveStringLiteralDfa1_2(long active0)
   {
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_3(0, active0);
  +      jjStopStringLiteralDfa_2(0, active0);
         return 1;
      }
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  -         else if ((active0 & 0x200000L) != 0L)
  -            return jjStopAtPos(1, 21);
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
            break;
         case 42:
  -         if ((active0 & 0x20000L) != 0L)
  -            return jjStartNfaWithStates_3(1, 17, 0);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_2(1, 11, 0);
            break;
  +      case 97:
  +         return jjMoveStringLiteralDfa2_2(active0, 0x200000L);
  +      case 114:
  +         return jjMoveStringLiteralDfa2_2(active0, 0x100000L);
         default :
            break;
      }
  -   return jjStartNfa_3(0, active0);
  +   return jjStartNfa_2(0, active0);
   }
  -private final int jjMoveNfa_3(int startState, int curPos)
  +private final int jjMoveStringLiteralDfa2_2(long old0, long active0)
  +{
  +   if (((active0 &= old0)) == 0L)
  +      return jjStartNfa_2(0, old0); 
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_2(1, active0);
  +      return 2;
  +   }
  +   switch(curChar)
  +   {
  +      case 108:
  +         return jjMoveStringLiteralDfa3_2(active0, 0x200000L);
  +      case 117:
  +         return jjMoveStringLiteralDfa3_2(active0, 0x100000L);
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_2(1, active0);
  +}
  +private final int jjMoveStringLiteralDfa3_2(long old0, long active0)
  +{
  +   if (((active0 &= old0)) == 0L)
  +      return jjStartNfa_2(1, old0); 
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_2(2, active0);
  +      return 3;
  +   }
  +   switch(curChar)
  +   {
  +      case 101:
  +         if ((active0 & 0x100000L) != 0L)
  +            return jjStartNfaWithStates_2(3, 20, 8);
  +         break;
  +      case 115:
  +         return jjMoveStringLiteralDfa4_2(active0, 0x200000L);
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_2(2, active0);
  +}
  +private final int jjMoveStringLiteralDfa4_2(long old0, long active0)
  +{
  +   if (((active0 &= old0)) == 0L)
  +      return jjStartNfa_2(2, old0); 
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_2(3, active0);
  +      return 4;
  +   }
  +   switch(curChar)
  +   {
  +      case 101:
  +         if ((active0 & 0x200000L) != 0L)
  +            return jjStartNfaWithStates_2(4, 21, 8);
  +         break;
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_2(3, active0);
  +}
  +private final int jjMoveNfa_2(int startState, int curPos)
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 4;
  +   jjnewStateCnt = 9;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -403,22 +602,43 @@
            {
               switch(jjstateSet[--i])
               {
  +               case 3:
  +                  if (curChar == 34)
  +                     jjCheckNAddTwoStates(5, 6);
  +                  else if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 2;
  +                  break;
                  case 0:
                     if (curChar == 42)
                        jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 2:
                     if (curChar == 42)
                        jjstateSet[jjnewStateCnt++] = 0;
                     break;
  -               case 3:
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  +               case 4:
  +                  if (curChar == 34)
  +                     jjCheckNAddTwoStates(5, 6);
  +                  break;
  +               case 5:
  +                  if ((0xfffffffbffffdbffL & l) != 0L)
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
  +               case 6:
  +                  if (curChar == 34 && kind > 19)
  +                     kind = 19;
  +                  break;
  +               case 8:
  +                  if ((0x3ff200000000000L & l) == 0L)
  +                     break;
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjstateSet[jjnewStateCnt++] = 8;
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -430,8 +650,26 @@
            {
               switch(jjstateSet[--i])
               {
  +               case 3:
  +                  if ((0x7fffffe07fffffeL & l) == 0L)
  +                     break;
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjCheckNAdd(8);
  +                  break;
                  case 1:
  -                  kind = 16;
  +                  if (kind > 10)
  +                     kind = 10;
  +                  break;
  +               case 5:
  +                  jjAddStates(0, 1);
  +                  break;
  +               case 8:
  +                  if ((0x7fffffe87fffffeL & l) == 0L)
  +                     break;
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjCheckNAdd(8);
                     break;
                  default : break;
               }
  @@ -446,9 +684,13 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
                     break;
  +               case 5:
  +                  if ((jjbitVec0[i2] & l2) != 0L)
  +                     jjAddStates(0, 1);
  +                  break;
                  default : break;
               }
            } while(i != startsAt);
  @@ -460,7 +702,7 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
  @@ -471,7 +713,7 @@
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x68000L) != 0L)
  +         if ((active0 & 0x1a00L) != 0L)
               return 2;
            return -1;
         default :
  @@ -495,10 +737,12 @@
      switch(curChar)
      {
         case 35:
  -         jjmatchedKind = 18;
  -         return jjMoveStringLiteralDfa1_5(0x28000L);
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_5(0xa00L);
         case 36:
  -         return jjStopAtPos(0, 14);
  +         return jjStopAtPos(0, 8);
  +      case 42:
  +         return jjMoveStringLiteralDfa1_5(0x8000L);
         default :
            return jjMoveNfa_5(3, 0);
      }
  @@ -513,12 +757,14 @@
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x8000L) != 0L)
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
  +         else if ((active0 & 0x8000L) != 0L)
               return jjStopAtPos(1, 15);
            break;
         case 42:
  -         if ((active0 & 0x20000L) != 0L)
  -            return jjStartNfaWithStates_5(1, 17, 0);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_5(1, 11, 0);
            break;
         default :
            break;
  @@ -529,7 +775,7 @@
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 7;
  +   jjnewStateCnt = 4;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -544,40 +790,21 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 3:
  -                  if ((0x2400L & l) != 0L)
  -                  {
  -                     if (kind > 19)
  -                        kind = 19;
  -                  }
  -                  else if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 2;
  -                  if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  -                  break;
                  case 0:
                     if (curChar == 42)
                        jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 2:
                     if (curChar == 42)
                        jjstateSet[jjnewStateCnt++] = 0;
  -                  break;
  -               case 4:
  -                  if ((0x2400L & l) != 0L && kind > 19)
  -                     kind = 19;
  -                  break;
  -               case 5:
  -                  if (curChar == 10 && kind > 19)
  -                     kind = 19;
                     break;
  -               case 6:
  -                  if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  +               case 3:
  +                  if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     break;
                  default : break;
               }
  @@ -591,7 +818,7 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  kind = 16;
  +                  kind = 10;
                     break;
                  default : break;
               }
  @@ -606,8 +833,8 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  default : break;
               }
  @@ -620,41 +847,504 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
      }
   }
  -private final int jjStopStringLiteralDfa_2(int pos, long active0)
  +private final int jjStopStringLiteralDfa_7(int pos, long active0)
   {
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x7f0000001800L) != 0L)
  -         {
  -            jjmatchedKind = 48;
  -            return 11;
  -         }
  -         if ((active0 & 0x68000L) != 0L)
  -            return 6;
  +         if ((active0 & 0x1a00L) != 0L)
  +            return 2;
            return -1;
  -      case 1:
  -         if ((active0 & 0x20000L) != 0L)
  -            return 4;
  -         if ((active0 & 0x7b0000001800L) != 0L)
  -         {
  +      default :
  +         return -1;
  +   }
  +}
  +private final int jjStartNfa_7(int pos, long active0)
  +{
  +   return jjMoveNfa_7(jjStopStringLiteralDfa_7(pos, active0), pos + 1);
  +}
  +private final int jjStartNfaWithStates_7(int pos, int kind, int state)
  +{
  +   jjmatchedKind = kind;
  +   jjmatchedPos = pos;
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) { return pos + 1; }
  +   return jjMoveNfa_7(state, pos + 1);
  +}
  +private final int jjMoveStringLiteralDfa0_7()
  +{
  +   switch(curChar)
  +   {
  +      case 35:
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_7(0xa00L);
  +      case 36:
  +         return jjStopAtPos(0, 8);
  +      default :
  +         return jjMoveNfa_7(3, 0);
  +   }
  +}
  +private final int jjMoveStringLiteralDfa1_7(long active0)
  +{
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_7(0, active0);
  +      return 1;
  +   }
  +   switch(curChar)
  +   {
  +      case 35:
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
  +         break;
  +      case 42:
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_7(1, 11, 0);
  +         break;
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_7(0, active0);
  +}
  +private final int jjMoveNfa_7(int startState, int curPos)
  +{
  +   int[] nextStates;
  +   int startsAt = 0;
  +   jjnewStateCnt = 7;
  +   int i = 1;
  +   jjstateSet[0] = startState;
  +   int j, kind = 0x7fffffff;
  +   for (;;)
  +   {
  +      if (++jjround == 0x7fffffff)
  +         ReInitRounds();
  +      if (curChar < 64)
  +      {
  +         long l = 1L << curChar;
  +         MatchLoop: do
  +         {
  +            switch(jjstateSet[--i])
  +            {
  +               case 3:
  +                  if ((0x2400L & l) != 0L)
  +                  {
  +                     if (kind > 13)
  +                        kind = 13;
  +                  }
  +                  else if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 2;
  +                  if (curChar == 13)
  +                     jjstateSet[jjnewStateCnt++] = 5;
  +                  break;
  +               case 0:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 1;
  +                  break;
  +               case 1:
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
  +                  break;
  +               case 2:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 0;
  +                  break;
  +               case 4:
  +                  if ((0x2400L & l) != 0L && kind > 13)
  +                     kind = 13;
  +                  break;
  +               case 5:
  +                  if (curChar == 10 && kind > 13)
  +                     kind = 13;
  +                  break;
  +               case 6:
  +                  if (curChar == 13)
  +                     jjstateSet[jjnewStateCnt++] = 5;
  +                  break;
  +               default : break;
  +            }
  +         } while(i != startsAt);
  +      }
  +      else if (curChar < 128)
  +      {
  +         long l = 1L << (curChar & 077);
  +         MatchLoop: do
  +         {
  +            switch(jjstateSet[--i])
  +            {
  +               case 1:
  +                  kind = 10;
  +                  break;
  +               default : break;
  +            }
  +         } while(i != startsAt);
  +      }
  +      else
  +      {
  +         int i2 = (curChar & 0xff) >> 6;
  +         long l2 = 1L << (curChar & 077);
  +         MatchLoop: do
  +         {
  +            switch(jjstateSet[--i])
  +            {
  +               case 1:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
  +                  break;
  +               default : break;
  +            }
  +         } while(i != startsAt);
  +      }
  +      if (kind != 0x7fffffff)
  +      {
  +         jjmatchedKind = kind;
  +         jjmatchedPos = curPos;
  +         kind = 0x7fffffff;
  +      }
  +      ++curPos;
  +      if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
  +         return curPos;
  +      try { curChar = input_stream.readChar(); }
  +      catch(java.io.IOException e) { return curPos; }
  +   }
  +}
  +private final int jjStopStringLiteralDfa_1(int pos, long active0)
  +{
  +   switch (pos)
  +   {
  +      case 0:
  +         if ((active0 & 0x300000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            return 8;
  +         }
  +         if ((active0 & 0x1a00L) != 0L)
  +            return 2;
  +         return -1;
  +      case 1:
  +         if ((active0 & 0x800L) != 0L)
  +            return 0;
  +         if ((active0 & 0x300000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            jjmatchedPos = 1;
  +            return 8;
  +         }
  +         return -1;
  +      case 2:
  +         if ((active0 & 0x300000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            jjmatchedPos = 2;
  +            return 8;
  +         }
  +         return -1;
  +      case 3:
  +         if ((active0 & 0x200000L) != 0L)
  +         {
  +            jjmatchedKind = 52;
  +            jjmatchedPos = 3;
  +            return 8;
  +         }
  +         if ((active0 & 0x100000L) != 0L)
  +            return 8;
  +         return -1;
  +      default :
  +         return -1;
  +   }
  +}
  +private final int jjStartNfa_1(int pos, long active0)
  +{
  +   return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
  +}
  +private final int jjStartNfaWithStates_1(int pos, int kind, int state)
  +{
  +   jjmatchedKind = kind;
  +   jjmatchedPos = pos;
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) { return pos + 1; }
  +   return jjMoveNfa_1(state, pos + 1);
  +}
  +private final int jjMoveStringLiteralDfa0_1()
  +{
  +   switch(curChar)
  +   {
  +      case 33:
  +         return jjStopAtPos(0, 53);
  +      case 35:
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_1(0xa00L);
  +      case 36:
  +         return jjStopAtPos(0, 8);
  +      case 40:
  +         return jjStopAtPos(0, 4);
  +      case 41:
  +         return jjStopAtPos(0, 5);
  +      case 46:
  +         return jjStopAtPos(0, 54);
  +      case 91:
  +         return jjStopAtPos(0, 1);
  +      case 93:
  +         return jjStopAtPos(0, 2);
  +      case 102:
  +         return jjMoveStringLiteralDfa1_1(0x200000L);
  +      case 116:
  +         return jjMoveStringLiteralDfa1_1(0x100000L);
  +      case 123:
  +         return jjStopAtPos(0, 55);
  +      case 125:
  +         return jjStopAtPos(0, 56);
  +      default :
  +         return jjMoveNfa_1(3, 0);
  +   }
  +}
  +private final int jjMoveStringLiteralDfa1_1(long active0)
  +{
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_1(0, active0);
  +      return 1;
  +   }
  +   switch(curChar)
  +   {
  +      case 35:
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
  +         break;
  +      case 42:
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_1(1, 11, 0);
  +         break;
  +      case 97:
  +         return jjMoveStringLiteralDfa2_1(active0, 0x200000L);
  +      case 114:
  +         return jjMoveStringLiteralDfa2_1(active0, 0x100000L);
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_1(0, active0);
  +}
  +private final int jjMoveStringLiteralDfa2_1(long old0, long active0)
  +{
  +   if (((active0 &= old0)) == 0L)
  +      return jjStartNfa_1(0, old0); 
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_1(1, active0);
  +      return 2;
  +   }
  +   switch(curChar)
  +   {
  +      case 108:
  +         return jjMoveStringLiteralDfa3_1(active0, 0x200000L);
  +      case 117:
  +         return jjMoveStringLiteralDfa3_1(active0, 0x100000L);
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_1(1, active0);
  +}
  +private final int jjMoveStringLiteralDfa3_1(long old0, long active0)
  +{
  +   if (((active0 &= old0)) == 0L)
  +      return jjStartNfa_1(1, old0); 
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_1(2, active0);
  +      return 3;
  +   }
  +   switch(curChar)
  +   {
  +      case 101:
  +         if ((active0 & 0x100000L) != 0L)
  +            return jjStartNfaWithStates_1(3, 20, 8);
  +         break;
  +      case 115:
  +         return jjMoveStringLiteralDfa4_1(active0, 0x200000L);
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_1(2, active0);
  +}
  +private final int jjMoveStringLiteralDfa4_1(long old0, long active0)
  +{
  +   if (((active0 &= old0)) == 0L)
  +      return jjStartNfa_1(2, old0); 
  +   try { curChar = input_stream.readChar(); }
  +   catch(java.io.IOException e) {
  +      jjStopStringLiteralDfa_1(3, active0);
  +      return 4;
  +   }
  +   switch(curChar)
  +   {
  +      case 101:
  +         if ((active0 & 0x200000L) != 0L)
  +            return jjStartNfaWithStates_1(4, 21, 8);
  +         break;
  +      default :
  +         break;
  +   }
  +   return jjStartNfa_1(3, active0);
  +}
  +private final int jjMoveNfa_1(int startState, int curPos)
  +{
  +   int[] nextStates;
  +   int startsAt = 0;
  +   jjnewStateCnt = 9;
  +   int i = 1;
  +   jjstateSet[0] = startState;
  +   int j, kind = 0x7fffffff;
  +   for (;;)
  +   {
  +      if (++jjround == 0x7fffffff)
  +         ReInitRounds();
  +      if (curChar < 64)
  +      {
  +         long l = 1L << curChar;
  +         MatchLoop: do
  +         {
  +            switch(jjstateSet[--i])
  +            {
  +               case 3:
  +                  if (curChar == 34)
  +                     jjCheckNAddTwoStates(5, 6);
  +                  else if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 2;
  +                  break;
  +               case 0:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 1;
  +                  break;
  +               case 1:
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
  +                  break;
  +               case 2:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 0;
  +                  break;
  +               case 4:
  +                  if (curChar == 34)
  +                     jjCheckNAddTwoStates(5, 6);
  +                  break;
  +               case 5:
  +                  if ((0xfffffffbffffdbffL & l) != 0L)
  +                     jjCheckNAddTwoStates(5, 6);
  +                  break;
  +               case 6:
  +                  if (curChar == 34 && kind > 19)
  +                     kind = 19;
  +                  break;
  +               case 8:
  +                  if ((0x3ff200000000000L & l) == 0L)
  +                     break;
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjstateSet[jjnewStateCnt++] = 8;
  +                  break;
  +               default : break;
  +            }
  +         } while(i != startsAt);
  +      }
  +      else if (curChar < 128)
  +      {
  +         long l = 1L << (curChar & 077);
  +         MatchLoop: do
  +         {
  +            switch(jjstateSet[--i])
  +            {
  +               case 3:
  +                  if ((0x7fffffe07fffffeL & l) == 0L)
  +                     break;
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjCheckNAdd(8);
  +                  break;
  +               case 1:
  +                  if (kind > 10)
  +                     kind = 10;
  +                  break;
  +               case 5:
  +                  jjAddStates(0, 1);
  +                  break;
  +               case 8:
  +                  if ((0x7fffffe87fffffeL & l) == 0L)
  +                     break;
  +                  if (kind > 52)
  +                     kind = 52;
  +                  jjCheckNAdd(8);
  +                  break;
  +               default : break;
  +            }
  +         } while(i != startsAt);
  +      }
  +      else
  +      {
  +         int i2 = (curChar & 0xff) >> 6;
  +         long l2 = 1L << (curChar & 077);
  +         MatchLoop: do
  +         {
  +            switch(jjstateSet[--i])
  +            {
  +               case 1:
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
  +                  break;
  +               case 5:
  +                  if ((jjbitVec0[i2] & l2) != 0L)
  +                     jjAddStates(0, 1);
  +                  break;
  +               default : break;
  +            }
  +         } while(i != startsAt);
  +      }
  +      if (kind != 0x7fffffff)
  +      {
  +         jjmatchedKind = kind;
  +         jjmatchedPos = curPos;
  +         kind = 0x7fffffff;
  +      }
  +      ++curPos;
  +      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
  +         return curPos;
  +      try { curChar = input_stream.readChar(); }
  +      catch(java.io.IOException e) { return curPos; }
  +   }
  +}
  +private final int jjStopStringLiteralDfa_0(int pos, long active0)
  +{
  +   switch (pos)
  +   {
  +      case 0:
  +         if ((active0 & 0x1a00L) != 0L)
  +            return 2;
  +         if ((active0 & 0x1fc000300000L) != 0L)
  +         {
               jjmatchedKind = 48;
  +            return 11;
  +         }
  +         return -1;
  +      case 1:
  +         if ((active0 & 0x800L) != 0L)
  +            return 0;
  +         if ((active0 & 0x1ec000300000L) != 0L)
  +         {
  +            jjmatchedKind = 48;
               jjmatchedPos = 1;
               return 11;
            }
  -         if ((active0 & 0x40000000000L) != 0L)
  +         if ((active0 & 0x10000000000L) != 0L)
               return 11;
            return -1;
         case 2:
  -         if ((active0 & 0x210000000000L) != 0L)
  +         if ((active0 & 0x84000000000L) != 0L)
               return 11;
  -         if ((active0 & 0x5a0000001800L) != 0L)
  +         if ((active0 & 0x168000300000L) != 0L)
            {
               jjmatchedKind = 48;
               jjmatchedPos = 2;
  @@ -662,7 +1352,7 @@
            }
            return -1;
         case 3:
  -         if ((active0 & 0x20000001000L) != 0L)
  +         if ((active0 & 0x8000200000L) != 0L)
            {
               if (jjmatchedPos != 3)
               {
  @@ -671,23 +1361,23 @@
               }
               return 11;
            }
  -         if ((active0 & 0x580000000800L) != 0L)
  +         if ((active0 & 0x160000100000L) != 0L)
               return 11;
            return -1;
         case 4:
  -         if ((active0 & 0xa0000000000L) != 0L)
  +         if ((active0 & 0x28000000000L) != 0L)
            {
               jjmatchedKind = 48;
               jjmatchedPos = 4;
               return 11;
            }
  -         if ((active0 & 0x1000L) != 0L)
  +         if ((active0 & 0x200000L) != 0L)
               return 11;
            return -1;
         case 5:
  -         if ((active0 & 0x80000000000L) != 0L)
  -            return 11;
            if ((active0 & 0x20000000000L) != 0L)
  +            return 11;
  +         if ((active0 & 0x8000000000L) != 0L)
            {
               jjmatchedKind = 48;
               jjmatchedPos = 5;
  @@ -698,267 +1388,267 @@
            return -1;
      }
   }
  -private final int jjStartNfa_2(int pos, long active0)
  +private final int jjStartNfa_0(int pos, long active0)
   {
  -   return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1);
  +   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
   }
  -private final int jjStartNfaWithStates_2(int pos, int kind, int state)
  +private final int jjStartNfaWithStates_0(int pos, int kind, int state)
   {
      jjmatchedKind = kind;
      jjmatchedPos = pos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return pos + 1; }
  -   return jjMoveNfa_2(state, pos + 1);
  +   return jjMoveNfa_0(state, pos + 1);
   }
  -private final int jjMoveStringLiteralDfa0_2()
  +private final int jjMoveStringLiteralDfa0_0()
   {
      switch(curChar)
      {
         case 33:
  -         jjmatchedKind = 39;
  -         return jjMoveStringLiteralDfa1_2(0x4000000000L);
  +         jjmatchedKind = 36;
  +         return jjMoveStringLiteralDfa1_0(0x800000000L);
         case 35:
  -         jjmatchedKind = 18;
  -         return jjMoveStringLiteralDfa1_2(0x28000L);
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_0(0xa00L);
         case 36:
  -         return jjStopAtPos(0, 14);
  +         return jjStopAtPos(0, 8);
         case 37:
  -         return jjStopAtPos(0, 30);
  +         return jjStopAtPos(0, 27);
         case 38:
  -         return jjMoveStringLiteralDfa1_2(0x80000000L);
  +         return jjMoveStringLiteralDfa1_0(0x10000000L);
         case 40:
  -         return jjStopAtPos(0, 3);
  -      case 41:
            return jjStopAtPos(0, 4);
  +      case 41:
  +         return jjStopAtPos(0, 5);
         case 42:
  -         return jjStopAtPos(0, 28);
  +         return jjStopAtPos(0, 25);
         case 43:
  -         return jjStopAtPos(0, 27);
  +         return jjStopAtPos(0, 24);
         case 44:
  -         return jjStopAtPos(0, 10);
  +         return jjStopAtPos(0, 3);
         case 45:
  -         return jjStopAtPos(0, 26);
  +         return jjStopAtPos(0, 23);
         case 47:
  -         return jjStopAtPos(0, 29);
  +         return jjStopAtPos(0, 26);
         case 60:
  -         jjmatchedKind = 33;
  -         return jjMoveStringLiteralDfa1_2(0x400000000L);
  +         jjmatchedKind = 30;
  +         return jjMoveStringLiteralDfa1_0(0x80000000L);
         case 61:
  -         jjmatchedKind = 13;
  -         return jjMoveStringLiteralDfa1_2(0x2000000000L);
  +         jjmatchedKind = 37;
  +         return jjMoveStringLiteralDfa1_0(0x400000000L);
         case 62:
  -         jjmatchedKind = 35;
  -         return jjMoveStringLiteralDfa1_2(0x1000000000L);
  +         jjmatchedKind = 32;
  +         return jjMoveStringLiteralDfa1_0(0x200000000L);
         case 91:
  -         return jjStopAtPos(0, 5);
  +         return jjStopAtPos(0, 1);
         case 93:
  -         return jjStopAtPos(0, 6);
  +         return jjStopAtPos(0, 2);
         case 101:
  -         return jjMoveStringLiteralDfa1_2(0x190000000000L);
  +         return jjMoveStringLiteralDfa1_0(0x64000000000L);
         case 102:
  -         return jjMoveStringLiteralDfa1_2(0x1000L);
  +         return jjMoveStringLiteralDfa1_0(0x200000L);
         case 105:
  -         return jjMoveStringLiteralDfa1_2(0x60000000000L);
  +         return jjMoveStringLiteralDfa1_0(0x18000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa1_2(0x600000000000L);
  +         return jjMoveStringLiteralDfa1_0(0x180000000000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_2(0x800L);
  +         return jjMoveStringLiteralDfa1_0(0x100000L);
         case 124:
  -         return jjMoveStringLiteralDfa1_2(0x100000000L);
  +         return jjMoveStringLiteralDfa1_0(0x20000000L);
         default :
  -         return jjMoveNfa_2(0, 0);
  +         return jjMoveNfa_0(3, 0);
      }
   }
  -private final int jjMoveStringLiteralDfa1_2(long active0)
  +private final int jjMoveStringLiteralDfa1_0(long active0)
   {
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_2(0, active0);
  +      jjStopStringLiteralDfa_0(0, active0);
         return 1;
      }
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
            break;
         case 38:
  -         if ((active0 & 0x80000000L) != 0L)
  -            return jjStopAtPos(1, 31);
  +         if ((active0 & 0x10000000L) != 0L)
  +            return jjStopAtPos(1, 28);
            break;
         case 42:
  -         if ((active0 & 0x20000L) != 0L)
  -            return jjStartNfaWithStates_2(1, 17, 4);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_0(1, 11, 0);
            break;
         case 61:
  -         if ((active0 & 0x400000000L) != 0L)
  +         if ((active0 & 0x80000000L) != 0L)
  +            return jjStopAtPos(1, 31);
  +         else if ((active0 & 0x200000000L) != 0L)
  +            return jjStopAtPos(1, 33);
  +         else if ((active0 & 0x400000000L) != 0L)
               return jjStopAtPos(1, 34);
  -         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);
  +         else if ((active0 & 0x800000000L) != 0L)
  +            return jjStopAtPos(1, 35);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x1000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x200000L);
         case 101:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x200000000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x80000000000L);
         case 102:
  -         if ((active0 & 0x40000000000L) != 0L)
  -            return jjStartNfaWithStates_2(1, 42, 11);
  +         if ((active0 & 0x10000000000L) != 0L)
  +            return jjStartNfaWithStates_0(1, 40, 11);
            break;
         case 108:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x180000000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x60000000000L);
         case 110:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x30000000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0xc000000000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x800L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x100000L);
         case 116:
  -         return jjMoveStringLiteralDfa2_2(active0, 0x400000000000L);
  +         return jjMoveStringLiteralDfa2_0(active0, 0x100000000000L);
         case 124:
  -         if ((active0 & 0x100000000L) != 0L)
  -            return jjStopAtPos(1, 32);
  +         if ((active0 & 0x20000000L) != 0L)
  +            return jjStopAtPos(1, 29);
            break;
         default :
            break;
      }
  -   return jjStartNfa_2(0, active0);
  +   return jjStartNfa_0(0, active0);
   }
  -private final int jjMoveStringLiteralDfa2_2(long old0, long active0)
  +private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_2(0, old0); 
  +      return jjStartNfa_0(0, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_2(1, active0);
  +      jjStopStringLiteralDfa_0(1, active0);
         return 2;
      }
      switch(curChar)
      {
         case 99:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x20000000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000L);
         case 100:
  -         if ((active0 & 0x10000000000L) != 0L)
  -            return jjStartNfaWithStates_2(2, 40, 11);
  +         if ((active0 & 0x4000000000L) != 0L)
  +            return jjStartNfaWithStates_0(2, 38, 11);
            break;
         case 108:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x1000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x200000L);
         case 111:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x400000000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000L);
         case 115:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x180000000000L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x60000000000L);
         case 116:
  -         if ((active0 & 0x200000000000L) != 0L)
  -            return jjStartNfaWithStates_2(2, 45, 11);
  +         if ((active0 & 0x80000000000L) != 0L)
  +            return jjStartNfaWithStates_0(2, 43, 11);
            break;
         case 117:
  -         return jjMoveStringLiteralDfa3_2(active0, 0x800L);
  +         return jjMoveStringLiteralDfa3_0(active0, 0x100000L);
         default :
            break;
      }
  -   return jjStartNfa_2(1, active0);
  +   return jjStartNfa_0(1, active0);
   }
  -private final int jjMoveStringLiteralDfa3_2(long old0, long active0)
  +private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_2(1, old0); 
  +      return jjStartNfa_0(1, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_2(2, active0);
  +      jjStopStringLiteralDfa_0(2, active0);
         return 3;
      }
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x800L) != 0L)
  -            return jjStartNfaWithStates_2(3, 11, 11);
  -         else if ((active0 & 0x100000000000L) != 0L)
  +         if ((active0 & 0x100000L) != 0L)
  +            return jjStartNfaWithStates_0(3, 20, 11);
  +         else if ((active0 & 0x40000000000L) != 0L)
            {
  -            jjmatchedKind = 44;
  +            jjmatchedKind = 42;
               jjmatchedPos = 3;
            }
  -         return jjMoveStringLiteralDfa4_2(active0, 0x80000000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L);
         case 108:
  -         return jjMoveStringLiteralDfa4_2(active0, 0x20000000000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000L);
         case 112:
  -         if ((active0 & 0x400000000000L) != 0L)
  -            return jjStartNfaWithStates_2(3, 46, 11);
  +         if ((active0 & 0x100000000000L) != 0L)
  +            return jjStartNfaWithStates_0(3, 44, 11);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_2(active0, 0x1000L);
  +         return jjMoveStringLiteralDfa4_0(active0, 0x200000L);
         default :
            break;
      }
  -   return jjStartNfa_2(2, active0);
  +   return jjStartNfa_0(2, active0);
   }
  -private final int jjMoveStringLiteralDfa4_2(long old0, long active0)
  +private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_2(2, old0); 
  +      return jjStartNfa_0(2, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_2(3, active0);
  +      jjStopStringLiteralDfa_0(3, active0);
         return 4;
      }
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStartNfaWithStates_2(4, 12, 11);
  +         if ((active0 & 0x200000L) != 0L)
  +            return jjStartNfaWithStates_0(4, 21, 11);
            break;
         case 105:
  -         return jjMoveStringLiteralDfa5_2(active0, 0x80000000000L);
  +         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
         case 117:
  -         return jjMoveStringLiteralDfa5_2(active0, 0x20000000000L);
  +         return jjMoveStringLiteralDfa5_0(active0, 0x8000000000L);
         default :
            break;
      }
  -   return jjStartNfa_2(3, active0);
  +   return jjStartNfa_0(3, active0);
   }
  -private final int jjMoveStringLiteralDfa5_2(long old0, long active0)
  +private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_2(3, old0); 
  +      return jjStartNfa_0(3, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_2(4, active0);
  +      jjStopStringLiteralDfa_0(4, active0);
         return 5;
      }
      switch(curChar)
      {
         case 100:
  -         return jjMoveStringLiteralDfa6_2(active0, 0x20000000000L);
  +         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000L);
         case 102:
  -         if ((active0 & 0x80000000000L) != 0L)
  -            return jjStartNfaWithStates_2(5, 43, 11);
  +         if ((active0 & 0x20000000000L) != 0L)
  +            return jjStartNfaWithStates_0(5, 41, 11);
            break;
         default :
            break;
      }
  -   return jjStartNfa_2(4, active0);
  +   return jjStartNfa_0(4, active0);
   }
  -private final int jjMoveStringLiteralDfa6_2(long old0, long active0)
  +private final int jjMoveStringLiteralDfa6_0(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_2(4, old0); 
  +      return jjStartNfa_0(4, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_2(5, active0);
  +      jjStopStringLiteralDfa_0(5, active0);
         return 6;
      }
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x20000000000L) != 0L)
  -            return jjStartNfaWithStates_2(6, 41, 11);
  +         if ((active0 & 0x8000000000L) != 0L)
  +            return jjStartNfaWithStates_0(6, 39, 11);
            break;
         default :
            break;
      }
  -   return jjStartNfa_2(5, active0);
  +   return jjStartNfa_0(5, active0);
   }
  -private final int jjMoveNfa_2(int startState, int curPos)
  +private final int jjMoveNfa_0(int startState, int curPos)
   {
      int[] nextStates;
      int startsAt = 0;
  @@ -977,67 +1667,67 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 0:
  +               case 3:
                     if ((0x3ff000000000000L & l) != 0L)
                     {
  -                     if (kind > 9)
  -                        kind = 9;
  -                     jjCheckNAdd(3);
  +                     if (kind > 46)
  +                        kind = 46;
  +                     jjCheckNAdd(10);
                     }
                     else if ((0x2400L & l) != 0L)
                     {
  -                     if (kind > 25)
  -                        kind = 25;
  +                     if (kind > 22)
  +                        kind = 22;
                     }
  -                  else if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 6;
                     else if (curChar == 34)
  -                     jjCheckNAddTwoStates(1, 2);
  +                     jjCheckNAddTwoStates(5, 6);
  +                  else if (curChar == 35)
  +                     jjstateSet[jjnewStateCnt++] = 2;
                     if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 9;
  +                     jjstateSet[jjnewStateCnt++] = 8;
  +                  break;
  +               case 0:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffffbffffdbffL & l) != 0L)
  -                     jjCheckNAddTwoStates(1, 2);
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 2:
  -                  if (curChar == 34 && kind > 7)
  -                     kind = 7;
  -                  break;
  -               case 3:
  -                  if ((0x3ff000000000000L & l) == 0L)
  -                     break;
  -                  if (kind > 9)
  -                     kind = 9;
  -                  jjCheckNAdd(3);
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 0;
                     break;
                  case 4:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  +                  if (curChar == 34)
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
                  case 5:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((0xfffffffbffffdbffL & l) != 0L)
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
                  case 6:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 4;
  +                  if (curChar == 34 && kind > 19)
  +                     kind = 19;
                     break;
                  case 7:
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 6;
  +                  if ((0x2400L & l) != 0L && kind > 22)
  +                     kind = 22;
                     break;
                  case 8:
  -                  if ((0x2400L & l) != 0L && kind > 25)
  -                     kind = 25;
  +                  if (curChar == 10 && kind > 22)
  +                     kind = 22;
                     break;
                  case 9:
  -                  if (curChar == 10 && kind > 25)
  -                     kind = 25;
  +                  if (curChar == 13)
  +                     jjstateSet[jjnewStateCnt++] = 8;
                     break;
                  case 10:
  -                  if (curChar == 13)
  -                     jjstateSet[jjnewStateCnt++] = 9;
  +                  if ((0x3ff000000000000L & l) == 0L)
  +                     break;
  +                  if (kind > 46)
  +                     kind = 46;
  +                  jjCheckNAdd(10);
                     break;
                  default : break;
               }
  @@ -1050,7 +1740,7 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 0:
  +               case 3:
                  case 11:
                     if ((0x7fffffe00000000L & l) == 0L)
                        break;
  @@ -1059,11 +1749,11 @@
                     jjCheckNAdd(11);
                     break;
                  case 1:
  -                  jjAddStates(0, 1);
  +                  if (kind > 10)
  +                     kind = 10;
                     break;
                  case 5:
  -                  if (kind > 16)
  -                     kind = 16;
  +                  jjAddStates(0, 1);
                     break;
                  default : break;
               }
  @@ -1078,12 +1768,12 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(0, 1);
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 5:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((jjbitVec0[i2] & l2) != 0L)
  +                     jjAddStates(0, 1);
                     break;
                  default : break;
               }
  @@ -1102,70 +1792,70 @@
         catch(java.io.IOException e) { return curPos; }
      }
   }
  -private final int jjStopStringLiteralDfa_4(int pos, long active0)
  +private final int jjStopStringLiteralDfa_6(int pos, long active0)
   {
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x68000L) != 0L)
  +         if ((active0 & 0x1a00L) != 0L)
               return 2;
            return -1;
         default :
            return -1;
      }
   }
  -private final int jjStartNfa_4(int pos, long active0)
  +private final int jjStartNfa_6(int pos, long active0)
   {
  -   return jjMoveNfa_4(jjStopStringLiteralDfa_4(pos, active0), pos + 1);
  +   return jjMoveNfa_6(jjStopStringLiteralDfa_6(pos, active0), pos + 1);
   }
  -private final int jjStartNfaWithStates_4(int pos, int kind, int state)
  +private final int jjStartNfaWithStates_6(int pos, int kind, int state)
   {
      jjmatchedKind = kind;
      jjmatchedPos = pos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return pos + 1; }
  -   return jjMoveNfa_4(state, pos + 1);
  +   return jjMoveNfa_6(state, pos + 1);
   }
  -private final int jjMoveStringLiteralDfa0_4()
  +private final int jjMoveStringLiteralDfa0_6()
   {
      switch(curChar)
      {
         case 35:
  -         jjmatchedKind = 18;
  -         return jjMoveStringLiteralDfa1_4(0x28000L);
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_6(0xa00L);
         case 36:
  -         return jjStopAtPos(0, 14);
  +         return jjStopAtPos(0, 8);
         case 42:
  -         return jjMoveStringLiteralDfa1_4(0x100000L);
  +         return jjMoveStringLiteralDfa1_6(0x4000L);
         default :
  -         return jjMoveNfa_4(3, 0);
  +         return jjMoveNfa_6(3, 0);
      }
   }
  -private final int jjMoveStringLiteralDfa1_4(long active0)
  +private final int jjMoveStringLiteralDfa1_6(long active0)
   {
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_4(0, active0);
  +      jjStopStringLiteralDfa_6(0, active0);
         return 1;
      }
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  -         else if ((active0 & 0x100000L) != 0L)
  -            return jjStopAtPos(1, 20);
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
  +         else if ((active0 & 0x4000L) != 0L)
  +            return jjStopAtPos(1, 14);
            break;
         case 42:
  -         if ((active0 & 0x20000L) != 0L)
  -            return jjStartNfaWithStates_4(1, 17, 0);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_6(1, 11, 0);
            break;
         default :
            break;
      }
  -   return jjStartNfa_4(0, active0);
  +   return jjStartNfa_6(0, active0);
   }
  -private final int jjMoveNfa_4(int startState, int curPos)
  +private final int jjMoveNfa_6(int startState, int curPos)
   {
      int[] nextStates;
      int startsAt = 0;
  @@ -1189,8 +1879,8 @@
                        jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 2:
                     if (curChar == 42)
  @@ -1212,7 +1902,7 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  kind = 16;
  +                  kind = 10;
                     break;
                  default : break;
               }
  @@ -1227,8 +1917,8 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  default : break;
               }
  @@ -1247,193 +1937,181 @@
         catch(java.io.IOException e) { return curPos; }
      }
   }
  -private final int jjStopStringLiteralDfa_1(int pos, long active0)
  +private final int jjStopStringLiteralDfa_4(int pos, long active0)
   {
      switch (pos)
      {
         case 0:
  -         if ((active0 & 0x68000L) != 0L)
  -            return 6;
  -         if ((active0 & 0x1800L) != 0L)
  +         if ((active0 & 0x300000L) != 0L)
            {
               jjmatchedKind = 52;
  -            return 9;
  +            return 8;
            }
  +         if ((active0 & 0x1a00L) != 0L)
  +            return 2;
            return -1;
         case 1:
  -         if ((active0 & 0x20000L) != 0L)
  -            return 4;
  -         if ((active0 & 0x1800L) != 0L)
  +         if ((active0 & 0x800L) != 0L)
  +            return 0;
  +         if ((active0 & 0x300000L) != 0L)
            {
               jjmatchedKind = 52;
               jjmatchedPos = 1;
  -            return 9;
  +            return 8;
            }
            return -1;
         case 2:
  -         if ((active0 & 0x1800L) != 0L)
  +         if ((active0 & 0x300000L) != 0L)
            {
               jjmatchedKind = 52;
               jjmatchedPos = 2;
  -            return 9;
  +            return 8;
            }
            return -1;
         case 3:
  -         if ((active0 & 0x1000L) != 0L)
  +         if ((active0 & 0x200000L) != 0L)
            {
               jjmatchedKind = 52;
               jjmatchedPos = 3;
  -            return 9;
  +            return 8;
            }
  -         if ((active0 & 0x800L) != 0L)
  -            return 9;
  +         if ((active0 & 0x100000L) != 0L)
  +            return 8;
            return -1;
         default :
            return -1;
      }
   }
  -private final int jjStartNfa_1(int pos, long active0)
  +private final int jjStartNfa_4(int pos, long active0)
   {
  -   return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
  +   return jjMoveNfa_4(jjStopStringLiteralDfa_4(pos, active0), pos + 1);
   }
  -private final int jjStartNfaWithStates_1(int pos, int kind, int state)
  +private final int jjStartNfaWithStates_4(int pos, int kind, int state)
   {
      jjmatchedKind = kind;
      jjmatchedPos = pos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return pos + 1; }
  -   return jjMoveNfa_1(state, pos + 1);
  +   return jjMoveNfa_4(state, pos + 1);
   }
  -private final int jjMoveStringLiteralDfa0_1()
  +private final int jjMoveStringLiteralDfa0_4()
   {
      switch(curChar)
      {
         case 33:
  -         return jjStopAtPos(0, 54);
  +         return jjStopAtPos(0, 53);
         case 35:
  -         jjmatchedKind = 18;
  -         return jjMoveStringLiteralDfa1_1(0x28000L);
  +         jjmatchedKind = 12;
  +         return jjMoveStringLiteralDfa1_4(0xa00L);
         case 36:
  -         return jjStopAtPos(0, 14);
  -      case 40:
  -         return jjStopAtPos(0, 3);
  -      case 41:
  -         return jjStopAtPos(0, 4);
  -      case 44:
  -         return jjStopAtPos(0, 10);
  +         return jjStopAtPos(0, 8);
         case 46:
  -         return jjStopAtPos(0, 53);
  -      case 61:
  -         return jjStopAtPos(0, 13);
  -      case 91:
  -         return jjStopAtPos(0, 5);
  -      case 93:
  -         return jjStopAtPos(0, 6);
  +         return jjStopAtPos(0, 54);
         case 102:
  -         return jjMoveStringLiteralDfa1_1(0x1000L);
  +         return jjMoveStringLiteralDfa1_4(0x200000L);
         case 116:
  -         return jjMoveStringLiteralDfa1_1(0x800L);
  +         return jjMoveStringLiteralDfa1_4(0x100000L);
         case 123:
            return jjStopAtPos(0, 55);
         case 125:
            return jjStopAtPos(0, 56);
         default :
  -         return jjMoveNfa_1(0, 0);
  +         return jjMoveNfa_4(3, 0);
      }
   }
  -private final int jjMoveStringLiteralDfa1_1(long active0)
  +private final int jjMoveStringLiteralDfa1_4(long active0)
   {
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_1(0, active0);
  +      jjStopStringLiteralDfa_4(0, active0);
         return 1;
      }
      switch(curChar)
      {
         case 35:
  -         if ((active0 & 0x8000L) != 0L)
  -            return jjStopAtPos(1, 15);
  +         if ((active0 & 0x200L) != 0L)
  +            return jjStopAtPos(1, 9);
            break;
         case 42:
  -         if ((active0 & 0x20000L) != 0L)
  -            return jjStartNfaWithStates_1(1, 17, 4);
  +         if ((active0 & 0x800L) != 0L)
  +            return jjStartNfaWithStates_4(1, 11, 0);
            break;
         case 97:
  -         return jjMoveStringLiteralDfa2_1(active0, 0x1000L);
  +         return jjMoveStringLiteralDfa2_4(active0, 0x200000L);
         case 114:
  -         return jjMoveStringLiteralDfa2_1(active0, 0x800L);
  +         return jjMoveStringLiteralDfa2_4(active0, 0x100000L);
         default :
            break;
      }
  -   return jjStartNfa_1(0, active0);
  +   return jjStartNfa_4(0, active0);
   }
  -private final int jjMoveStringLiteralDfa2_1(long old0, long active0)
  +private final int jjMoveStringLiteralDfa2_4(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_1(0, old0); 
  +      return jjStartNfa_4(0, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_1(1, active0);
  +      jjStopStringLiteralDfa_4(1, active0);
         return 2;
      }
      switch(curChar)
      {
         case 108:
  -         return jjMoveStringLiteralDfa3_1(active0, 0x1000L);
  +         return jjMoveStringLiteralDfa3_4(active0, 0x200000L);
         case 117:
  -         return jjMoveStringLiteralDfa3_1(active0, 0x800L);
  +         return jjMoveStringLiteralDfa3_4(active0, 0x100000L);
         default :
            break;
      }
  -   return jjStartNfa_1(1, active0);
  +   return jjStartNfa_4(1, active0);
   }
  -private final int jjMoveStringLiteralDfa3_1(long old0, long active0)
  +private final int jjMoveStringLiteralDfa3_4(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_1(1, old0); 
  +      return jjStartNfa_4(1, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_1(2, active0);
  +      jjStopStringLiteralDfa_4(2, active0);
         return 3;
      }
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x800L) != 0L)
  -            return jjStartNfaWithStates_1(3, 11, 9);
  +         if ((active0 & 0x100000L) != 0L)
  +            return jjStartNfaWithStates_4(3, 20, 8);
            break;
         case 115:
  -         return jjMoveStringLiteralDfa4_1(active0, 0x1000L);
  +         return jjMoveStringLiteralDfa4_4(active0, 0x200000L);
         default :
            break;
      }
  -   return jjStartNfa_1(2, active0);
  +   return jjStartNfa_4(2, active0);
   }
  -private final int jjMoveStringLiteralDfa4_1(long old0, long active0)
  +private final int jjMoveStringLiteralDfa4_4(long old0, long active0)
   {
      if (((active0 &= old0)) == 0L)
  -      return jjStartNfa_1(2, old0); 
  +      return jjStartNfa_4(2, old0); 
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) {
  -      jjStopStringLiteralDfa_1(3, active0);
  +      jjStopStringLiteralDfa_4(3, active0);
         return 4;
      }
      switch(curChar)
      {
         case 101:
  -         if ((active0 & 0x1000L) != 0L)
  -            return jjStartNfaWithStates_1(4, 12, 9);
  +         if ((active0 & 0x200000L) != 0L)
  +            return jjStartNfaWithStates_4(4, 21, 8);
            break;
         default :
            break;
      }
  -   return jjStartNfa_1(3, active0);
  +   return jjStartNfa_4(3, active0);
   }
  -private final int jjMoveNfa_1(int startState, int curPos)
  +private final int jjMoveNfa_4(int startState, int curPos)
   {
      int[] nextStates;
      int startsAt = 0;
  -   jjnewStateCnt = 10;
  +   jjnewStateCnt = 9;
      int i = 1;
      jjstateSet[0] = startState;
      int j, kind = 0x7fffffff;
  @@ -1448,55 +2126,42 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 0:
  -                  if ((0x3ff000000000000L & l) != 0L)
  -                  {
  -                     if (kind > 9)
  -                        kind = 9;
  -                     jjCheckNAdd(3);
  -                  }
  +               case 3:
  +                  if (curChar == 34)
  +                     jjCheckNAddTwoStates(5, 6);
                     else if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 6;
  -                  else if (curChar == 34)
  -                     jjCheckNAddTwoStates(1, 2);
  +                     jjstateSet[jjnewStateCnt++] = 2;
  +                  break;
  +               case 0:
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 1;
                     break;
                  case 1:
  -                  if ((0xfffffffbffffdbffL & l) != 0L)
  -                     jjCheckNAddTwoStates(1, 2);
  +                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 2:
  -                  if (curChar == 34 && kind > 7)
  -                     kind = 7;
  -                  break;
  -               case 3:
  -                  if ((0x3ff000000000000L & l) == 0L)
  -                     break;
  -                  if (kind > 9)
  -                     kind = 9;
  -                  jjCheckNAdd(3);
  +                  if (curChar == 42)
  +                     jjstateSet[jjnewStateCnt++] = 0;
                     break;
                  case 4:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 5;
  +                  if (curChar == 34)
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
                  case 5:
  -                  if ((0xfffffff7ffffffffL & l) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((0xfffffffbffffdbffL & l) != 0L)
  +                     jjCheckNAddTwoStates(5, 6);
                     break;
                  case 6:
  -                  if (curChar == 42)
  -                     jjstateSet[jjnewStateCnt++] = 4;
  -                  break;
  -               case 7:
  -                  if (curChar == 35)
  -                     jjstateSet[jjnewStateCnt++] = 6;
  +                  if (curChar == 34 && kind > 19)
  +                     kind = 19;
                     break;
  -               case 9:
  +               case 8:
                     if ((0x3ff200000000000L & l) == 0L)
                        break;
                     if (kind > 52)
                        kind = 52;
  -                  jjstateSet[jjnewStateCnt++] = 9;
  +                  jjstateSet[jjnewStateCnt++] = 8;
                     break;
                  default : break;
               }
  @@ -1509,26 +2174,26 @@
            {
               switch(jjstateSet[--i])
               {
  -               case 0:
  +               case 3:
                     if ((0x7fffffe07fffffeL & l) == 0L)
                        break;
                     if (kind > 52)
                        kind = 52;
  -                  jjCheckNAdd(9);
  +                  jjCheckNAdd(8);
                     break;
                  case 1:
  -                  jjAddStates(0, 1);
  +                  if (kind > 10)
  +                     kind = 10;
                     break;
                  case 5:
  -                  if (kind > 16)
  -                     kind = 16;
  +                  jjAddStates(0, 1);
                     break;
  -               case 9:
  +               case 8:
                     if ((0x7fffffe87fffffeL & l) == 0L)
                        break;
                     if (kind > 52)
                        kind = 52;
  -                  jjCheckNAdd(9);
  +                  jjCheckNAdd(8);
                     break;
                  default : break;
               }
  @@ -1543,12 +2208,12 @@
               switch(jjstateSet[--i])
               {
                  case 1:
  -                  if ((jjbitVec0[i2] & l2) != 0L)
  -                     jjAddStates(0, 1);
  +                  if ((jjbitVec0[i2] & l2) != 0L && kind > 10)
  +                     kind = 10;
                     break;
                  case 5:
  -                  if ((jjbitVec0[i2] & l2) != 0L && kind > 16)
  -                     kind = 16;
  +                  if ((jjbitVec0[i2] & l2) != 0L)
  +                     jjAddStates(0, 1);
                     break;
                  default : break;
               }
  @@ -1561,14 +2226,14 @@
            kind = 0x7fffffff;
         }
         ++curPos;
  -      if ((i = jjnewStateCnt) == (startsAt = 10 - (jjnewStateCnt = startsAt)))
  +      if ((i = jjnewStateCnt) == (startsAt = 9 - (jjnewStateCnt = startsAt)))
            return curPos;
         try { curChar = input_stream.readChar(); }
         catch(java.io.IOException e) { return curPos; }
      }
   }
   static final int[] jjnextStates = {
  -   1, 2, 
  +   5, 6, 
   };
   public static final String[] jjstrLiteralImages = {
   null, null, null, null, null, null, null, null, null, null, null, null, null, 
  @@ -1577,29 +2242,31 @@
   null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
   null, null, null, };
   public static final String[] lexStateNames = {
  +   "DIRECTIVE", 
  +   "REFMODIFIER", 
  +   "REFMOD2", 
      "DEFAULT", 
      "REFERENCE", 
  -   "DIRECTIVE", 
      "IN_MULTI_LINE_COMMENT", 
      "IN_FORMAL_COMMENT", 
      "IN_SINGLE_LINE_COMMENT", 
   };
   public static final int[] jjnewLexState = {
  -   -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, 
  +   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-1, -1, -1, -1, -1, 
  +   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, 
-1, -1, -1, -1, -1, 
  +   -1, -1, -1, -1, -1, -1, -1, -1, 
   };
   static final long[] jjtoToken = {
  -   0x1f17ffffc383effL, 
  +   0x1f15fffffb8e0ffL, 
   };
   static final long[] jjtoSkip = {
  -   0x200000003800000L, 
  +   0x200000000460000L, 
   };
   static final long[] jjtoSpecial = {
  -   0x200000002000000L, 
  +   0x200000000400000L, 
   };
   static final long[] jjtoMore = {
  -   0x47c000L, 
  +   0x11f00L, 
   };
   private ASCII_CharStream input_stream;
   private final int[] jjrounds = new int[12];
  @@ -1640,7 +2307,7 @@
   }
   public void SwitchTo(int lexState)
   {
  -   if (lexState >= 6 || lexState < 0)
  +   if (lexState >= 8 || lexState < 0)
         throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState 
+ ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
      else
         curLexState = lexState;
  @@ -1659,8 +2326,8 @@
      return t;
   }
   
  -int curLexState = 0;
  -int defaultLexState = 0;
  +int curLexState = 3;
  +int defaultLexState = 3;
   int jjnewStateCnt;
   int jjround;
   int jjmatchedPos;
  @@ -1696,6 +2363,11 @@
        switch(curLexState)
        {
          case 0:
  +         try { input_stream.backup(0);
  +            while (curChar <= 32 && (0x100000200L & (1L << curChar)) != 0L)
  +               curChar = input_stream.BeginToken();
  +         }
  +         catch (java.io.IOException e1) { continue EOFLoop; }
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_0();
  @@ -1718,32 +2390,50 @@
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_2();
  +         if (jjmatchedPos == 0 && jjmatchedKind > 57)
  +         {
  +            jjmatchedKind = 57;
  +         }
            break;
          case 3:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_3();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 22)
  -         {
  -            jjmatchedKind = 22;
  -         }
            break;
          case 4:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_4();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 22)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 57)
            {
  -            jjmatchedKind = 22;
  +            jjmatchedKind = 57;
            }
            break;
          case 5:
            jjmatchedKind = 0x7fffffff;
            jjmatchedPos = 0;
            curPos = jjMoveStringLiteralDfa0_5();
  -         if (jjmatchedPos == 0 && jjmatchedKind > 22)
  +         if (jjmatchedPos == 0 && jjmatchedKind > 16)
  +         {
  +            jjmatchedKind = 16;
  +         }
  +         break;
  +       case 6:
  +         jjmatchedKind = 0x7fffffff;
  +         jjmatchedPos = 0;
  +         curPos = jjMoveStringLiteralDfa0_6();
  +         if (jjmatchedPos == 0 && jjmatchedKind > 16)
  +         {
  +            jjmatchedKind = 16;
  +         }
  +         break;
  +       case 7:
  +         jjmatchedKind = 0x7fffffff;
  +         jjmatchedPos = 0;
  +         curPos = jjMoveStringLiteralDfa0_7();
  +         if (jjmatchedPos == 0 && jjmatchedKind > 16)
            {
  -            jjmatchedKind = 22;
  +            jjmatchedKind = 16;
            }
            break;
        }
  @@ -1820,16 +2510,18 @@
   {
      switch(jjmatchedKind)
      {
  -      case 25 :
  +      case 22 :
            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))));
           if (inSet)
  -        {
  -            SwitchTo(DEFAULT);
  -            inSet = false;
  -            inDirective = false;
  +       {
  +           if ( bDebugPrint_ )
  +                System.out.print(" NEWLINE :");
  +            stateStackPop();
  +           inSet = false;
  +           inDirective = false;
           }
            break;
         case 57 :
  @@ -1837,18 +2529,35 @@
               image = new StringBuffer(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen + 
(lengthOfMatch = jjmatchedPos + 1))));
  -        if (inDirective)
  -            SwitchTo(DIRECTIVE);
  -        else if (lparen == rparen)
  +        /*
  +         *  These can terminate a reference, but are needed in subsequent states
  +         */
  +
  +        if (image.toString().equals("="))
           {
  -            lparen = 0;
  -            rparen = 0;
  -            inReference = false;
  +            input_stream.backup(1);
  +        }
   
  -            SwitchTo(DEFAULT);
  +        inReference = false;
  +
  +        if ( bDebugPrint_ )
  +            System.out.print("REF_TERM :");
  +
  +        stateStackPop();
  +
  +        /*
  +         *  I removed LPAREN & RPAREN from REFERENCE;  as there is no LPAREN,RPAREN 
in REF is there is REFMETHOD
  +         */
  +
  +        if (curLexState != DEFAULT && ( image.toString().equals(")")
  +                                        || image.toString().equals(",")
  +                                        || image.toString().equals("[")
  +                                        || image.toString().equals("]")
  +                                        || image.toString().equals("\n")
  +                                        ) )
  +        {
  +            input_stream.backup(1);
           }
  -        else
  -            SwitchTo(REFERENCE);
            break;
         default :
            break;
  @@ -1859,7 +2568,7 @@
      jjimageLen += (lengthOfMatch = jjmatchedPos + 1);
      switch(jjmatchedKind)
      {
  -      case 14 :
  +      case 8 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -1868,34 +2577,46 @@
           if (! inComment)
           {
               inReference = true;
  +
  +           if ( bDebugPrint_ )
  +                System.out.print( "$  : going to " + REFERENCE );
  +
  +            stateStackPush();
               SwitchTo(REFERENCE);
           }
            break;
  -      case 15 :
  +      case 9 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen)));
            jjimageLen = 0;
  -      inComment = true;
  +        inComment = true;
  +        stateStackPush();
  +        SwitchTo(IN_SINGLE_LINE_COMMENT);
            break;
  -      case 16 :
  +      case 10 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen)));
            jjimageLen = 0;
  -      input_stream.backup(1); inComment = true;
  +        input_stream.backup(1);
  +        inComment = true;
  +        stateStackPush();
  +        SwitchTo( IN_FORMAL_COMMENT);
            break;
  -      case 17 :
  +      case 11 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
               image.append(new String(input_stream.GetSuffix(jjimageLen)));
            jjimageLen = 0;
  -      inComment=true;
  +        inComment=true;
  +        stateStackPush();
  +        SwitchTo( IN_MULTI_LINE_COMMENT );
            break;
  -      case 18 :
  +      case 12 :
            if (image == null)
                 image = new StringBuffer(new 
String(input_stream.GetSuffix(jjimageLen)));
            else
  @@ -1904,6 +2625,11 @@
           if (! inComment)
           {
               inDirective = true;
  +
  +            if ( bDebugPrint_ )
  +                System.out.print("# :  going to " + DIRECTIVE );
  +
  +            stateStackPush();
               SwitchTo(DIRECTIVE);
           }
            break;
  @@ -1915,87 +2641,159 @@
   {
      switch(jjmatchedKind)
      {
  -      case 3 :
  +      case 4 :
           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))));
  -        lparen++;
  +        if (!inComment)
  +            lparen++;
  +
  +        /*
  +         *  if we have seen the dot, then move to REFMOD2 -> Modifier()
  +         */
  +
  +        if (curLexState == REFMODIFIER )
  +            SwitchTo( REFMOD2 );
            break;
  -      case 4 :
  +      case 5 :
           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))));
  -        rparen++;
  +        /*
  +         *  Ultimately, we want to drop down to the state below the one that has an 
open (
  +         *  if we hit bottom (DEFAULT), that's fine. It's just text schmoo.
  +         *
  +         */
  +
   
  -        if (lparen == rparen)
  +        boolean bClosed = false;
  +
  +        if (inComment)
  +            bClosed = true;
  +
  +        while( !bClosed)
           {
  -            SwitchTo(DEFAULT);
  -            inDirective = false;
  +            /*
  +             * look at current state.  If we haven't seen a lparen in this state
  +             * then we drop a state, because this lparen clearly closes our state
  +             */
  +
  +            if( lparen > 0)
  +            {
  +                /*
  +                 *  if rparen + 1 == lparen, then this state is closed. Otherwise, 
increment
  +                 *  and keep parsing
  +                 */
  +
  +                 if( lparen == rparen + 1)
  +                 {
  +                       stateStackPop();
  +                 }
  +                else
  +                {
  +                    rparen++;
  +                }
  +
  +                 bClosed = true;
  +            }
  +            else
  +            {
  +                /*
  +                 * now, drop a state
  +                 */
  +
  +                if(!stateStackPop())
  +                    break;
  +            }
           }
            break;
  -      case 7 :
  +      case 13 :
           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))));
  -        if (incMode)
  -        {
  -            matchedToken.image = stripQuotes(image.toString());
  -            pushFile(matchedToken.image);
  -        }
  -        incMode = false;
  +     inComment = false;
  +     stateStackPop();
            break;
  -      case 19 :
  +      case 14 :
           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;
  +    stateStackPop();
            break;
  -      case 20 :
  +      case 15 :
           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;
  +    stateStackPop();
            break;
  -      case 21 :
  +      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;
  +        if (incMode)
  +        {
  +            matchedToken.image = stripQuotes(image.toString());
  +            pushFile(matchedToken.image);
  +        }
  +        incMode = false;
  +
  +        if (lparen == 0)
  +            SwitchTo(DEFAULT);
            break;
  -      case 40 :
  +      case 38 :
           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;
  +        stateStackPop();
            break;
  -      case 41 :
  +      case 39 :
           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 45 :
  +      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 46 :
  +      case 44 :
           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))));
           matchedToken.kind = EOF;
           fileDepth = 0;
  +         break;
  +      case 54 :
  +        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))));
  +        if ( bDebugPrint_ )
  +            System.out.print("DOT : switching to " + REFMODIFIER);
  +        SwitchTo(REFMODIFIER);
  +         break;
  +      case 56 :
  +        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))));
  +        // was :DEFAULT
  +        stateStackPop();
            break;
         default : 
            break;
  
  
  

Reply via email to