the parser is no longer static
[phpeclipse.git] / net.sourceforge.phpeclipse / src / test / PHPParser.java
index 831f354..15fd16e 100644 (file)
@@ -64,7 +64,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
   /** The cursor in expression stack. */
   private static int nodePtr;
 
-  public static final boolean PARSER_DEBUG = true;
+  public static final boolean PARSER_DEBUG = false;
 
   public final void setFileToParse(final IFile fileToParse) {
     PHPParser.fileToParse = fileToParse;
@@ -78,24 +78,26 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     PHPParser.fileToParse = fileToParse;
   }
 
-  public static final void phpParserTester(final String strEval) throws ParseException {
+  public final void phpParserTester(final String strEval) throws ParseException {
     final StringReader stream = new StringReader(strEval);
     if (jj_input_stream == null) {
       jj_input_stream = new SimpleCharStream(stream, 1, 1);
+      token_source = new PHPParserTokenManager(jj_input_stream);
     }
     ReInit(new StringReader(strEval));
     init();
     phpDocument = new PHPDocument(null,"_root".toCharArray());
     currentSegment = phpDocument;
     outlineInfo = new PHPOutlineInfo(null, currentSegment);
-    PHPParserTokenManager.SwitchTo(PHPParserTokenManager.PHPPARSING);
+    token_source.SwitchTo(PHPParserTokenManager.PHPPARSING);
     phpTest();
   }
 
-  public static final void htmlParserTester(final File fileName) throws FileNotFoundException, ParseException {
+  public final void htmlParserTester(final File fileName) throws FileNotFoundException, ParseException {
     final Reader stream = new FileReader(fileName);
     if (jj_input_stream == null) {
       jj_input_stream = new SimpleCharStream(stream, 1, 1);
+      token_source = new PHPParserTokenManager(jj_input_stream);
     }
     ReInit(stream);
     init();
@@ -105,10 +107,11 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     phpFile();
   }
 
-  public static final void htmlParserTester(final String strEval) throws ParseException {
+  public final void htmlParserTester(final String strEval) throws ParseException {
     final StringReader stream = new StringReader(strEval);
     if (jj_input_stream == null) {
       jj_input_stream = new SimpleCharStream(stream, 1, 1);
+      token_source = new PHPParserTokenManager(jj_input_stream);
     }
     ReInit(stream);
     init();
@@ -151,6 +154,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     final StringReader stream = new StringReader(s);
     if (jj_input_stream == null) {
       jj_input_stream = new SimpleCharStream(stream, 1, 1);
+      token_source = new PHPParserTokenManager(jj_input_stream);
     }
     ReInit(stream);
     init();
@@ -209,14 +213,14 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
                   e.currentToken.sourceStart,
                   e.currentToken.sourceEnd,
                   errorLevel,
-                  "Line " + e.currentToken.beginLine+", "+e.currentToken.sourceStart+":"+e.currentToken.sourceEnd);
+                  "Line " + e.currentToken.beginLine+", "+e.currentToken.sourceStart+':'+e.currentToken.sourceEnd);
       } else {
         setMarker(fileToParse,
                   errorMessage,
                   errorStart,
                   errorEnd,
                   errorLevel,
-                  "Line " + e.currentToken.beginLine+", "+errorStart+":"+errorEnd);
+                  "Line " + e.currentToken.beginLine+", "+errorStart+':'+errorEnd);
         errorStart = -1;
         errorEnd = -1;
       }
@@ -270,6 +274,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     final StringReader stream = new StringReader(s);
     if (jj_input_stream == null) {
       jj_input_stream = new SimpleCharStream(stream, 1, 1);
+      token_source = new PHPParserTokenManager(jj_input_stream);
     }
     ReInit(stream);
     init();
@@ -305,52 +310,51 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
   /**
    * Put a new html block in the stack.
    */
-  public static final void createNewHTMLCode() {
+  public final void createNewHTMLCode() {
     final int currentPosition = token.sourceStart;
     if (currentPosition == htmlStart ||
           currentPosition < htmlStart ||
-          currentPosition > SimpleCharStream.currentBuffer.length()) {
+          currentPosition > jj_input_stream.getCurrentBuffer().length()) {
       return;
     }
-    final char[] chars = SimpleCharStream.currentBuffer.substring(htmlStart,
-                                                                  currentPosition).toCharArray();
-    pushOnAstNodes(new HTMLCode(chars, htmlStart,currentPosition));
+    final String html = jj_input_stream.getCurrentBuffer().substring(htmlStart, currentPosition);
+    pushOnAstNodes(new HTMLCode(html, htmlStart,currentPosition));
   }
 
   /** Create a new task. */
-  public static final void createNewTask(final int todoStart) {
-    final String  todo = SimpleCharStream.currentBuffer.substring(todoStart,
-                                                                  SimpleCharStream.currentBuffer.indexOf("\n",
+  public final void createNewTask(final int todoStart) {
+    final String  todo = jj_input_stream.getCurrentBuffer().substring(todoStart,
+                                                                  jj_input_stream.getCurrentBuffer().indexOf("\n",
                                                                                                          todoStart)-1);
     if (!PARSER_DEBUG) {
       try {
         setMarker(fileToParse,
                   todo,
-                  SimpleCharStream.getBeginLine(),
+                  jj_input_stream.getBeginLine(),
                   TASK,
-                  "Line "+SimpleCharStream.getBeginLine());
+                  "Line "+jj_input_stream.getBeginLine());
       } catch (CoreException e) {
         PHPeclipsePlugin.log(e);
       }
     }
   }
 
-  private static final void parse() throws ParseException {
+  private final void parse() throws ParseException {
           phpFile();
   }
 
-  static final public void todo() throws ParseException {
+  final public void todo() throws ParseException {
  Token todoToken;
     todoToken = jj_consume_token(23);
                       createNewTask(todoToken.sourceStart);
   }
 
-  static final public void phpTest() throws ParseException {
+  final public void phpTest() throws ParseException {
     Php();
     jj_consume_token(0);
   }
 
-  static final public void phpFile() throws ParseException {
+  final public void phpFile() throws ParseException {
     try {
       label_1:
       while (true) {
@@ -396,6 +400,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
+        case DOUBLEQUOTE:
         case DOLLAR:
         case IDENTIFIER:
         case LPAREN:
@@ -409,11 +414,11 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
         }
         PhpBlock();
       }
-     PHPParser.createNewHTMLCode();
+     createNewHTMLCode();
     } catch (TokenMgrError e) {
     PHPeclipsePlugin.log(e);
-    errorStart   = SimpleCharStream.beginOffset;
-    errorEnd     = SimpleCharStream.endOffset;
+    errorStart   = jj_input_stream.getBeginOffset();
+    errorEnd     = jj_input_stream.getEndOffset();
     errorMessage = e.getMessage();
     errorLevel   = ERROR;
     {if (true) throw generateParseException();}
@@ -425,7 +430,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
  * or <?php somephpcode ?>
  * or <? somephpcode ?>
  */
-  static final public void PhpBlock() throws ParseException {
+  final public void PhpBlock() throws ParseException {
   final PHPEchoBlock phpEchoBlock;
   final Token token,phpEnd;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -473,6 +478,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -508,7 +514,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
         jj_la1[2] = jj_gen;
         ;
       }
-   PHPParser.createNewHTMLCode();
+   createNewHTMLCode();
       Php();
       try {
         phpEnd = jj_consume_token(PHPEND);
@@ -516,8 +522,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       } catch (ParseException e) {
     errorMessage = "'?>' expected";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
       }
       break;
@@ -528,12 +534,12 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     }
   }
 
-  static final public PHPEchoBlock phpEchoBlock() throws ParseException {
+  final public PHPEchoBlock phpEchoBlock() throws ParseException {
   final Expression expr;
   final PHPEchoBlock echoBlock;
   final Token token, token2;
     token = jj_consume_token(PHPECHOSTART);
-                          PHPParser.createNewHTMLCode();
+                          createNewHTMLCode();
     expr = Expression();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case SEMICOLON:
@@ -552,7 +558,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     throw new Error("Missing return statement in function");
   }
 
-  static final public void Php() throws ParseException {
+  final public void Php() throws ParseException {
     label_2:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -593,6 +599,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -608,7 +615,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     }
   }
 
-  static final public ClassDeclaration ClassDeclaration() throws ParseException {
+  final public ClassDeclaration ClassDeclaration() throws ParseException {
   final ClassDeclaration classDeclaration;
   Token className = null;
   final Token superclassName, token, extendsToken;
@@ -676,15 +683,15 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     throw new Error("Missing return statement in function");
   }
 
-  static final public int ClassBody(final ClassDeclaration classDeclaration) throws ParseException {
+  final public int ClassBody(final ClassDeclaration classDeclaration) throws ParseException {
 Token token;
     try {
       jj_consume_token(LBRACE);
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image + "'. '{' expected";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
     }
     label_3:
@@ -706,10 +713,10 @@ Token token;
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. 'var', 'function' or '}' expected";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
-    {if (true) return PHPParser.token.sourceEnd;}
+    {if (true) return this.token.sourceEnd;}
     }
     throw new Error("Missing return statement in function");
   }
@@ -717,7 +724,7 @@ Token token;
 /**
  * A class can contain only methods and fields.
  */
-  static final public void ClassBodyDeclaration(final ClassDeclaration classDeclaration) throws ParseException {
+  final public void ClassBodyDeclaration(final ClassDeclaration classDeclaration) throws ParseException {
   final MethodDeclaration method;
   final FieldDeclaration field;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -741,7 +748,7 @@ Token token;
  * A class field declaration : it's var VariableDeclarator() (, VariableDeclarator())*;.
  * it is only used by ClassBodyDeclaration()
  */
-  static final public FieldDeclaration FieldDeclaration() throws ParseException {
+  final public FieldDeclaration FieldDeclaration() throws ParseException {
   VariableDeclaration variableDeclaration;
   final VariableDeclaration[] list;
   final ArrayList arrayList = new ArrayList();
@@ -751,7 +758,6 @@ Token token;
     token = jj_consume_token(VAR);
     variableDeclaration = VariableDeclaratorNoSuffix();
     arrayList.add(variableDeclaration);
-    outlineInfo.addVariable(variableDeclaration.name());
     pos = variableDeclaration.sourceEnd;
     label_4:
     while (true) {
@@ -797,7 +803,7 @@ Token token;
  * a strict variable declarator : there cannot be a suffix here.
  * It will be used by fields and formal parameters
  */
-  static final public VariableDeclaration VariableDeclaratorNoSuffix() throws ParseException {
+  final public VariableDeclaration VariableDeclaratorNoSuffix() throws ParseException {
   final Token token, lbrace,rbrace;
   Expression expr, initializer = null;
   Token assignToken;
@@ -853,7 +859,7 @@ Token token;
 /**
  * this will be used by static statement
  */
-  static final public VariableDeclaration VariableDeclarator() throws ParseException {
+  final public VariableDeclaration VariableDeclarator() throws ParseException {
   final AbstractVariable variable;
   Expression initializer = null;
   final Token token;
@@ -893,7 +899,7 @@ Token token;
  * A Variable name.
  * @return the variable name (with suffix)
  */
-  static final public AbstractVariable VariableDeclaratorId() throws ParseException {
+  final public AbstractVariable VariableDeclaratorId() throws ParseException {
   final Variable var;
   AbstractVariable expression = null;
     try {
@@ -914,23 +920,23 @@ Token token;
     } catch (ParseException e) {
     errorMessage = "'$' expected for variable identifier";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
   }
 
-  static final public Variable Variable() throws ParseException {
+  final public Variable Variable() throws ParseException {
   Variable variable = null;
   final Token token;
     token = jj_consume_token(DOLLAR);
-    variable = Var(token);
-    {if (true) return new Variable(variable,token.sourceEnd,variable.sourceEnd);}
+    variable = Var();
+    {if (true) return variable;}
     throw new Error("Missing return statement in function");
   }
 
-  static final public Variable Var(final Token dollar) throws ParseException {
+  final public Variable Var() throws ParseException {
   Variable variable = null;
   final Token token,token2;
   ConstantIdentifier constant;
@@ -938,20 +944,21 @@ Token token;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case DOLLAR:
       token = jj_consume_token(DOLLAR);
-      variable = Var(token);
-   {if (true) return new Variable(variable,dollar.sourceEnd,variable.sourceEnd);}
+      variable = Var();
+   {if (true) return new Variable(variable,variable.sourceStart,variable.sourceEnd);}
       break;
     case LBRACE:
       token = jj_consume_token(LBRACE);
       expression = Expression();
       token2 = jj_consume_token(RBRACE);
    {if (true) return new Variable(expression,
-                       dollar.sourceStart,
+                       token.sourceStart,
                        token2.sourceEnd);}
       break;
     case IDENTIFIER:
       token = jj_consume_token(IDENTIFIER);
-   {if (true) return new Variable(token.image,dollar.sourceStart,token.sourceEnd);}
+   outlineInfo.addVariable('$' + token.image);
+   {if (true) return new Variable(token.image,token.sourceStart,token.sourceEnd);}
       break;
     default:
       jj_la1[13] = jj_gen;
@@ -961,7 +968,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression VariableInitializer() throws ParseException {
+  final public Expression VariableInitializer() throws ParseException {
   final Expression expr;
   final Token token, token2;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -971,6 +978,7 @@ Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
       expr = Literal();
    {if (true) return expr;}
       break;
@@ -1026,7 +1034,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public ArrayVariableDeclaration ArrayVariable() throws ParseException {
+  final public ArrayVariableDeclaration ArrayVariable() throws ParseException {
 final Expression expr,expr2;
     expr = Expression();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1039,11 +1047,11 @@ final Expression expr,expr2;
       jj_la1[17] = jj_gen;
       ;
     }
-   {if (true) return new ArrayVariableDeclaration(expr,SimpleCharStream.getPosition());}
+   {if (true) return new ArrayVariableDeclaration(expr,jj_input_stream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
-  static final public ArrayVariableDeclaration[] ArrayInitializer() throws ParseException {
+  final public ArrayVariableDeclaration[] ArrayInitializer() throws ParseException {
   ArrayVariableDeclaration expr;
   final ArrayList list = new ArrayList();
     jj_consume_token(LPAREN);
@@ -1066,6 +1074,7 @@ final Expression expr,expr2;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -1107,7 +1116,7 @@ final Expression expr,expr2;
  * A Method Declaration.
  * <b>function</b> MetodDeclarator() Block()
  */
-  static final public MethodDeclaration MethodDeclaration() throws ParseException {
+  final public MethodDeclaration MethodDeclaration() throws ParseException {
   final MethodDeclaration functionDeclaration;
   final Block block;
   final OutlineableWithChildren seg = currentSegment;
@@ -1120,8 +1129,8 @@ final Expression expr,expr2;
     if (errorMessage != null)  {if (true) throw e;}
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function identifier expected";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     {if (true) throw e;}
     }
    currentSegment = functionDeclaration;
@@ -1137,10 +1146,10 @@ final Expression expr,expr2;
  * [&] IDENTIFIER(parameters ...).
  * @return a function description for the outline
  */
-  static final public MethodDeclaration MethodDeclarator(final int start) throws ParseException {
+  final public MethodDeclaration MethodDeclarator(final int start) throws ParseException {
   Token identifier = null;
   Token reference = null;
-  final Hashtable formalParameters = new Hashtable();
+  final ArrayList formalParameters = new ArrayList();
   String identifierChar = SYNTAX_ERROR_CHAR;
   int end = start;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1192,10 +1201,10 @@ final Expression expr,expr2;
  * FormalParameters follows method identifier.
  * (FormalParameter())
  */
-  static final public int FormalParameters(final Hashtable parameters) throws ParseException {
+  final public int FormalParameters(final ArrayList parameters) throws ParseException {
   VariableDeclaration var;
   final Token token;
-  Token tok = PHPParser.token;
+  Token tok = this.token;
   int end = tok.sourceEnd;
     try {
       tok = jj_consume_token(LPAREN);
@@ -1211,7 +1220,7 @@ final Expression expr,expr2;
     case BIT_AND:
     case DOLLAR:
       var = FormalParameter();
-     parameters.put(var.name(),var);end = var.sourceEnd;
+     parameters.add(var);end = var.sourceEnd;
       label_7:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1224,7 +1233,7 @@ final Expression expr,expr2;
         }
         jj_consume_token(COMMA);
         var = FormalParameter();
-       parameters.put(var.name(),var);end = var.sourceEnd;
+       parameters.add(var);end = var.sourceEnd;
       }
       break;
     default:
@@ -1249,7 +1258,7 @@ final Expression expr,expr2;
  * A formal parameter.
  * $varname[=value] (,$varname[=value])
  */
-  static final public VariableDeclaration FormalParameter() throws ParseException {
+  final public VariableDeclaration FormalParameter() throws ParseException {
   final VariableDeclaration variableDeclaration;
   Token token = null;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1261,6 +1270,7 @@ final Expression expr,expr2;
       ;
     }
     variableDeclaration = VariableDeclaratorNoSuffix();
+    outlineInfo.addVariable('$'+variableDeclaration.name());
     if (token != null) {
       variableDeclaration.setReference(true);
     }
@@ -1268,7 +1278,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public ConstantIdentifier Type() throws ParseException {
+  final public ConstantIdentifier Type() throws ParseException {
  final Token token;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case STRING:
@@ -1315,7 +1325,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression Expression() throws ParseException {
+  final public Expression Expression() throws ParseException {
   final Expression expr;
   Expression initializer = null;
   int assignOperator = -1;
@@ -1336,6 +1346,7 @@ final Expression expr,expr2;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -1363,7 +1374,7 @@ final Expression expr,expr2;
       }
       errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected";
       errorLevel   = ERROR;
-      errorEnd   = SimpleCharStream.getPosition();
+      errorEnd   = jj_input_stream.getPosition();
       {if (true) throw e;}
         }
         break;
@@ -1402,7 +1413,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ExpressionWBang() throws ParseException {
+  final public Expression ExpressionWBang() throws ParseException {
   final Expression expr;
   final Token token;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1424,7 +1435,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ExpressionNoBang() throws ParseException {
+  final public Expression ExpressionNoBang() throws ParseException {
   Expression expr;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case LIST:
@@ -1447,7 +1458,7 @@ final Expression expr,expr2;
  * Any assignement operator.
  * @return the assignement operator id
  */
-  static final public int AssignmentOperator() throws ParseException {
+  final public int AssignmentOperator() throws ParseException {
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case ASSIGN:
       jj_consume_token(ASSIGN);
@@ -1509,7 +1520,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ConditionalExpression() throws ParseException {
+  final public Expression ConditionalExpression() throws ParseException {
   final Expression expr;
   Expression expr2 = null;
   Expression expr3 = null;
@@ -1532,7 +1543,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ConditionalOrExpression() throws ParseException {
+  final public Expression ConditionalOrExpression() throws ParseException {
   Expression expr,expr2;
   int operator;
     expr = ConditionalAndExpression();
@@ -1568,7 +1579,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ConditionalAndExpression() throws ParseException {
+  final public Expression ConditionalAndExpression() throws ParseException {
   Expression expr,expr2;
   int operator;
     expr = ConcatExpression();
@@ -1604,7 +1615,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ConcatExpression() throws ParseException {
+  final public Expression ConcatExpression() throws ParseException {
   Expression expr,expr2;
     expr = InclusiveOrExpression();
     label_10:
@@ -1625,7 +1636,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression InclusiveOrExpression() throws ParseException {
+  final public Expression InclusiveOrExpression() throws ParseException {
   Expression expr,expr2;
     expr = ExclusiveOrExpression();
     label_11:
@@ -1646,7 +1657,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ExclusiveOrExpression() throws ParseException {
+  final public Expression ExclusiveOrExpression() throws ParseException {
   Expression expr,expr2;
     expr = AndExpression();
     label_12:
@@ -1667,7 +1678,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression AndExpression() throws ParseException {
+  final public Expression AndExpression() throws ParseException {
   Expression expr,expr2;
     expr = EqualityExpression();
     label_13:
@@ -1688,7 +1699,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression EqualityExpression() throws ParseException {
+  final public Expression EqualityExpression() throws ParseException {
   Expression expr,expr2;
   int operator;
   Token token;
@@ -1752,7 +1763,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression RelationalExpression() throws ParseException {
+  final public Expression RelationalExpression() throws ParseException {
   Expression expr,expr2;
   int operator;
     expr = ShiftExpression();
@@ -1798,7 +1809,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ShiftExpression() throws ParseException {
+  final public Expression ShiftExpression() throws ParseException {
   Expression expr,expr2;
   int operator;
     expr = AdditiveExpression();
@@ -1839,7 +1850,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression AdditiveExpression() throws ParseException {
+  final public Expression AdditiveExpression() throws ParseException {
   Expression expr,expr2;
   int operator;
     expr = MultiplicativeExpression();
@@ -1875,17 +1886,17 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression MultiplicativeExpression() throws ParseException {
+  final public Expression MultiplicativeExpression() throws ParseException {
   Expression expr,expr2;
   int operator;
     try {
       expr = UnaryExpression();
     } catch (ParseException e) {
     if (errorMessage != null) {if (true) throw e;}
-    errorMessage = "unexpected token '"+e.currentToken.next.image+"'";
+    errorMessage = "unexpected token '"+e.currentToken.next.image+'\'';
     errorLevel   = ERROR;
-    errorStart = PHPParser.token.sourceStart;
-    errorEnd   = PHPParser.token.sourceEnd;
+    errorStart = this.token.sourceStart;
+    errorEnd   = this.token.sourceEnd;
     {if (true) throw e;}
     }
     label_18:
@@ -1928,7 +1939,7 @@ final Expression expr,expr2;
 /**
  * An unary expression starting with @, & or nothing
  */
-  static final public Expression UnaryExpression() throws ParseException {
+  final public Expression UnaryExpression() throws ParseException {
   final Expression expr;
     /* <BIT_AND> expr = UnaryExpressionNoPrefix()             //why did I had that ?
       {return new PrefixedUnaryExpression(expr,OperatorIds.AND,pos);}
@@ -1938,7 +1949,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression AtNotTildeUnaryExpression() throws ParseException {
+  final public Expression AtNotTildeUnaryExpression() throws ParseException {
   final Expression expr;
   final Token token;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1970,6 +1981,7 @@ final Expression expr,expr2;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -1988,7 +2000,7 @@ final Expression expr,expr2;
  * An expression prefixed (or not) by one or more @ and !.
  * @return the expression
  */
-  static final public Expression AtNotUnaryExpression() throws ParseException {
+  final public Expression AtNotUnaryExpression() throws ParseException {
   final Expression expr;
   final Token token;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2015,6 +2027,7 @@ final Expression expr,expr2;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -2029,7 +2042,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression UnaryExpressionNoPrefix() throws ParseException {
+  final public Expression UnaryExpressionNoPrefix() throws ParseException {
   final Expression expr;
   final Token token;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2061,6 +2074,7 @@ final Expression expr,expr2;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -2075,7 +2089,7 @@ final Expression expr,expr2;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression PreIncDecExpression() throws ParseException {
+  final public Expression PreIncDecExpression() throws ParseException {
 final Expression expr;
 final int operator;
 final Token token;
@@ -2098,7 +2112,7 @@ final Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression UnaryExpressionNotPlusMinus() throws ParseException {
+  final public Expression UnaryExpressionNotPlusMinus() throws ParseException {
   final Expression expr;
     if (jj_2_3(2147483647)) {
       expr = CastExpression();
@@ -2119,6 +2133,7 @@ final Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
         expr = Literal();
                                    {if (true) return expr;}
         break;
@@ -2145,7 +2160,7 @@ final Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public CastExpression CastExpression() throws ParseException {
+  final public CastExpression CastExpression() throws ParseException {
 final ConstantIdentifier type;
 final Expression expr;
 final Token token,token1;
@@ -2177,7 +2192,7 @@ final Token token,token1;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression PostfixExpression() throws ParseException {
+  final public Expression PostfixExpression() throws ParseException {
   final Expression expr;
   int operator = -1;
   Token token = null;
@@ -2211,7 +2226,7 @@ final Token token,token1;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression PrimaryExpression() throws ParseException {
+  final public Expression PrimaryExpression() throws ParseException {
   Expression expr;
   Token token = null;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2242,7 +2257,7 @@ final Token token,token1;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression refPrimaryExpression(final Token reference) throws ParseException {
+  final public Expression refPrimaryExpression(final Token reference) throws ParseException {
   Expression expr;
   Expression expr2 = null;
   final Token identifier;
@@ -2334,18 +2349,18 @@ final Token token,token1;
  * array(vars)
  * @return an array
  */
-  static final public ArrayInitializer ArrayDeclarator() throws ParseException {
+  final public ArrayInitializer ArrayDeclarator() throws ParseException {
   final ArrayVariableDeclaration[] vars;
   final Token token;
     token = jj_consume_token(ARRAY);
     vars = ArrayInitializer();
    {if (true) return new ArrayInitializer(vars,
                                token.sourceStart,
-                               PHPParser.token.sourceEnd);}
+                               this.token.sourceEnd);}
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression ClassIdentifier() throws ParseException {
+  final public Expression ClassIdentifier() throws ParseException {
   final Expression expr;
   final Token token;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2380,7 +2395,7 @@ final Token token,token1;
 /**
  * Used by Variabledeclaratorid and primarysuffix
  */
-  static final public AbstractVariable VariableSuffix(final AbstractVariable prefix) throws ParseException {
+  final public AbstractVariable VariableSuffix(final AbstractVariable prefix) throws ParseException {
   Expression expression = null;
   final Token classAccessToken,lbrace,rbrace;
   Token token;
@@ -2452,6 +2467,7 @@ final Token token,token1;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -2474,6 +2490,7 @@ final Token token,token1;
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
+        case DOUBLEQUOTE:
         case DOLLAR:
         case IDENTIFIER:
         case LPAREN:
@@ -2545,6 +2562,7 @@ final Token token,token1;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -2567,6 +2585,7 @@ final Token token,token1;
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
+        case DOUBLEQUOTE:
         case DOLLAR:
         case IDENTIFIER:
         case LPAREN:
@@ -2615,8 +2634,9 @@ final Token token,token1;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Literal Literal() throws ParseException {
+  final public Literal Literal() throws ParseException {
   final Token token;
+  StringLiteral literal;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case INTEGER_LITERAL:
       token = jj_consume_token(INTEGER_LITERAL);
@@ -2642,6 +2662,10 @@ final Token token,token1;
       token = jj_consume_token(NULL);
                                     {if (true) return new NullLiteral(token);}
       break;
+    case DOUBLEQUOTE:
+      literal = evaluableString();
+                                      {if (true) return literal;}
+      break;
     default:
       jj_la1[71] = jj_gen;
       jj_consume_token(-1);
@@ -2650,10 +2674,59 @@ final Token token,token1;
     throw new Error("Missing return statement in function");
   }
 
-  static final public FunctionCall Arguments(final Expression func) throws ParseException {
+  final public StringLiteral evaluableString() throws ParseException {
+  ArrayList list = new ArrayList();
+  Token start,end;
+  Token token,lbrace,rbrace;
+  AbstractVariable var;
+  Expression expr;
+    start = jj_consume_token(DOUBLEQUOTE);
+    label_20:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case DOLLARS:
+        ;
+        break;
+      default:
+        jj_la1[72] = jj_gen;
+        break label_20;
+      }
+      jj_consume_token(DOLLARS);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case IDENTIFIER:
+        token = jj_consume_token(IDENTIFIER);
+                              list.add(new Variable(token.image,
+                                                    token.sourceStart,
+                                                    token.sourceEnd));
+        break;
+      case LBRACE1:
+        lbrace = jj_consume_token(LBRACE1);
+        token = jj_consume_token(ID);
+          list.add(new Variable(token.image,
+                                token.sourceStart,
+                                token.sourceEnd));
+        rbrace = jj_consume_token(RBRACE1);
+        break;
+      default:
+        jj_la1[73] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+    end = jj_consume_token(DOUBLEQUOTE2);
+  AbstractVariable[] vars = new AbstractVariable[list.size()];
+  list.toArray(vars);
+  {if (true) return new StringLiteral(jj_input_stream.getCurrentBuffer().substring(start.sourceEnd,end.sourceStart),
+                           start.sourceStart,
+                           end.sourceEnd,
+                           vars);}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public FunctionCall Arguments(final Expression func) throws ParseException {
 Expression[] args = null;
-final Token token;
-    jj_consume_token(LPAREN);
+final Token token,lparen;
+    lparen = jj_consume_token(LPAREN);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case ARRAY:
     case LIST:
@@ -2673,13 +2746,14 @@ final Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
       args = ArgumentList();
       break;
     default:
-      jj_la1[72] = jj_gen;
+      jj_la1[74] = jj_gen;
       ;
     }
     try {
@@ -2688,11 +2762,17 @@ final Token token;
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected to close the argument list";
     errorLevel   = ERROR;
-    errorStart = args[args.length-1].sourceEnd+1;
-    errorEnd   = args[args.length-1].sourceEnd+1;
+    if (args == null) {
+        errorStart = lparen.sourceEnd+1;
+        errorEnd   = lparen.sourceEnd+2;
+    } else {
+        errorStart = args[args.length-1].sourceEnd+1;
+        errorEnd   = args[args.length-1].sourceEnd+2;
+    }
     processParseExceptionDebug(e);
     }
-   {if (true) return new FunctionCall(func,args,args[args.length-1].sourceEnd);}
+  int sourceEnd = (args == null && args.length != 0) ? lparen.sourceEnd+1 : args[args.length-1].sourceEnd;
+  {if (true) return new FunctionCall(func,args,sourceEnd);}
     throw new Error("Missing return statement in function");
   }
 
@@ -2701,22 +2781,22 @@ final Token token;
  * argumentDeclaration() (, argumentDeclaration)*
  * @return an array of arguments
  */
-  static final public Expression[] ArgumentList() throws ParseException {
+  final public Expression[] ArgumentList() throws ParseException {
 Expression arg;
 final ArrayList list = new ArrayList();
 int pos;
 Token token;
     arg = Expression();
    list.add(arg);pos = arg.sourceEnd;
-    label_20:
+    label_21:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[73] = jj_gen;
-        break label_20;
+        jj_la1[75] = jj_gen;
+        break label_21;
       }
       token = jj_consume_token(COMMA);
                      pos = token.sourceEnd;
@@ -2742,7 +2822,7 @@ Token token;
  * A Statement without break.
  * @return a statement
  */
-  static final public Statement StatementNoBreak() throws ParseException {
+  final public Statement StatementNoBreak() throws ParseException {
   final Statement statement;
   Token token = null;
     if (jj_2_4(2)) {
@@ -2808,7 +2888,7 @@ Token token;
           token = jj_consume_token(AT);
           break;
         default:
-          jj_la1[74] = jj_gen;
+          jj_la1[76] = jj_gen;
           ;
         }
         statement = IncludeStatement();
@@ -2831,7 +2911,7 @@ Token token;
                                          currentSegment.add((Outlineable)statement);{if (true) return statement;}
         break;
       default:
-        jj_la1[75] = jj_gen;
+        jj_la1[77] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -2844,7 +2924,7 @@ Token token;
  * expression ;
  * @return an expression
  */
-  static final public Statement expressionStatement() throws ParseException {
+  final public Statement expressionStatement() throws ParseException {
   final Statement statement;
   final Token token;
     statement = Expression();
@@ -2864,7 +2944,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Define defineStatement() throws ParseException {
+  final public Define defineStatement() throws ParseException {
   Expression defineName,defineValue;
   final Token defineToken;
   Token token;
@@ -2934,7 +3014,7 @@ Token token;
 /**
  * A Normal statement.
  */
-  static final public Statement Statement() throws ParseException {
+  final public Statement Statement() throws ParseException {
   final Statement statement;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IF:
@@ -2971,6 +3051,7 @@ Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -2984,7 +3065,7 @@ Token token;
                                   {if (true) return statement;}
       break;
     default:
-      jj_la1[76] = jj_gen;
+      jj_la1[78] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2994,22 +3075,22 @@ Token token;
 /**
  * An html block inside a php syntax.
  */
-  static final public HTMLBlock htmlBlock() throws ParseException {
+  final public HTMLBlock htmlBlock() throws ParseException {
   final int startIndex = nodePtr;
   final AstNode[] blockNodes;
   final int nbNodes;
   final Token phpEnd;
     phpEnd = jj_consume_token(PHPEND);
    htmlStart = phpEnd.sourceEnd;
-    label_21:
+    label_22:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case PHPECHOSTART:
         ;
         break;
       default:
-        jj_la1[77] = jj_gen;
-        break label_21;
+        jj_la1[79] = jj_gen;
+        break label_22;
       }
       phpEchoBlock();
     }
@@ -3022,16 +3103,16 @@ Token token;
         jj_consume_token(PHPSTARTSHORT);
         break;
       default:
-        jj_la1[78] = jj_gen;
+        jj_la1[80] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
-     PHPParser.createNewHTMLCode();
+     createNewHTMLCode();
     } catch (ParseException e) {
     errorMessage = "unexpected end of file , '<?php' expected";
     errorLevel   = ERROR;
-    errorStart   = SimpleCharStream.getPosition();
-    errorEnd     = SimpleCharStream.getPosition();
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     {if (true) throw e;}
     }
   nbNodes    = nodePtr - startIndex;
@@ -3048,7 +3129,7 @@ Token token;
 /**
  * An include statement. It's "include" an expression;
  */
-  static final public InclusionStatement IncludeStatement() throws ParseException {
+  final public InclusionStatement IncludeStatement() throws ParseException {
   Expression expr;
   final int keyword;
   final InclusionStatement inclusionStatement;
@@ -3072,7 +3153,7 @@ Token token;
                                  keyword = InclusionStatement.INCLUDE_ONCE;pos=token.sourceEnd;
       break;
     default:
-      jj_la1[79] = jj_gen;
+      jj_la1[81] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3110,7 +3191,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public PrintExpression PrintExpression() throws ParseException {
+  final public PrintExpression PrintExpression() throws ParseException {
   final Expression expr;
   final Token printToken;
     token = jj_consume_token(PRINT);
@@ -3119,7 +3200,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public ListExpression ListExpression() throws ParseException {
+  final public ListExpression ListExpression() throws ParseException {
   Expression expr = null;
   final Expression expression;
   final ArrayList list = new ArrayList();
@@ -3144,19 +3225,19 @@ Token token;
      list.add(expr);pos = expr.sourceEnd;
       break;
     default:
-      jj_la1[80] = jj_gen;
+      jj_la1[82] = jj_gen;
       ;
     }
    if (expr == null) list.add(null);
-    label_22:
+    label_23:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[81] = jj_gen;
-        break label_22;
+        jj_la1[83] = jj_gen;
+        break label_23;
       }
       try {
         token = jj_consume_token(COMMA);
@@ -3174,7 +3255,7 @@ Token token;
                                     list.add(expr);pos = expr.sourceEnd;
         break;
       default:
-        jj_la1[82] = jj_gen;
+        jj_la1[84] = jj_gen;
         ;
       }
     }
@@ -3200,7 +3281,7 @@ Token token;
                               expression.sourceEnd);}
       break;
     default:
-      jj_la1[83] = jj_gen;
+      jj_la1[85] = jj_gen;
       ;
     }
     final AbstractVariable[] vars = new AbstractVariable[list.size()];
@@ -3213,7 +3294,7 @@ Token token;
  * An echo statement.
  * echo anyexpression (, otherexpression)*
  */
-  static final public EchoStatement EchoStatement() throws ParseException {
+  final public EchoStatement EchoStatement() throws ParseException {
   final ArrayList expressions = new ArrayList();
   Expression expr;
   Token token;
@@ -3221,15 +3302,15 @@ Token token;
     token = jj_consume_token(ECHO);
     expr = Expression();
    expressions.add(expr);
-    label_23:
+    label_24:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[84] = jj_gen;
-        break label_23;
+        jj_la1[86] = jj_gen;
+        break label_24;
       }
       jj_consume_token(COMMA);
       expr = Expression();
@@ -3255,7 +3336,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public GlobalStatement GlobalStatement() throws ParseException {
+  final public GlobalStatement GlobalStatement() throws ParseException {
    Variable expr;
    final ArrayList vars = new ArrayList();
    final GlobalStatement global;
@@ -3264,15 +3345,15 @@ Token token;
     token = jj_consume_token(GLOBAL);
     expr = Variable();
      vars.add(expr);pos = expr.sourceEnd+1;
-    label_24:
+    label_25:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[85] = jj_gen;
-        break label_24;
+        jj_la1[87] = jj_gen;
+        break label_25;
       }
       jj_consume_token(COMMA);
       expr = Variable();
@@ -3299,7 +3380,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public StaticStatement StaticStatement() throws ParseException {
+  final public StaticStatement StaticStatement() throws ParseException {
   final ArrayList vars = new ArrayList();
   VariableDeclaration expr;
   final Token token, token2;
@@ -3307,15 +3388,15 @@ Token token;
     token = jj_consume_token(STATIC);
     expr = VariableDeclarator();
                                                 vars.add(expr);pos = expr.sourceEnd+1;
-    label_25:
+    label_26:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[86] = jj_gen;
-        break label_25;
+        jj_la1[88] = jj_gen;
+        break label_26;
       }
       jj_consume_token(COMMA);
       expr = VariableDeclarator();
@@ -3339,7 +3420,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public LabeledStatement LabeledStatement() throws ParseException {
+  final public LabeledStatement LabeledStatement() throws ParseException {
   final Token label;
   final Statement statement;
     label = jj_consume_token(IDENTIFIER);
@@ -3356,7 +3437,7 @@ Token token;
  * }.
  * @return a block
  */
-  static final public Block Block() throws ParseException {
+  final public Block Block() throws ParseException {
   final ArrayList list = new ArrayList();
   Statement statement;
   final Token token, token2;
@@ -3367,13 +3448,13 @@ Token token;
     } catch (ParseException e) {
     errorMessage = "'{' expected";
     errorLevel   = ERROR;
-    pos = PHPParser.token.sourceEnd+1;
+    pos = this.token.sourceEnd+1;
     start=pos;
     errorStart = pos;
     errorEnd   = pos;
     processParseExceptionDebug(e);
     }
-    label_26:
+    label_27:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case PHPEND:
@@ -3414,6 +3495,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -3422,8 +3504,8 @@ Token token;
         ;
         break;
       default:
-        jj_la1[87] = jj_gen;
-        break label_26;
+        jj_la1[89] = jj_gen;
+        break label_27;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case CLASS:
@@ -3463,6 +3545,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -3477,10 +3560,10 @@ Token token;
                                     list.add(statement);
                                     pos = statement.sourceEnd+1;
                                   }
-                                  pos = PHPParser.token.sourceEnd+1;
+                                  pos = this.token.sourceEnd+1;
         break;
       default:
-        jj_la1[88] = jj_gen;
+        jj_la1[90] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -3501,7 +3584,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Statement BlockStatement() throws ParseException {
+  final public Statement BlockStatement() throws ParseException {
   final Statement statement;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IF:
@@ -3539,6 +3622,7 @@ Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -3568,7 +3652,7 @@ Token token;
                                    {if (true) return statement;}
       break;
     default:
-      jj_la1[89] = jj_gen;
+      jj_la1[91] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3578,7 +3662,7 @@ Token token;
 /**
  * A Block statement that will not contain any 'break'
  */
-  static final public Statement BlockStatementNoBreak() throws ParseException {
+  final public Statement BlockStatementNoBreak() throws ParseException {
   final Statement statement;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IF:
@@ -3615,6 +3699,7 @@ Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -3634,7 +3719,7 @@ Token token;
                                    {if (true) return statement;}
       break;
     default:
-      jj_la1[90] = jj_gen;
+      jj_la1[92] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -3644,20 +3729,20 @@ Token token;
 /**
  * used only by ForInit()
  */
-  static final public Expression[] LocalVariableDeclaration() throws ParseException {
+  final public Expression[] LocalVariableDeclaration() throws ParseException {
   final ArrayList list = new ArrayList();
   Expression var;
     var = Expression();
    list.add(var);
-    label_27:
+    label_28:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[91] = jj_gen;
-        break label_27;
+        jj_la1[93] = jj_gen;
+        break label_28;
       }
       jj_consume_token(COMMA);
       var = Expression();
@@ -3672,7 +3757,7 @@ Token token;
 /**
  * used only by LocalVariableDeclaration().
  */
-  static final public VariableDeclaration LocalVariableDeclarator() throws ParseException {
+  final public VariableDeclaration LocalVariableDeclarator() throws ParseException {
   final Variable varName;
   Expression initializer = null;
     varName = Variable();
@@ -3682,7 +3767,7 @@ Token token;
       initializer = Expression();
       break;
     default:
-      jj_la1[92] = jj_gen;
+      jj_la1[94] = jj_gen;
       ;
     }
    if (initializer == null) {
@@ -3699,7 +3784,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public EmptyStatement EmptyStatement() throws ParseException {
+  final public EmptyStatement EmptyStatement() throws ParseException {
   final Token token;
     token = jj_consume_token(SEMICOLON);
    {if (true) return new EmptyStatement(token.sourceStart,token.sourceEnd);}
@@ -3709,7 +3794,7 @@ Token token;
 /**
  * used only by StatementExpressionList() which is used only by ForInit() and ForStatement()
  */
-  static final public Expression StatementExpression() throws ParseException {
+  final public Expression StatementExpression() throws ParseException {
   final Expression expr;
   final Token operator;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3741,26 +3826,26 @@ Token token;
                                                                   operator.sourceEnd);}
           break;
         default:
-          jj_la1[93] = jj_gen;
+          jj_la1[95] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
         break;
       default:
-        jj_la1[94] = jj_gen;
+        jj_la1[96] = jj_gen;
         ;
       }
    {if (true) return expr;}
       break;
     default:
-      jj_la1[95] = jj_gen;
+      jj_la1[97] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     throw new Error("Missing return statement in function");
   }
 
-  static final public SwitchStatement SwitchStatement() throws ParseException {
+  final public SwitchStatement SwitchStatement() throws ParseException {
   Expression variable;
   final AbstractCase[] cases;
   final Token switchToken,lparenToken,rparenToken;
@@ -3809,25 +3894,25 @@ Token token;
       cases = switchStatementColon(switchToken.sourceStart, switchToken.sourceEnd);
       break;
     default:
-      jj_la1[96] = jj_gen;
+      jj_la1[98] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
    {if (true) return new SwitchStatement(variable,
                               cases,
                               switchToken.sourceStart,
-                              PHPParser.token.sourceEnd);}
+                              this.token.sourceEnd);}
     throw new Error("Missing return statement in function");
   }
 
-  static final public AbstractCase[] switchStatementBrace() throws ParseException {
+  final public AbstractCase[] switchStatementBrace() throws ParseException {
   AbstractCase cas;
   final ArrayList cases = new ArrayList();
   Token token;
   int pos;
     token = jj_consume_token(LBRACE);
                     pos = token.sourceEnd;
-    label_28:
+    label_29:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case CASE:
@@ -3835,8 +3920,8 @@ Token token;
         ;
         break;
       default:
-        jj_la1[97] = jj_gen;
-        break label_28;
+        jj_la1[99] = jj_gen;
+        break label_29;
       }
       cas = switchLabel0();
                          cases.add(cas);pos = cas.sourceEnd;
@@ -3862,7 +3947,7 @@ Token token;
  * @param start the begin offset of the switch
  * @param end the end offset of the switch
  */
-  static final public AbstractCase[] switchStatementColon(final int start, final int end) throws ParseException {
+  final public AbstractCase[] switchStatementColon(final int start, final int end) throws ParseException {
   AbstractCase cas;
   final ArrayList cases = new ArrayList();
   Token token;
@@ -3879,7 +3964,7 @@ Token token;
   } catch (CoreException e) {
     PHPeclipsePlugin.log(e);
   }
-    label_29:
+    label_30:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case CASE:
@@ -3887,8 +3972,8 @@ Token token;
         ;
         break;
       default:
-        jj_la1[98] = jj_gen;
-        break label_29;
+        jj_la1[100] = jj_gen;
+        break label_30;
       }
       cas = switchLabel0();
                           cases.add(cas);pos = cas.sourceEnd;
@@ -3919,13 +4004,14 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public AbstractCase switchLabel0() throws ParseException {
+  final public AbstractCase switchLabel0() throws ParseException {
   final Expression expr;
   Statement statement;
   final ArrayList stmts = new ArrayList();
-  final Token token = PHPParser.token;
+  final Token token = this.token;
+  final int start = this.token.next.sourceStart;
     expr = SwitchLabel();
-    label_30:
+    label_31:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case PHPEND:
@@ -3966,6 +4052,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -3974,8 +4061,8 @@ Token token;
         ;
         break;
       default:
-        jj_la1[99] = jj_gen;
-        break label_30;
+        jj_la1[101] = jj_gen;
+        break label_31;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case CLASS:
@@ -4014,6 +4101,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -4031,7 +4119,7 @@ Token token;
                                          stmts.add(statement);
         break;
       default:
-        jj_la1[100] = jj_gen;
+        jj_la1[102] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4040,7 +4128,8 @@ Token token;
     final Statement[] stmtsArray = new Statement[listSize];
     stmts.toArray(stmtsArray);
     if (expr == null) {//it's a default
-      {if (true) return new DefaultCase(stmtsArray,token.sourceStart,stmtsArray[listSize-1].sourceEnd);}
+      final int end = this.token.next.sourceStart;
+      {if (true) return new DefaultCase(stmtsArray,start,end);}
     }
     if (listSize != 0) {
       {if (true) return new Case(expr,stmtsArray,expr.sourceStart,stmtsArray[listSize-1].sourceEnd);}
@@ -4056,7 +4145,7 @@ Token token;
  * default :
  * @return the if it was a case and null if not
  */
-  static final public Expression SwitchLabel() throws ParseException {
+  final public Expression SwitchLabel() throws ParseException {
   final Expression expr;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case CASE:
@@ -4073,7 +4162,6 @@ Token token;
       }
       try {
         token = jj_consume_token(COLON);
-     {if (true) return expr;}
       } catch (ParseException e) {
     errorMessage = "':' expected after case expression";
     errorLevel   = ERROR;
@@ -4081,12 +4169,12 @@ Token token;
     errorEnd   = expr.sourceEnd+1;
     processParseExceptionDebug(e);
       }
+   {if (true) return expr;}
       break;
     case _DEFAULT:
       token = jj_consume_token(_DEFAULT);
       try {
         jj_consume_token(COLON);
-     {if (true) return null;}
       } catch (ParseException e) {
     errorMessage = "':' expected after 'default' keyword";
     errorLevel   = ERROR;
@@ -4094,16 +4182,17 @@ Token token;
     errorEnd   = token.sourceEnd+1;
     processParseExceptionDebug(e);
       }
+   {if (true) return null;}
       break;
     default:
-      jj_la1[101] = jj_gen;
+      jj_la1[103] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     throw new Error("Missing return statement in function");
   }
 
-  static final public Break BreakStatement() throws ParseException {
+  final public Break BreakStatement() throws ParseException {
   Expression expression = null;
   final Token token, token2;
   int pos;
@@ -4128,6 +4217,7 @@ Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -4135,7 +4225,7 @@ Token token;
                                pos = expression.sourceEnd+1;
       break;
     default:
-      jj_la1[102] = jj_gen;
+      jj_la1[104] = jj_gen;
       ;
     }
     try {
@@ -4152,7 +4242,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public IfStatement IfStatement() throws ParseException {
+  final public IfStatement IfStatement() throws ParseException {
   final Expression condition;
   final IfStatement ifStatement;
   Token token;
@@ -4163,15 +4253,15 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression Condition(final String keyword) throws ParseException {
+  final public Expression Condition(final String keyword) throws ParseException {
   final Expression condition;
     try {
       jj_consume_token(LPAREN);
     } catch (ParseException e) {
     errorMessage = "'(' expected after " + keyword + " keyword";
     errorLevel   = ERROR;
-    errorStart = PHPParser.token.sourceEnd + 1;
-    errorEnd   = PHPParser.token.sourceEnd + 1;
+    errorStart = this.token.sourceEnd + 1;
+    errorEnd   = this.token.sourceEnd + 1;
     processParseExceptionDebug(e);
     }
     condition = Expression();
@@ -4188,7 +4278,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public IfStatement IfStatement0(final Expression condition, final int start,final int end) throws ParseException {
+  final public IfStatement IfStatement0(final Expression condition, final int start,final int end) throws ParseException {
   Statement statement;
   final Statement stmt;
   final Statement[] statementsArray;
@@ -4197,13 +4287,13 @@ Token token;
   final ArrayList stmts;
   final ArrayList elseIfList = new ArrayList();
   final ElseIf[] elseIfs;
-  int pos = SimpleCharStream.getPosition();
+  int pos = jj_input_stream.getPosition();
   final int endStatements;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COLON:
       jj_consume_token(COLON);
    stmts = new ArrayList();
-      label_31:
+      label_32:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case PHPEND:
@@ -4242,6 +4332,7 @@ Token token;
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
+        case DOUBLEQUOTE:
         case DOLLAR:
         case IDENTIFIER:
         case LPAREN:
@@ -4250,8 +4341,8 @@ Token token;
           ;
           break;
         default:
-          jj_la1[103] = jj_gen;
-          break label_31;
+          jj_la1[105] = jj_gen;
+          break label_32;
         }
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case IF:
@@ -4289,6 +4380,7 @@ Token token;
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
+        case DOUBLEQUOTE:
         case DOLLAR:
         case IDENTIFIER:
         case LPAREN:
@@ -4302,21 +4394,21 @@ Token token;
                               if (statement != null) {stmts.add(statement);}
           break;
         default:
-          jj_la1[104] = jj_gen;
+          jj_la1[106] = jj_gen;
           jj_consume_token(-1);
           throw new ParseException();
         }
       }
-    endStatements = SimpleCharStream.getPosition();
-      label_32:
+    endStatements = jj_input_stream.getPosition();
+      label_33:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case ELSEIF:
           ;
           break;
         default:
-          jj_la1[105] = jj_gen;
-          break label_32;
+          jj_la1[107] = jj_gen;
+          break label_33;
         }
         elseifStatement = ElseIfStatementColon();
                                               elseIfList.add(elseifStatement);
@@ -4326,7 +4418,7 @@ Token token;
         elseStatement = ElseStatementColon();
         break;
       default:
-        jj_la1[106] = jj_gen;
+        jj_la1[108] = jj_gen;
         ;
       }
    try {
@@ -4344,8 +4436,8 @@ Token token;
       } catch (ParseException e) {
     errorMessage = "'endif' expected";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     {if (true) throw e;}
       }
       try {
@@ -4353,8 +4445,8 @@ Token token;
       } catch (ParseException e) {
     errorMessage = "';' expected after 'endif' keyword";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     {if (true) throw e;}
       }
     elseIfs = new ElseIf[elseIfList.size()];
@@ -4365,7 +4457,7 @@ Token token;
                               elseIfs,
                               elseStatement,
                               pos,
-                              SimpleCharStream.getPosition());}
+                              jj_input_stream.getPosition());}
     } else {
       statementsArray = new Statement[stmts.size()];
       stmts.toArray(statementsArray);
@@ -4374,7 +4466,7 @@ Token token;
                              elseIfs,
                              elseStatement,
                              pos,
-                             SimpleCharStream.getPosition());}
+                             jj_input_stream.getPosition());}
     }
       break;
     case PHPEND:
@@ -4413,6 +4505,7 @@ Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -4454,6 +4547,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -4465,19 +4559,19 @@ Token token;
         stmt = htmlBlock();
         break;
       default:
-        jj_la1[107] = jj_gen;
+        jj_la1[109] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
-      label_33:
+      label_34:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case ELSEIF:
           ;
           break;
         default:
-          jj_la1[108] = jj_gen;
-          break label_33;
+          jj_la1[110] = jj_gen;
+          break label_34;
         }
         elseifStatement = ElseIfStatement();
                                                       elseIfList.add(elseifStatement);
@@ -4486,22 +4580,22 @@ Token token;
       case ELSE:
         jj_consume_token(ELSE);
         try {
-       pos = SimpleCharStream.getPosition();
+       pos = jj_input_stream.getPosition();
           statement = Statement();
-       elseStatement = new Else(statement,pos,SimpleCharStream.getPosition());
+       elseStatement = new Else(statement,pos,jj_input_stream.getPosition());
         } catch (ParseException e) {
       if (errorMessage != null) {
         {if (true) throw e;}
       }
       errorMessage = "unexpected token '"+e.currentToken.next.image+"', a statement was expected";
       errorLevel   = ERROR;
-      errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd   = SimpleCharStream.getPosition() + 1;
+      errorStart = e.currentToken.sourceStart;
+      errorEnd   = e.currentToken.sourceEnd;
       {if (true) throw e;}
         }
         break;
       default:
-        jj_la1[109] = jj_gen;
+        jj_la1[111] = jj_gen;
         ;
       }
     elseIfs = new ElseIf[elseIfList.size()];
@@ -4511,17 +4605,17 @@ Token token;
                            elseIfs,
                            elseStatement,
                            pos,
-                           SimpleCharStream.getPosition());}
+                           jj_input_stream.getPosition());}
       break;
     default:
-      jj_la1[110] = jj_gen;
+      jj_la1[112] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     throw new Error("Missing return statement in function");
   }
 
-  static final public ElseIf ElseIfStatementColon() throws ParseException {
+  final public ElseIf ElseIfStatementColon() throws ParseException {
   final Expression condition;
   Statement statement;
   final ArrayList list = new ArrayList();
@@ -4529,7 +4623,7 @@ Token token;
     elseifToken = jj_consume_token(ELSEIF);
     condition = Condition("elseif");
     jj_consume_token(COLON);
-    label_34:
+    label_35:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case PHPEND:
@@ -4568,6 +4662,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -4576,8 +4671,8 @@ Token token;
         ;
         break;
       default:
-        jj_la1[111] = jj_gen;
-        break label_34;
+        jj_la1[113] = jj_gen;
+        break label_35;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case IF:
@@ -4615,6 +4710,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -4628,7 +4724,7 @@ Token token;
                                       if (statement != null) {list.add(statement);}
         break;
       default:
-        jj_la1[112] = jj_gen;
+        jj_la1[114] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4642,13 +4738,13 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Else ElseStatementColon() throws ParseException {
+  final public Else ElseStatementColon() throws ParseException {
   Statement statement;
   final ArrayList list = new ArrayList();
   final Token elseToken;
     elseToken = jj_consume_token(ELSE);
     jj_consume_token(COLON);
-    label_35:
+    label_36:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case PHPEND:
@@ -4687,6 +4783,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -4695,8 +4792,8 @@ Token token;
         ;
         break;
       default:
-        jj_la1[113] = jj_gen;
-        break label_35;
+        jj_la1[115] = jj_gen;
+        break label_36;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case IF:
@@ -4734,6 +4831,7 @@ Token token;
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -4747,7 +4845,7 @@ Token token;
                                              if (statement != null) {list.add(statement);}
         break;
       default:
-        jj_la1[114] = jj_gen;
+        jj_la1[116] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -4759,7 +4857,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public ElseIf ElseIfStatement() throws ParseException {
+  final public ElseIf ElseIfStatement() throws ParseException {
   final Expression condition;
   //final Statement statement;
   final Token elseifToken;
@@ -4771,7 +4869,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public WhileStatement WhileStatement() throws ParseException {
+  final public WhileStatement WhileStatement() throws ParseException {
   final Expression condition;
   final Statement action;
   final Token whileToken;
@@ -4782,14 +4880,14 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public Statement WhileStatement0(final int start, final int end) throws ParseException {
+  final public Statement WhileStatement0(final int start, final int end) throws ParseException {
   Statement statement;
   final ArrayList stmts = new ArrayList();
-  final int pos = SimpleCharStream.getPosition();
+  final int pos = jj_input_stream.getPosition();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COLON:
       jj_consume_token(COLON);
-      label_36:
+      label_37:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case IF:
@@ -4827,6 +4925,7 @@ Token token;
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
+        case DOUBLEQUOTE:
         case DOLLAR:
         case IDENTIFIER:
         case LPAREN:
@@ -4835,8 +4934,8 @@ Token token;
           ;
           break;
         default:
-          jj_la1[115] = jj_gen;
-          break label_36;
+          jj_la1[117] = jj_gen;
+          break label_37;
         }
         statement = Statement();
                                     stmts.add(statement);
@@ -4856,20 +4955,20 @@ Token token;
       } catch (ParseException e) {
     errorMessage = "'endwhile' expected";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     {if (true) throw e;}
       }
       try {
         jj_consume_token(SEMICOLON);
     final Statement[] stmtsArray = new Statement[stmts.size()];
     stmts.toArray(stmtsArray);
-    {if (true) return new Block(stmtsArray,pos,SimpleCharStream.getPosition());}
+    {if (true) return new Block(stmtsArray,pos,jj_input_stream.getPosition());}
       } catch (ParseException e) {
     errorMessage = "';' expected after 'endwhile' keyword";
     errorLevel   = ERROR;
-    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = SimpleCharStream.getPosition() + 1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     {if (true) throw e;}
       }
       break;
@@ -4908,6 +5007,7 @@ Token token;
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -4917,14 +5017,14 @@ Token token;
    {if (true) return statement;}
       break;
     default:
-      jj_la1[116] = jj_gen;
+      jj_la1[118] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     throw new Error("Missing return statement in function");
   }
 
-  static final public DoStatement DoStatement() throws ParseException {
+  final public DoStatement DoStatement() throws ParseException {
   final Statement action;
   final Expression condition;
   final Token token;
@@ -4949,7 +5049,7 @@ Token token;
     throw new Error("Missing return statement in function");
   }
 
-  static final public ForeachStatement ForeachStatement() throws ParseException {
+  final public ForeachStatement ForeachStatement() throws ParseException {
   Statement statement = null;
   Expression expression = null;
   ArrayVariableDeclaration variable = null;
@@ -4965,8 +5065,8 @@ Token token;
     } catch (ParseException e) {
     errorMessage = "'(' expected after 'foreach' keyword";
     errorLevel   = ERROR;
-    errorStart = foreachToken.sourceEnd+1;
-    errorEnd   = foreachToken.sourceEnd+1;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
     {pos = foreachToken.sourceEnd+1;}
     }
@@ -4976,8 +5076,8 @@ Token token;
     } catch (ParseException e) {
     errorMessage = "variable expected";
     errorLevel   = ERROR;
-    errorStart = pos;
-    errorEnd   = pos;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
     }
     try {
@@ -4986,8 +5086,8 @@ Token token;
     } catch (ParseException e) {
     errorMessage = "'as' expected";
     errorLevel   = ERROR;
-    errorStart = pos;
-    errorEnd   = pos;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
     }
     try {
@@ -4997,8 +5097,8 @@ Token token;
     if (errorMessage != null) {if (true) throw e;}
     errorMessage = "variable expected";
     errorLevel   = ERROR;
-    errorStart = pos;
-    errorEnd   = pos;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
     }
     try {
@@ -5007,26 +5107,26 @@ Token token;
     } catch (ParseException e) {
     errorMessage = "')' expected after 'foreach' keyword";
     errorLevel   = ERROR;
-    errorStart = pos;
-    errorEnd   = pos;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
     }
     try {
       statement = Statement();
-     pos = rparenToken.sourceEnd+1;
+     pos = statement.sourceEnd+1;
     } catch (ParseException e) {
     if (errorMessage != null) {if (true) throw e;}
     errorMessage = "statement expected";
     errorLevel   = ERROR;
-    errorStart = pos;
-    errorEnd   = pos;
+    errorStart = e.currentToken.sourceStart;
+    errorEnd   = e.currentToken.sourceEnd;
     processParseExceptionDebug(e);
     }
    {if (true) return new ForeachStatement(expression,
                                variable,
                                statement,
                                foreachToken.sourceStart,
-                               statement.sourceEnd);}
+                               pos);}
     throw new Error("Missing return statement in function");
   }
 
@@ -5034,7 +5134,7 @@ Token token;
  * a for declaration.
  * @return a node representing the for statement
  */
-  static final public ForStatement ForStatement() throws ParseException {
+  final public ForStatement ForStatement() throws ParseException {
 final Token token,tokenEndFor,token2,tokenColon;
 int pos;
 Expression[] initializations = null;
@@ -5071,13 +5171,14 @@ final ArrayList list = new ArrayList();
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
       initializations = ForInit();
       break;
     default:
-      jj_la1[117] = jj_gen;
+      jj_la1[119] = jj_gen;
       ;
     }
     jj_consume_token(SEMICOLON);
@@ -5100,13 +5201,14 @@ final ArrayList list = new ArrayList();
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
       condition = Expression();
       break;
     default:
-      jj_la1[118] = jj_gen;
+      jj_la1[120] = jj_gen;
       ;
     }
     jj_consume_token(SEMICOLON);
@@ -5129,13 +5231,14 @@ final ArrayList list = new ArrayList();
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
       increments = StatementExpressionList();
       break;
     default:
-      jj_la1[119] = jj_gen;
+      jj_la1[121] = jj_gen;
       ;
     }
     jj_consume_token(RPAREN);
@@ -5175,6 +5278,7 @@ final ArrayList list = new ArrayList();
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
@@ -5191,7 +5295,7 @@ final ArrayList list = new ArrayList();
     case COLON:
       tokenColon = jj_consume_token(COLON);
                             pos = tokenColon.sourceEnd+1;
-      label_37:
+      label_38:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case IF:
@@ -5229,6 +5333,7 @@ final ArrayList list = new ArrayList();
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
+        case DOUBLEQUOTE:
         case DOLLAR:
         case IDENTIFIER:
         case LPAREN:
@@ -5237,8 +5342,8 @@ final ArrayList list = new ArrayList();
           ;
           break;
         default:
-          jj_la1[120] = jj_gen;
-          break label_37;
+          jj_la1[122] = jj_gen;
+          break label_38;
         }
         action = Statement();
                              list.add(action);pos = action.sourceEnd+1;
@@ -5285,14 +5390,14 @@ final ArrayList list = new ArrayList();
                               pos);}
       break;
     default:
-      jj_la1[121] = jj_gen;
+      jj_la1[123] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression[] ForInit() throws ParseException {
+  final public Expression[] ForInit() throws ParseException {
   final Expression[] exprs;
     if (jj_2_5(2147483647)) {
       exprs = LocalVariableDeclaration();
@@ -5317,6 +5422,7 @@ final ArrayList list = new ArrayList();
       case INTEGER_LITERAL:
       case FLOATING_POINT_LITERAL:
       case STRING_LITERAL:
+      case DOUBLEQUOTE:
       case DOLLAR:
       case IDENTIFIER:
       case LPAREN:
@@ -5324,7 +5430,7 @@ final ArrayList list = new ArrayList();
    {if (true) return exprs;}
         break;
       default:
-        jj_la1[122] = jj_gen;
+        jj_la1[124] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -5332,20 +5438,20 @@ final ArrayList list = new ArrayList();
     throw new Error("Missing return statement in function");
   }
 
-  static final public Expression[] StatementExpressionList() throws ParseException {
+  final public Expression[] StatementExpressionList() throws ParseException {
   final ArrayList list = new ArrayList();
   final Expression expr;
     expr = Expression();
                          list.add(expr);
-    label_38:
+    label_39:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case COMMA:
         ;
         break;
       default:
-        jj_la1[123] = jj_gen;
-        break label_38;
+        jj_la1[125] = jj_gen;
+        break label_39;
       }
       jj_consume_token(COMMA);
       Expression();
@@ -5357,7 +5463,7 @@ final ArrayList list = new ArrayList();
     throw new Error("Missing return statement in function");
   }
 
-  static final public Continue ContinueStatement() throws ParseException {
+  final public Continue ContinueStatement() throws ParseException {
   Expression expr = null;
   final Token token;
   Token token2 = null;
@@ -5381,13 +5487,14 @@ final ArrayList list = new ArrayList();
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
       expr = Expression();
       break;
     default:
-      jj_la1[124] = jj_gen;
+      jj_la1[126] = jj_gen;
       ;
     }
     try {
@@ -5414,7 +5521,7 @@ final ArrayList list = new ArrayList();
     throw new Error("Missing return statement in function");
   }
 
-  static final public ReturnStatement ReturnStatement() throws ParseException {
+  final public ReturnStatement ReturnStatement() throws ParseException {
   Expression expr = null;
   final Token token;
   Token token2 = null;
@@ -5438,13 +5545,14 @@ final ArrayList list = new ArrayList();
     case INTEGER_LITERAL:
     case FLOATING_POINT_LITERAL:
     case STRING_LITERAL:
+    case DOUBLEQUOTE:
     case DOLLAR:
     case IDENTIFIER:
     case LPAREN:
       expr = Expression();
       break;
     default:
-      jj_la1[125] = jj_gen;
+      jj_la1[127] = jj_gen;
       ;
     }
     try {
@@ -5471,703 +5579,297 @@ final ArrayList list = new ArrayList();
     throw new Error("Missing return statement in function");
   }
 
-  static final private boolean jj_2_1(int xla) {
+  final private boolean jj_2_1(int xla) {
     jj_la = xla; jj_lastpos = jj_scanpos = token;
     boolean retval = !jj_3_1();
     jj_save(0, xla);
     return retval;
   }
 
-  static final private boolean jj_2_2(int xla) {
+  final private boolean jj_2_2(int xla) {
     jj_la = xla; jj_lastpos = jj_scanpos = token;
     boolean retval = !jj_3_2();
     jj_save(1, xla);
     return retval;
   }
 
-  static final private boolean jj_2_3(int xla) {
+  final private boolean jj_2_3(int xla) {
     jj_la = xla; jj_lastpos = jj_scanpos = token;
     boolean retval = !jj_3_3();
     jj_save(2, xla);
     return retval;
   }
 
-  static final private boolean jj_2_4(int xla) {
+  final private boolean jj_2_4(int xla) {
     jj_la = xla; jj_lastpos = jj_scanpos = token;
     boolean retval = !jj_3_4();
     jj_save(3, xla);
     return retval;
   }
 
-  static final private boolean jj_2_5(int xla) {
+  final private boolean jj_2_5(int xla) {
     jj_la = xla; jj_lastpos = jj_scanpos = token;
     boolean retval = !jj_3_5();
     jj_save(4, xla);
     return retval;
   }
 
-  static final private boolean jj_3R_136() {
-    if (jj_scan_token(LE)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_135() {
-    if (jj_scan_token(GT)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_134() {
-    if (jj_scan_token(LT)) return true;
+  final private boolean jj_3R_110() {
+    if (jj_scan_token(BIT_OR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_123() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_134()) {
-    jj_scanpos = xsp;
-    if (jj_3R_135()) {
-    jj_scanpos = xsp;
-    if (jj_3R_136()) {
-    jj_scanpos = xsp;
-    if (jj_3R_137()) 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;
-    if (jj_3R_122()) return true;
+    if (jj_3R_109()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_119() {
-    if (jj_3R_122()) return true;
+  final private boolean jj_3R_103() {
+    if (jj_3R_109()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_123()) { jj_scanpos = xsp; break; }
+      if (jj_3R_110()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     return false;
   }
 
-  static final private boolean jj_3R_71() {
-    if (jj_3R_49()) return true;
+  final private boolean jj_3R_188() {
+    if (jj_scan_token(ARRAY)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_70() {
-    if (jj_3R_48()) return true;
+    if (jj_3R_198()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_55() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_70()) {
-    jj_scanpos = xsp;
-    if (jj_3R_71()) return true;
+  final private boolean jj_3R_132() {
+    if (jj_scan_token(IDENTIFIER)) 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;
   }
 
-  static final private boolean jj_3R_47() {
-    if (jj_scan_token(LBRACE)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_55()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(RBRACE)) return true;
+  final private boolean jj_3R_106() {
+    if (jj_scan_token(DOT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_202() {
-    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_103()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3_2() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_131() {
+    if (jj_scan_token(LBRACE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_69() {
     if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_54() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_68()) {
-    jj_scanpos = xsp;
-    if (jj_3R_69()) 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;
-  }
-
-  static final private boolean jj_3R_68() {
-    if (jj_3R_48()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_112() {
-    if (jj_scan_token(ASSIGN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
+    if (jj_scan_token(RBRACE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_201() {
-    if (jj_3R_40()) return true;
+  final private boolean jj_3R_97() {
+    if (jj_3R_103()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3_2()) { jj_scanpos = xsp; break; }
+      if (jj_3R_106()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     return false;
   }
 
-  static final private boolean jj_3R_46() {
-    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_54()) 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;
-  }
-
-  static final private boolean jj_3R_128() {
-    if (jj_scan_token(TRIPLEEQUAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_127() {
-    if (jj_scan_token(BANGDOUBLEEQUAL)) return true;
+  final private boolean jj_3R_204() {
+    if (jj_3R_207()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_126() {
-    if (jj_scan_token(NOT_EQUAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_195() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+  final private boolean jj_3R_122() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_201()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    xsp = jj_scanpos;
-    if (jj_3R_202()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(RPAREN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_125() {
-    if (jj_scan_token(DIF)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_124() {
-    if (jj_scan_token(EQUAL_EQUAL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_53() {
-    if (jj_3R_67()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_116() {
-    if (jj_3R_115()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_120() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_124()) {
-    jj_scanpos = xsp;
-    if (jj_3R_125()) {
-    jj_scanpos = xsp;
-    if (jj_3R_126()) {
+    if (jj_3R_130()) {
     jj_scanpos = xsp;
-    if (jj_3R_127()) {
+    if (jj_3R_131()) {
     jj_scanpos = xsp;
-    if (jj_3R_128()) return true;
+    if (jj_3R_132()) 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_119()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_52() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_117() {
-    if (jj_3R_119()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_120()) { jj_scanpos = xsp; break; }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    }
     return false;
   }
 
-  static final private boolean jj_3R_208() {
-    if (jj_scan_token(ARRAYASSIGN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_111() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_116()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_40() {
-    if (jj_3R_48()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_208()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_51() {
-    if (jj_scan_token(LBRACE)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
+  final private boolean jj_3R_130() {
+    if (jj_scan_token(DOLLAR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(RBRACE)) return true;
+    if (jj_3R_122()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_110() {
-    if (jj_3R_115()) return true;
+  final private boolean jj_3R_108() {
+    if (jj_scan_token(_ANDL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_118() {
-    if (jj_scan_token(BIT_AND)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_117()) return true;
+  final private boolean jj_3R_107() {
+    if (jj_scan_token(AND_AND)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_45() {
-    if (jj_scan_token(CLASSACCESS)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+  final private boolean jj_3R_100() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_51()) {
-    jj_scanpos = xsp;
-    if (jj_3R_52()) {
+    if (jj_3R_107()) {
     jj_scanpos = xsp;
-    if (jj_3R_53()) return true;
+    if (jj_3R_108()) 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;
-  }
-
-  static final private boolean jj_3R_39() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_45()) {
-    jj_scanpos = xsp;
-    if (jj_3R_46()) {
-    jj_scanpos = xsp;
-    if (jj_3R_47()) return true;
+    if (jj_3R_97()) 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;
   }
 
-  static final private boolean jj_3R_113() {
-    if (jj_3R_117()) return true;
+  final private boolean jj_3R_81() {
+    if (jj_3R_97()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_118()) { jj_scanpos = xsp; break; }
+      if (jj_3R_100()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     return false;
   }
 
-  static final private boolean jj_3R_103() {
-    if (jj_scan_token(LIST)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_110()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_111()) { jj_scanpos = xsp; break; }
-      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;
-    xsp = jj_scanpos;
-    if (jj_3R_112()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_114() {
-    if (jj_scan_token(XOR)) return true;
+  final private boolean jj_3R_79() {
+    if (jj_scan_token(HOOK)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_113()) return true;
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_206() {
-    if (jj_3R_115()) return true;
+    if (jj_scan_token(COLON)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_205() {
-    if (jj_3R_49()) return true;
+    if (jj_3R_73()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_108() {
-    if (jj_3R_113()) return true;
+  final private boolean jj_3R_195() {
+    if (jj_scan_token(NEW)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_114()) { jj_scanpos = xsp; break; }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    }
-    return false;
-  }
-
-  static final private boolean jj_3R_204() {
-    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_3R_203()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_199() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_204()) {
-    jj_scanpos = xsp;
-    if (jj_3R_205()) {
-    jj_scanpos = xsp;
-    if (jj_3R_206()) 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;
+    if (jj_3R_204()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_104() {
-    if (jj_scan_token(PRINT)) return true;
+  final private boolean jj_3R_68() {
+    if (jj_scan_token(DOLLAR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
+    if (jj_3R_122()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_109() {
-    if (jj_scan_token(BIT_OR)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_108()) return true;
+  final private boolean jj_3R_202() {
+    if (jj_3R_207()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_102() {
-    if (jj_3R_108()) return true;
+  final private boolean jj_3R_194() {
+    if (jj_3R_116()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_109()) { jj_scanpos = xsp; break; }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    }
-    return false;
-  }
-
-  static final private boolean jj_3R_186() {
-    if (jj_scan_token(ARRAY)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_195()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_131() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    xsp = jj_scanpos;
+    if (jj_3R_202()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_130() {
-    if (jj_scan_token(LBRACE)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(RBRACE)) return true;
+  final private boolean jj_3R_102() {
+    if (jj_scan_token(_ORL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_105() {
-    if (jj_scan_token(DOT)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_102()) return true;
+  final private boolean jj_3R_101() {
+    if (jj_scan_token(OR_OR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_121() {
+  final private boolean jj_3R_83() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_129()) {
-    jj_scanpos = xsp;
-    if (jj_3R_130()) {
+    if (jj_3R_101()) {
     jj_scanpos = xsp;
-    if (jj_3R_131()) 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;
-  }
-
-  static final private boolean jj_3R_129() {
-    if (jj_scan_token(DOLLAR)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_121()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_96() {
     if (jj_3R_102()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_105()) { jj_scanpos = xsp; break; }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    }
-    return false;
-  }
-
-  static final private boolean jj_3R_200() {
-    if (jj_3R_203()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_107() {
-    if (jj_scan_token(_ANDL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_106() {
-    if (jj_scan_token(AND_AND)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_67() {
-    if (jj_scan_token(DOLLAR)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_121()) return true;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_81()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_99() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_106()) {
-    jj_scanpos = xsp;
-    if (jj_3R_107()) 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_3R_96()) return true;
+  final private boolean jj_3R_201() {
+    if (jj_3R_207()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_80() {
-    if (jj_3R_96()) return true;
+  final private boolean jj_3R_76() {
+    if (jj_3R_81()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_99()) { jj_scanpos = xsp; break; }
+      if (jj_3R_83()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     return false;
   }
 
-  static final private boolean jj_3R_78() {
-    if (jj_scan_token(HOOK)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(COLON)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_72()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_192() {
-    if (jj_scan_token(NEW)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_199()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_200()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_198() {
-    if (jj_3R_203()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_191() {
-    if (jj_3R_115()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_198()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_101() {
-    if (jj_scan_token(_ORL)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_100() {
-    if (jj_scan_token(OR_OR)) return true;
+  final private boolean jj_3_1() {
+    if (jj_3R_40()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_82() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_100()) {
-    jj_scanpos = xsp;
-    if (jj_3R_101()) return true;
+  final private boolean jj_3R_51() {
+    if (jj_scan_token(COMMA)) 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_3R_80()) return true;
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3_1() {
-    if (jj_3R_39()) return true;
+  final private boolean jj_3R_200() {
+    if (jj_scan_token(STATICCLASSACCESS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_197() {
     if (jj_3R_203()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_75() {
-    if (jj_3R_80()) return true;
+  final private boolean jj_3R_45() {
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_82()) { jj_scanpos = xsp; break; }
+      if (jj_3R_51()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     return false;
   }
 
-  static final private boolean jj_3R_196() {
-    if (jj_scan_token(STATICCLASSACCESS)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_199()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_115() {
-    if (jj_3R_67()) return true;
+  final private boolean jj_3R_116() {
+    if (jj_3R_68()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
@@ -6178,161 +5880,165 @@ final ArrayList list = new ArrayList();
     return false;
   }
 
-  static final private boolean jj_3R_190() {
+  final private boolean jj_3R_193() {
     if (jj_scan_token(IDENTIFIER)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_196()) { jj_scanpos = xsp; break; }
+      if (jj_3R_200()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     xsp = jj_scanpos;
-    if (jj_3R_197()) jj_scanpos = xsp;
+    if (jj_3R_201()) jj_scanpos = xsp;
     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_185() {
+  final private boolean jj_3R_187() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_190()) {
+    if (jj_3R_193()) {
     jj_scanpos = xsp;
-    if (jj_3R_191()) {
+    if (jj_3R_194()) {
     jj_scanpos = xsp;
-    if (jj_3R_192()) return true;
+    if (jj_3R_195()) 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;
   }
 
-  static final private boolean jj_3R_72() {
-    if (jj_3R_75()) return true;
+  final private boolean jj_3R_73() {
+    if (jj_3R_76()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_78()) jj_scanpos = xsp;
+    if (jj_3R_79()) jj_scanpos = xsp;
     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_177() {
-    if (jj_3R_186()) return true;
+  final private boolean jj_3R_178() {
+    if (jj_3R_188()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_184() {
+  final private boolean jj_3_5() {
+    if (jj_3R_45()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_186() {
     if (jj_scan_token(BIT_AND)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_95() {
+  final private boolean jj_3R_96() {
     if (jj_scan_token(TILDEEQUAL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_94() {
+  final private boolean jj_3R_95() {
     if (jj_scan_token(DOTASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_172() {
+  final private boolean jj_3R_173() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_176()) {
+    if (jj_3R_177()) {
     jj_scanpos = xsp;
-    if (jj_3R_177()) return true;
+    if (jj_3R_178()) 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;
   }
 
-  static final private boolean jj_3R_176() {
+  final private boolean jj_3R_177() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_184()) jj_scanpos = xsp;
+    if (jj_3R_186()) jj_scanpos = xsp;
     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_185()) return true;
+    if (jj_3R_187()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_93() {
+  final private boolean jj_3R_94() {
     if (jj_scan_token(ORASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_92() {
+  final private boolean jj_3R_93() {
     if (jj_scan_token(XORASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_91() {
+  final private boolean jj_3R_92() {
     if (jj_scan_token(ANDASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_90() {
+  final private boolean jj_3R_91() {
     if (jj_scan_token(RSIGNEDSHIFTASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_89() {
+  final private boolean jj_3R_90() {
     if (jj_scan_token(LSHIFTASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_88() {
+  final private boolean jj_3R_89() {
     if (jj_scan_token(MINUSASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_87() {
+  final private boolean jj_3R_88() {
     if (jj_scan_token(PLUSASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_86() {
+  final private boolean jj_3R_87() {
     if (jj_scan_token(REMASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_85() {
+  final private boolean jj_3R_86() {
     if (jj_scan_token(SLASHASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_84() {
+  final private boolean jj_3R_85() {
     if (jj_scan_token(STARASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_83() {
+  final private boolean jj_3R_84() {
     if (jj_scan_token(ASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_79() {
+  final private boolean jj_3R_80() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_83()) {
-    jj_scanpos = xsp;
     if (jj_3R_84()) {
     jj_scanpos = xsp;
     if (jj_3R_85()) {
@@ -6355,7 +6061,9 @@ final ArrayList list = new ArrayList();
     jj_scanpos = xsp;
     if (jj_3R_94()) {
     jj_scanpos = xsp;
-    if (jj_3R_95()) return true;
+    if (jj_3R_95()) {
+    jj_scanpos = xsp;
+    if (jj_3R_96()) 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;
@@ -6372,168 +6080,142 @@ final ArrayList list = new ArrayList();
     return false;
   }
 
-  static final private boolean jj_3R_194() {
+  final private boolean jj_3R_197() {
     if (jj_scan_token(MINUS_MINUS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_193() {
+  final private boolean jj_3R_196() {
     if (jj_scan_token(PLUS_PLUS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_189() {
+  final private boolean jj_3R_191() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_193()) {
+    if (jj_3R_196()) {
     jj_scanpos = xsp;
-    if (jj_3R_194()) return true;
+    if (jj_3R_197()) 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;
   }
 
-  static final private boolean jj_3R_174() {
-    if (jj_3R_172()) return true;
+  final private boolean jj_3R_175() {
+    if (jj_3R_173()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_189()) jj_scanpos = xsp;
+    if (jj_3R_191()) jj_scanpos = xsp;
     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_98() {
-    if (jj_3R_104()) return true;
+  final private boolean jj_3R_99() {
+    if (jj_3R_105()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_97() {
-    if (jj_3R_103()) return true;
+  final private boolean jj_3R_98() {
+    if (jj_3R_104()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_81() {
+  final private boolean jj_3R_82() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_97()) {
+    if (jj_3R_98()) {
     jj_scanpos = xsp;
-    if (jj_3R_98()) return true;
+    if (jj_3R_99()) 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;
   }
 
-  static final private boolean jj_3R_50() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_44() {
-    if (jj_3R_48()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_50()) { jj_scanpos = xsp; break; }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    }
-    return false;
-  }
-
-  static final private boolean jj_3R_188() {
+  final private boolean jj_3R_190() {
     if (jj_scan_token(ARRAY)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_187() {
-    if (jj_3R_49()) return true;
+  final private boolean jj_3R_189() {
+    if (jj_3R_50()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_77() {
-    if (jj_3R_81()) return true;
+  final private boolean jj_3R_78() {
+    if (jj_3R_82()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_42() {
+  final private boolean jj_3R_43() {
     if (jj_scan_token(ARRAY)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_76() {
+  final private boolean jj_3R_77() {
     if (jj_scan_token(BANG)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_73()) return true;
+    if (jj_3R_74()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_73() {
+  final private boolean jj_3R_74() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_76()) {
+    if (jj_3R_77()) {
     jj_scanpos = xsp;
-    if (jj_3R_77()) return true;
+    if (jj_3R_78()) 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;
   }
 
-  static final private boolean jj_3R_173() {
+  final private boolean jj_3R_174() {
     if (jj_scan_token(LPAREN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_187()) {
+    if (jj_3R_189()) {
     jj_scanpos = xsp;
-    if (jj_3R_188()) return true;
+    if (jj_3R_190()) 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(RPAREN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_143()) return true;
+    if (jj_3R_144()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_41() {
-    if (jj_3R_49()) return true;
+  final private boolean jj_3R_42() {
+    if (jj_3R_50()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_57() {
-    if (jj_3R_73()) return true;
+  final private boolean jj_3R_58() {
+    if (jj_3R_74()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3_5() {
-    if (jj_3R_44()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3_3() {
+  final private boolean jj_3_3() {
     if (jj_scan_token(LPAREN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_41()) {
+    if (jj_3R_42()) {
     jj_scanpos = xsp;
-    if (jj_3R_42()) return true;
+    if (jj_3R_43()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     if (jj_scan_token(RPAREN)) return true;
@@ -6541,38 +6223,38 @@ final ArrayList list = new ArrayList();
     return false;
   }
 
-  static final private boolean jj_3R_171() {
+  final private boolean jj_3R_172() {
     if (jj_scan_token(LPAREN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
+    if (jj_3R_49()) 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;
   }
 
-  static final private boolean jj_3R_170() {
-    if (jj_3R_175()) return true;
+  final private boolean jj_3R_171() {
+    if (jj_3R_176()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_169() {
-    if (jj_3R_174()) return true;
+  final private boolean jj_3R_170() {
+    if (jj_3R_175()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_165() {
+  final private boolean jj_3R_166() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_168()) {
-    jj_scanpos = xsp;
     if (jj_3R_169()) {
     jj_scanpos = xsp;
     if (jj_3R_170()) {
     jj_scanpos = xsp;
-    if (jj_3R_171()) return true;
+    if (jj_3R_171()) {
+    jj_scanpos = xsp;
+    if (jj_3R_172()) 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;
@@ -6580,139 +6262,145 @@ final ArrayList list = new ArrayList();
     return false;
   }
 
-  static final private boolean jj_3R_168() {
-    if (jj_3R_173()) return true;
+  final private boolean jj_3R_169() {
+    if (jj_3R_174()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_44() {
+    if (jj_3R_49()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(SEMICOLON)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_167() {
+  final private boolean jj_3R_168() {
     if (jj_scan_token(MINUS_MINUS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_166() {
+  final private boolean jj_3R_167() {
     if (jj_scan_token(PLUS_PLUS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_74() {
-    if (jj_3R_79()) return true;
+  final private boolean jj_3R_75() {
+    if (jj_3R_80()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_164() {
+  final private boolean jj_3R_165() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_166()) {
+    if (jj_3R_167()) {
     jj_scanpos = xsp;
-    if (jj_3R_167()) return true;
+    if (jj_3R_168()) 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_3R_172()) return true;
+    if (jj_3R_173()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_48() {
+  final private boolean jj_3R_49() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_56()) {
+    if (jj_3R_57()) {
     jj_scanpos = xsp;
-    if (jj_3R_57()) return true;
+    if (jj_3R_58()) 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;
   }
 
-  static final private boolean jj_3R_56() {
-    if (jj_3R_72()) return true;
+  final private boolean jj_3R_57() {
+    if (jj_3R_73()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_74()) jj_scanpos = xsp;
+    if (jj_3R_75()) jj_scanpos = xsp;
     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_66() {
+  final private boolean jj_3R_67() {
     if (jj_scan_token(OBJECT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_160() {
-    if (jj_3R_165()) return true;
+  final private boolean jj_3R_161() {
+    if (jj_3R_166()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_65() {
+  final private boolean jj_3R_66() {
     if (jj_scan_token(INTEGER)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_64() {
+  final private boolean jj_3R_65() {
     if (jj_scan_token(INT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_63() {
+  final private boolean jj_3R_64() {
     if (jj_scan_token(FLOAT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_159() {
-    if (jj_3R_164()) return true;
+  final private boolean jj_3R_160() {
+    if (jj_3R_165()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_62() {
+  final private boolean jj_3R_63() {
     if (jj_scan_token(DOUBLE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_61() {
+  final private boolean jj_3R_62() {
     if (jj_scan_token(REAL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_60() {
+  final private boolean jj_3R_61() {
     if (jj_scan_token(BOOLEAN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_59() {
+  final private boolean jj_3R_60() {
     if (jj_scan_token(BOOL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_158() {
+  final private boolean jj_3R_159() {
     if (jj_scan_token(MINUS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_147()) return true;
+    if (jj_3R_148()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_49() {
+  final private boolean jj_3R_50() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_58()) {
-    jj_scanpos = xsp;
     if (jj_3R_59()) {
     jj_scanpos = xsp;
     if (jj_3R_60()) {
@@ -6727,7 +6415,9 @@ final ArrayList list = new ArrayList();
     jj_scanpos = xsp;
     if (jj_3R_65()) {
     jj_scanpos = xsp;
-    if (jj_3R_66()) return true;
+    if (jj_3R_66()) {
+    jj_scanpos = xsp;
+    if (jj_3R_67()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -6740,22 +6430,22 @@ final ArrayList list = new ArrayList();
     return false;
   }
 
-  static final private boolean jj_3R_58() {
+  final private boolean jj_3R_59() {
     if (jj_scan_token(STRING)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_155() {
+  final private boolean jj_3R_156() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_157()) {
-    jj_scanpos = xsp;
     if (jj_3R_158()) {
     jj_scanpos = xsp;
     if (jj_3R_159()) {
     jj_scanpos = xsp;
-    if (jj_3R_160()) return true;
+    if (jj_3R_160()) {
+    jj_scanpos = xsp;
+    if (jj_3R_161()) 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;
@@ -6763,90 +6453,108 @@ final ArrayList list = new ArrayList();
     return false;
   }
 
-  static final private boolean jj_3R_157() {
+  final private boolean jj_3R_158() {
     if (jj_scan_token(PLUS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_147()) return true;
+    if (jj_3R_148()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_163() {
-    if (jj_3R_155()) return true;
+  final private boolean jj_3_4() {
+    if (jj_3R_44()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_162() {
-    if (jj_scan_token(BANG)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+  final private boolean jj_3R_164() {
     if (jj_3R_156()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_43() {
-    if (jj_3R_48()) return true;
+  final private boolean jj_3R_163() {
+    if (jj_scan_token(BANG)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(SEMICOLON)) return true;
+    if (jj_3R_157()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_156() {
+  final private boolean jj_3R_157() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_161()) {
-    jj_scanpos = xsp;
     if (jj_3R_162()) {
     jj_scanpos = xsp;
-    if (jj_3R_163()) return true;
+    if (jj_3R_163()) {
+    jj_scanpos = xsp;
+    if (jj_3R_164()) 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;
   }
 
-  static final private boolean jj_3R_161() {
+  final private boolean jj_3R_162() {
     if (jj_scan_token(AT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_157()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_155() {
     if (jj_3R_156()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_154() {
-    if (jj_3R_155()) return true;
+  final private boolean jj_3R_216() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_153() {
+  final private boolean jj_3R_154() {
     if (jj_scan_token(BANG)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_156()) return true;
+    if (jj_3R_157()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_215() {
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_216()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
     return false;
   }
 
-  static final private boolean jj_3R_152() {
+  final private boolean jj_3R_153() {
     if (jj_scan_token(TILDE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_147()) return true;
+    if (jj_3R_148()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_147() {
+  final private boolean jj_3R_148() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_151()) {
-    jj_scanpos = xsp;
     if (jj_3R_152()) {
     jj_scanpos = xsp;
     if (jj_3R_153()) {
     jj_scanpos = xsp;
-    if (jj_3R_154()) return true;
+    if (jj_3R_154()) {
+    jj_scanpos = xsp;
+    if (jj_3R_155()) 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;
@@ -6854,269 +6562,720 @@ final ArrayList list = new ArrayList();
     return false;
   }
 
-  static final private boolean jj_3R_151() {
+  final private boolean jj_3R_152() {
     if (jj_scan_token(AT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_147()) return true;
+    if (jj_3R_148()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3_4() {
-    if (jj_3R_43()) return true;
+  final private boolean jj_3R_213() {
+    if (jj_3R_215()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_143() {
-    if (jj_3R_147()) return true;
+  final private boolean jj_3R_144() {
+    if (jj_3R_148()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_150() {
+  final private boolean jj_3R_151() {
     if (jj_scan_token(REMAINDER)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_149() {
+  final private boolean jj_3R_150() {
     if (jj_scan_token(SLASH)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_148() {
+  final private boolean jj_3R_149() {
     if (jj_scan_token(STAR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_144() {
+  final private boolean jj_3R_207() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_213()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(RPAREN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_145() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_148()) {
-    jj_scanpos = xsp;
     if (jj_3R_149()) {
     jj_scanpos = xsp;
-    if (jj_3R_150()) return true;
+    if (jj_3R_150()) {
+    jj_scanpos = xsp;
+    if (jj_3R_151()) 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;
-    if (jj_3R_143()) return true;
+    if (jj_3R_144()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_210() {
-    if (jj_scan_token(COMMA)) return true;
+  final private boolean jj_3R_139() {
+    if (jj_3R_144()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_48()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_145()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_212() {
+    if (jj_scan_token(LBRACE1)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(ID)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(RBRACE1)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_209() {
-    if (jj_3R_48()) return true;
+  final private boolean jj_3R_147() {
+    if (jj_scan_token(MINUS)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_211() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_146() {
+    if (jj_scan_token(PLUS)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_140() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_146()) {
+    jj_scanpos = xsp;
+    if (jj_3R_147()) 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_3R_139()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_199() {
+    if (jj_scan_token(DOLLARS)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_211()) {
+    jj_scanpos = xsp;
+    if (jj_3R_212()) 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_133() {
+    if (jj_3R_139()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_210()) { jj_scanpos = xsp; break; }
+      if (jj_3R_140()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     return false;
   }
 
-  static final private boolean jj_3R_138() {
-    if (jj_3R_143()) return true;
+  final private boolean jj_3R_192() {
+    if (jj_scan_token(DOUBLEQUOTE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_144()) { jj_scanpos = xsp; break; }
+      if (jj_3R_199()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
+    if (jj_scan_token(DOUBLEQUOTE2)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_146() {
-    if (jj_scan_token(MINUS)) return true;
+  final private boolean jj_3R_113() {
+    if (jj_scan_token(ASSIGN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_145() {
-    if (jj_scan_token(PLUS)) return true;
+  final private boolean jj_3R_143() {
+    if (jj_scan_token(RUNSIGNEDSHIFT)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_142() {
+    if (jj_scan_token(RSIGNEDSHIFT)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_141() {
+    if (jj_scan_token(LSHIFT)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_185() {
+    if (jj_3R_192()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_207() {
-    if (jj_3R_209()) return true;
+  final private boolean jj_3R_184() {
+    if (jj_scan_token(NULL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_139() {
+  final private boolean jj_3R_134() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_145()) {
+    if (jj_3R_141()) {
+    jj_scanpos = xsp;
+    if (jj_3R_142()) {
     jj_scanpos = xsp;
-    if (jj_3R_146()) return true;
+    if (jj_3R_143()) 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_3R_138()) return true;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_133()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_132() {
-    if (jj_3R_138()) return true;
+  final private boolean jj_3R_183() {
+    if (jj_scan_token(FALSE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_182() {
+    if (jj_scan_token(TRUE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_123() {
+    if (jj_3R_133()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_139()) { jj_scanpos = xsp; break; }
+      if (jj_3R_134()) { jj_scanpos = xsp; break; }
       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     }
     return false;
   }
 
-  static final private boolean jj_3R_203() {
-    if (jj_scan_token(LPAREN)) return true;
+  final private boolean jj_3R_181() {
+    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_180() {
+    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_117() {
+    if (jj_3R_116()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_179() {
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_176() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_207()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(RPAREN)) return true;
+    if (jj_3R_179()) {
+    jj_scanpos = xsp;
+    if (jj_3R_180()) {
+    jj_scanpos = xsp;
+    if (jj_3R_181()) {
+    jj_scanpos = xsp;
+    if (jj_3R_182()) {
+    jj_scanpos = xsp;
+    if (jj_3R_183()) {
+    jj_scanpos = xsp;
+    if (jj_3R_184()) {
+    jj_scanpos = xsp;
+    if (jj_3R_185()) 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;
   }
 
-  static final private boolean jj_3R_142() {
-    if (jj_scan_token(RUNSIGNEDSHIFT)) return true;
+  final private boolean jj_3R_138() {
+    if (jj_scan_token(GE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_141() {
-    if (jj_scan_token(RSIGNEDSHIFT)) return true;
+  final private boolean jj_3R_137() {
+    if (jj_scan_token(LE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_140() {
-    if (jj_scan_token(LSHIFT)) return true;
+  final private boolean jj_3R_136() {
+    if (jj_scan_token(GT)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_112() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_117()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_135() {
+    if (jj_scan_token(LT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_133() {
+  final private boolean jj_3R_124() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_140()) {
+    if (jj_3R_135()) {
     jj_scanpos = xsp;
-    if (jj_3R_141()) {
+    if (jj_3R_136()) {
+    jj_scanpos = xsp;
+    if (jj_3R_137()) {
     jj_scanpos = xsp;
-    if (jj_3R_142()) return true;
+    if (jj_3R_138()) 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;
-    if (jj_3R_132()) return true;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_123()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_183() {
-    if (jj_scan_token(NULL)) return true;
+  final private boolean jj_3R_120() {
+    if (jj_3R_123()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_124()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
     return false;
   }
 
-  static final private boolean jj_3R_182() {
-    if (jj_scan_token(FALSE)) return true;
+  final private boolean jj_3R_111() {
+    if (jj_3R_116()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_122() {
-    if (jj_3R_132()) return true;
+  final private boolean jj_3R_72() {
+    if (jj_3R_50()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_71() {
+    if (jj_3R_49()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_56() {
+    Token xsp;
+    xsp = jj_scanpos;
+    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_48() {
+    if (jj_scan_token(LBRACE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_56()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(RBRACE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_104() {
+    if (jj_scan_token(LIST)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_111()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3R_133()) { jj_scanpos = xsp; break; }
+      if (jj_3R_112()) { jj_scanpos = xsp; break; }
       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;
+    xsp = jj_scanpos;
+    if (jj_3R_113()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_181() {
-    if (jj_scan_token(TRUE)) return true;
+  final private boolean jj_3R_206() {
+    if (jj_scan_token(COMMA)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_180() {
-    if (jj_scan_token(STRING_LITERAL)) return true;
+  final private boolean jj_3R_70() {
+    if (jj_3R_50()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_179() {
-    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
+  final private boolean jj_3_2() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_41()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_178() {
-    if (jj_scan_token(INTEGER_LITERAL)) return true;
+  final private boolean jj_3R_55() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_69()) {
+    jj_scanpos = xsp;
+    if (jj_3R_70()) 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_69() {
+    if (jj_3R_49()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_175() {
+  final private boolean jj_3R_205() {
+    if (jj_3R_41()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_2()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_47() {
+    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_178()) {
-    jj_scanpos = xsp;
-    if (jj_3R_179()) {
+    if (jj_3R_55()) 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_129() {
+    if (jj_scan_token(TRIPLEEQUAL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_128() {
+    if (jj_scan_token(BANGDOUBLEEQUAL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_127() {
+    if (jj_scan_token(NOT_EQUAL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_126() {
+    if (jj_scan_token(DIF)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_105() {
+    if (jj_scan_token(PRINT)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_49()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_198() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_205()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    xsp = jj_scanpos;
+    if (jj_3R_206()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(RPAREN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_125() {
+    if (jj_scan_token(EQUAL_EQUAL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_54() {
+    if (jj_3R_68()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_121() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_125()) {
     jj_scanpos = xsp;
-    if (jj_3R_180()) {
+    if (jj_3R_126()) {
     jj_scanpos = xsp;
-    if (jj_3R_181()) {
+    if (jj_3R_127()) {
     jj_scanpos = xsp;
-    if (jj_3R_182()) {
+    if (jj_3R_128()) {
     jj_scanpos = xsp;
-    if (jj_3R_183()) return true;
+    if (jj_3R_129()) 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_120()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_53() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_118() {
+    if (jj_3R_120()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_121()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_214() {
+    if (jj_scan_token(ARRAYASSIGN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_49()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_52() {
+    if (jj_scan_token(LBRACE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_49()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_scan_token(RBRACE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_41() {
+    if (jj_3R_49()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_214()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_119() {
+    if (jj_scan_token(BIT_AND)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_118()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_46() {
+    if (jj_scan_token(CLASSACCESS)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_52()) {
+    jj_scanpos = xsp;
+    if (jj_3R_53()) {
+    jj_scanpos = xsp;
+    if (jj_3R_54()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_40() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_46()) {
+    jj_scanpos = xsp;
+    if (jj_3R_47()) {
+    jj_scanpos = xsp;
+    if (jj_3R_48()) 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;
   }
 
-  static final private boolean jj_3R_137() {
-    if (jj_scan_token(GE)) return true;
+  final private boolean jj_3R_114() {
+    if (jj_3R_118()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_119()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_115() {
+    if (jj_scan_token(XOR)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_114()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static private boolean jj_initialized_once = false;
-  static public PHPParserTokenManager token_source;
-  static SimpleCharStream jj_input_stream;
-  static public Token token, jj_nt;
-  static private int jj_ntk;
-  static private Token jj_scanpos, jj_lastpos;
-  static private int jj_la;
-  static public boolean lookingAhead = false;
-  static private boolean jj_semLA;
-  static private int jj_gen;
-  static final private int[] jj_la1 = new int[126];
+  final private boolean jj_3R_210() {
+    if (jj_3R_116()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_209() {
+    if (jj_3R_50()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_109() {
+    if (jj_3R_114()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_115()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
+    return false;
+  }
+
+  final private boolean jj_3R_208() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  final private boolean jj_3R_203() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_208()) {
+    jj_scanpos = xsp;
+    if (jj_3R_209()) {
+    jj_scanpos = xsp;
+    if (jj_3R_210()) 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;
+  }
+
+  public PHPParserTokenManager token_source;
+  SimpleCharStream jj_input_stream;
+  public Token token, jj_nt;
+  private int jj_ntk;
+  private Token jj_scanpos, jj_lastpos;
+  private int jj_la;
+  public boolean lookingAhead = false;
+  private boolean jj_semLA;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[128];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -7130,91 +7289,70 @@ final ArrayList list = new ArrayList();
       jj_la1_4();
    }
    private static void jj_la1_0() {
-      jj_la1_0 = new int[] {0x5800001e,0x6,0x6,0x5800001e,0x0,0x58000000,0x0,0x30000000,0x30000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000000,0x40000000,0x8,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x58000010,0x58000010,0x58000000,0x58000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x58000010,0x58000010,0x0,0x0,0x40000010,0x40000010,0x80000000,0x0,0x40000010,0x80000000,0x0,0x40000010,0x40000010,0x40000010,0x40000010,0x40000010,0x40000000,0x40000000,0x0,0x0,0x0,0x40000000,0x40000000,0x0,0x0,0x0,0x0,};
+      jj_la1_0 = new int[] {0x5800001e,0x6,0x6,0x5800001e,0x0,0x58000000,0x0,0x30000000,0x30000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000000,0x40000000,0x8,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x58000010,0x58000010,0x58000000,0x58000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x58000010,0x58000010,0x0,0x0,0x40000010,0x40000010,0x80000000,0x0,0x40000010,0x80000000,0x0,0x40000010,0x40000010,0x40000010,0x40000010,0x40000010,0x40000000,0x40000000,0x0,0x0,0x0,0x40000000,0x40000000,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_1() {
-      jj_la1_1 = new int[] {0xd7541ffe,0x0,0x0,0xd7541ffe,0x0,0xd7541ffe,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc2000002,0x8000,0xc300001a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc300001a,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc3000002,0xc3000002,0xc3000002,0x0,0xc3000002,0x2,0x0,0x0,0x0,0x1000002,0x4000,0x0,0x0,0x0,0x1000000,0x0,0x0,0xc300001a,0xc300001a,0xc300001a,0xc300001a,0x2000,0xc2000000,0xc300001a,0x0,0x0,0x14541fe0,0xd7541ffe,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffa,0x0,0x0,0x0,0x0,0x1000002,0x0,0x90000,0x90000,0xd7541ffe,0xd7541ffe,0x90000,0xc300001a,0xd7541ffe,0xd7541ffe,0x0,0x1,0xd7541ffe,0x0,0x1,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xc300001a,0xc300001a,0xc300001a,0xd7541ffe,0xd7541ffe,0xc300001a,0x0,0xc300001a,0xc300001a,};
+      jj_la1_1 = new int[] {0xd7541ffe,0x0,0x0,0xd7541ffe,0x0,0xd7541ffe,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc2000002,0x8000,0xc300001a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc300001a,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc3000002,0xc3000002,0xc3000002,0x0,0xc3000002,0x2,0x0,0x0,0x0,0x1000002,0x4000,0x0,0x0,0x0,0x1000000,0x0,0x0,0xc300001a,0xc300001a,0xc300001a,0xc300001a,0x2000,0xc2000000,0x0,0x0,0xc300001a,0x0,0x0,0x14541fe0,0xd7541ffe,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffa,0x0,0x0,0x0,0x0,0x1000002,0x0,0x90000,0x90000,0xd7541ffe,0xd7541ffe,0x90000,0xc300001a,0xd7541ffe,0xd7541ffe,0x0,0x1,0xd7541ffe,0x0,0x1,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xd7541ffe,0xc300001a,0xc300001a,0xc300001a,0xd7541ffe,0xd7541ffe,0xc300001a,0x0,0xc300001a,0xc300001a,};
    }
    private static void jj_la1_2() {
-      jj_la1_2 = new int[] {0x27870021,0x0,0x0,0x27870021,0x0,0x27870021,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x27870000,0x0,0x20000000,0x0,0x20000000,0x20000000,0xff80,0x0,0x27870000,0x20000,0x0,0x0,0x80000,0x200000,0x200000,0x400000,0x400000,0x0,0x40000000,0x80000000,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x6000000,0x18000000,0x18000000,0x27870000,0x27830000,0x27800000,0x1800000,0x20000000,0xff80,0x1800000,0x1800000,0x20000000,0x20000000,0x0,0x0,0x0,0x0,0x0,0xff80,0x0,0x2787ff80,0x2787ff80,0x2787ff80,0x2787ff80,0x0,0x0,0x27870000,0x0,0x10000,0x10021,0x27870021,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x27870021,0x27870021,0x27870021,0x27870021,0x0,0x0,0x1800000,0x1800000,0x21800000,0x100000,0x0,0x0,0x27870021,0x27870021,0x0,0x27870000,0x27870021,0x27870021,0x0,0x0,0x27870021,0x0,0x0,0x27970021,0x27870021,0x27870021,0x27870021,0x27870021,0x27870021,0x27970021,0x27870000,0x27870000,0x27870000,0x27870021,0x27970021,0x27870000,0x0,0x27870000,0x27870000,};
+      jj_la1_2 = new int[] {0x27870021,0x0,0x0,0x27870021,0x0,0x27870021,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x27870000,0x0,0x20000000,0x0,0x20000000,0x20000000,0xff80,0x0,0x27870000,0x20000,0x0,0x0,0x80000,0x200000,0x200000,0x400000,0x400000,0x0,0x40000000,0x80000000,0x20000000,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x6000000,0x18000000,0x18000000,0x27870000,0x27830000,0x27800000,0x1800000,0x20000000,0xff80,0x1800000,0x1800000,0x20000000,0x20000000,0x0,0x0,0x0,0x0,0x0,0xff80,0x0,0x2787ff80,0x2787ff80,0x2787ff80,0x2787ff80,0x0,0x0,0x0,0x0,0x27870000,0x0,0x10000,0x10021,0x27870021,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x27870021,0x27870021,0x27870021,0x27870021,0x0,0x0,0x1800000,0x1800000,0x21800000,0x100000,0x0,0x0,0x27870021,0x27870021,0x0,0x27870000,0x27870021,0x27870021,0x0,0x0,0x27870021,0x0,0x0,0x27970021,0x27870021,0x27870021,0x27870021,0x27870021,0x27870021,0x27970021,0x27870000,0x27870000,0x27870000,0x27870021,0x27970021,0x27870000,0x0,0x27870000,0x27870000,};
    }
    private static void jj_la1_3() {
-      jj_la1_3 = new int[] {0x8a31440,0x0,0x0,0x8a31440,0x8000000,0x8a31440,0x0,0x0,0x0,0x10000000,0x820000,0x0,0x0,0x830000,0x440,0x440,0x21440,0x0,0x231440,0x10000000,0x0,0x10000000,0x10000,0x0,0x0,0x0,0x231440,0x0,0x0,0x0,0x0,0x10,0x10,0x20,0x20,0x20000000,0x0,0x0,0x0,0x0,0x0,0xc0000000,0xc0000000,0xe,0xe,0x0,0x0,0x1,0x1,0x231440,0x231440,0x231440,0x0,0x231440,0x0,0x0,0x0,0x0,0x30000,0x0,0x200000,0x200000,0x200000,0x30000,0x30000,0x830000,0x231440,0x231440,0x231440,0x231440,0x2800000,0x1440,0x231440,0x10000000,0x0,0x8820000,0x8a31440,0x0,0x0,0x0,0x10000,0x10000000,0x10000,0x0,0x10000000,0x10000000,0x10000000,0x8a31440,0x8a31440,0x8a31440,0x8a31440,0x10000000,0x0,0x0,0x0,0x30000,0x800000,0x0,0x0,0x8a31440,0x8a31440,0x0,0x231440,0x8a31440,0x8a31440,0x0,0x0,0x8a31440,0x0,0x0,0x8a31440,0x8a31440,0x8a31440,0x8a31440,0x8a31440,0x8a31440,0x8a31440,0x231440,0x231440,0x231440,0x8a31440,0x8a31440,0x231440,0x10000000,0x231440,0x231440,};
+      jj_la1_3 = new int[] {0x18011440,0x0,0x0,0x18011440,0x0,0x18011440,0x0,0x0,0x0,0x0,0x10000000,0x0,0x0,0x18000000,0x440,0x440,0x10011440,0x0,0x18011440,0x0,0x0,0x0,0x8000000,0x0,0x0,0x0,0x18011440,0x0,0x0,0x0,0x0,0x10,0x10,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0xe,0x0,0x0,0x1,0x1,0x18011440,0x18011440,0x18011440,0x0,0x18011440,0x0,0x0,0x0,0x0,0x18000000,0x0,0x0,0x0,0x0,0x18000000,0x18000000,0x18000000,0x18011440,0x18011440,0x18011440,0x18011440,0x0,0x11440,0x20000,0x10080000,0x18011440,0x0,0x0,0x10000000,0x18011440,0x0,0x0,0x0,0x8000000,0x0,0x8000000,0x0,0x0,0x0,0x0,0x18011440,0x18011440,0x18011440,0x18011440,0x0,0x0,0x0,0x0,0x18000000,0x0,0x0,0x0,0x18011440,0x18011440,0x0,0x18011440,0x18011440,0x18011440,0x0,0x0,0x18011440,0x0,0x0,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x18011440,0x0,0x18011440,0x18011440,};
    }
    private static void jj_la1_4() {
-      jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfff80,0x0,0x0,0x0,0xfff80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x79,0x79,0x6,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_4 = new int[] {0x8a,0x0,0x0,0x8a,0x80,0x8a,0x0,0x0,0x0,0x100,0x8,0x80000,0x80000,0x8,0x0,0x0,0x0,0x0,0x2,0x100,0x0,0x100,0x0,0x0,0x0,0xfff80000,0x2,0x0,0x0,0xfff80000,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x79000,0x79000,0x6c00,0x6c00,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x0,0x0,0x8,0x2,0x2,0x2,0x2,0x28,0x0,0x0,0x0,0x2,0x100,0x0,0x88,0x8a,0x0,0x0,0x0,0x0,0x100,0x0,0x80000,0x100,0x100,0x100,0x8a,0x8a,0x8a,0x8a,0x100,0x80000,0x0,0x0,0x0,0x8,0x0,0x0,0x8a,0x8a,0x0,0x2,0x8a,0x8a,0x0,0x0,0x8a,0x0,0x0,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x2,0x2,0x2,0x8a,0x8a,0x2,0x100,0x2,0x2,};
    }
-  static final private JJCalls[] jj_2_rtns = new JJCalls[5];
-  static private boolean jj_rescan = false;
-  static private int jj_gc = 0;
+  final private JJCalls[] jj_2_rtns = new JJCalls[5];
+  private boolean jj_rescan = false;
+  private int jj_gc = 0;
 
   public PHPParser(java.io.InputStream stream) {
-    if (jj_initialized_once) {
-      System.out.println("ERROR: Second call to constructor of static parser.  You must");
-      System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
-      System.out.println("       during parser generation.");
-      throw new Error();
-    }
-    jj_initialized_once = true;
     jj_input_stream = new SimpleCharStream(stream, 1, 1);
     token_source = new PHPParserTokenManager(jj_input_stream);
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 126; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 128; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
-  static public void ReInit(java.io.InputStream stream) {
+  public void ReInit(java.io.InputStream stream) {
     jj_input_stream.ReInit(stream, 1, 1);
     token_source.ReInit(jj_input_stream);
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 126; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 128; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
   public PHPParser(java.io.Reader stream) {
-    if (jj_initialized_once) {
-      System.out.println("ERROR: Second call to constructor of static parser.  You must");
-      System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
-      System.out.println("       during parser generation.");
-      throw new Error();
-    }
-    jj_initialized_once = true;
     jj_input_stream = new SimpleCharStream(stream, 1, 1);
     token_source = new PHPParserTokenManager(jj_input_stream);
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 126; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 128; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
-  static public void ReInit(java.io.Reader stream) {
+  public void ReInit(java.io.Reader stream) {
     jj_input_stream.ReInit(stream, 1, 1);
     token_source.ReInit(jj_input_stream);
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 126; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 128; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
   public PHPParser(PHPParserTokenManager tm) {
-    if (jj_initialized_once) {
-      System.out.println("ERROR: Second call to constructor of static parser.  You must");
-      System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
-      System.out.println("       during parser generation.");
-      throw new Error();
-    }
-    jj_initialized_once = true;
     token_source = tm;
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 126; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 128; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -7223,11 +7361,11 @@ final ArrayList list = new ArrayList();
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 126; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 128; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
-  static final private Token jj_consume_token(int kind) throws ParseException {
+  final private Token jj_consume_token(int kind) throws ParseException {
     Token oldToken;
     if ((oldToken = token).next != null) token = token.next;
     else token = token.next = token_source.getNextToken();
@@ -7251,7 +7389,7 @@ final ArrayList list = new ArrayList();
     throw generateParseException();
   }
 
-  static final private boolean jj_scan_token(int kind) {
+  final private boolean jj_scan_token(int kind) {
     if (jj_scanpos == jj_lastpos) {
       jj_la--;
       if (jj_scanpos.next == null) {
@@ -7270,7 +7408,7 @@ final ArrayList list = new ArrayList();
     return (jj_scanpos.kind != kind);
   }
 
-  static final public Token getNextToken() {
+  final public Token getNextToken() {
     if (token.next != null) token = token.next;
     else token = token.next = token_source.getNextToken();
     jj_ntk = -1;
@@ -7278,7 +7416,7 @@ final ArrayList list = new ArrayList();
     return token;
   }
 
-  static final public Token getToken(int index) {
+  final public Token getToken(int index) {
     Token t = lookingAhead ? jj_scanpos : token;
     for (int i = 0; i < index; i++) {
       if (t.next != null) t = t.next;
@@ -7287,20 +7425,20 @@ final ArrayList list = new ArrayList();
     return t;
   }
 
-  static final private int jj_ntk() {
+  final private int jj_ntk() {
     if ((jj_nt=token.next) == null)
       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
     else
       return (jj_ntk = jj_nt.kind);
   }
 
-  static private java.util.Vector jj_expentries = new java.util.Vector();
-  static private int[] jj_expentry;
-  static private int jj_kind = -1;
-  static private int[] jj_lasttokens = new int[100];
-  static private int jj_endpos;
+  private java.util.Vector jj_expentries = new java.util.Vector();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+  private int[] jj_lasttokens = new int[100];
+  private int jj_endpos;
 
-  static private void jj_add_error_token(int kind, int pos) {
+  private void jj_add_error_token(int kind, int pos) {
     if (pos >= 100) return;
     if (pos == jj_endpos + 1) {
       jj_lasttokens[jj_endpos++] = kind;
@@ -7328,17 +7466,17 @@ final ArrayList list = new ArrayList();
     }
   }
 
-  static public ParseException generateParseException() {
+  public ParseException generateParseException() {
     jj_expentries.removeAllElements();
-    boolean[] la1tokens = new boolean[148];
-    for (int i = 0; i < 148; i++) {
+    boolean[] la1tokens = new boolean[160];
+    for (int i = 0; i < 160; i++) {
       la1tokens[i] = false;
     }
     if (jj_kind >= 0) {
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 126; i++) {
+    for (int i = 0; i < 128; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -7359,7 +7497,7 @@ final ArrayList list = new ArrayList();
         }
       }
     }
-    for (int i = 0; i < 148; i++) {
+    for (int i = 0; i < 160; i++) {
       if (la1tokens[i]) {
         jj_expentry = new int[1];
         jj_expentry[0] = i;
@@ -7376,13 +7514,13 @@ final ArrayList list = new ArrayList();
     return new ParseException(token, exptokseq, tokenImage);
   }
 
-  static final public void enable_tracing() {
+  final public void enable_tracing() {
   }
 
-  static final public void disable_tracing() {
+  final public void disable_tracing() {
   }
 
-  static final private void jj_rescan_token() {
+  final private void jj_rescan_token() {
     jj_rescan = true;
     for (int i = 0; i < 5; i++) {
       JJCalls p = jj_2_rtns[i];
@@ -7403,7 +7541,7 @@ final ArrayList list = new ArrayList();
     jj_rescan = false;
   }
 
-  static final private void jj_save(int index, int xla) {
+  final private void jj_save(int index, int xla) {
     JJCalls p = jj_2_rtns[index];
     while (p.gen > jj_gen) {
       if (p.next == null) { p = p.next = new JJCalls(); break; }