*** empty log message ***
[phpeclipse.git] / net.sourceforge.phpeclipse / src / test / PHPParser.java
index 4351df6..4440696 100644 (file)
@@ -39,7 +39,6 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
   private static final String PARSE_WARNING_STRING = "Warning"; //$NON-NLS-1$
   static PHPOutlineInfo outlineInfo;
 
-  public static MethodDeclaration currentFunction;
   private static boolean assigning;
 
   /** The error level of the current ParseException. */
@@ -101,44 +100,10 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     }
   }
 
-  public static final void phpParserTester(final String strEval) throws CoreException, ParseException {
-    PHPParserTokenManager.SwitchTo(PHPParserTokenManager.PHPPARSING);
-    final StringReader stream = new StringReader(strEval);
-    if (jj_input_stream == null) {
-      jj_input_stream = new SimpleCharStream(stream, 1, 1);
-    }
-    ReInit(new StringReader(strEval));
-    init();
-    phpTest();
-  }
-
-  public static final void htmlParserTester(final File fileName) throws CoreException, ParseException {
-    try {
-      final Reader stream = new FileReader(fileName);
-      if (jj_input_stream == null) {
-        jj_input_stream = new SimpleCharStream(stream, 1, 1);
-      }
-      ReInit(stream);
-      init();
-      phpFile();
-    } catch (FileNotFoundException e) {
-      e.printStackTrace();  //To change body of catch statement use Options | File Templates.
-    }
-  }
-
-  public static final void htmlParserTester(final String strEval) throws CoreException, ParseException {
-    final StringReader stream = new StringReader(strEval);
-    if (jj_input_stream == null) {
-      jj_input_stream = new SimpleCharStream(stream, 1, 1);
-    }
-    ReInit(stream);
-    init();
-    phpFile();
-  }
-
   public final PHPOutlineInfo parseInfo(final Object parent, final String s) {
-    currentSegment = new PHPDocument(parent);
-    outlineInfo = new PHPOutlineInfo(parent);
+    phpDocument = new PHPDocument(parent,"_root".toCharArray());
+    currentSegment = phpDocument;
+    outlineInfo = new PHPOutlineInfo(parent, currentSegment);
     final StringReader stream = new StringReader(s);
     if (jj_input_stream == null) {
       jj_input_stream = new SimpleCharStream(stream, 1, 1);
@@ -147,7 +112,9 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     init();
     try {
       parse();
-      //PHPeclipsePlugin.log(1,phpDocument.toString());
+      phpDocument.nodes = new AstNode[nodes.length];
+      System.arraycopy(nodes,0,phpDocument.nodes,0,nodes.length);
+      phpDocument.toString();
     } catch (ParseException e) {
       processParseException(e);
     }
@@ -163,7 +130,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     if (errorMessage == null) {
       PHPeclipsePlugin.log(e);
       errorMessage = "this exception wasn't handled by the parser please tell us how to reproduce it";
-      errorStart = jj_input_stream.getPosition();
+      errorStart = SimpleCharStream.getPosition();
       errorEnd   = errorStart + 1;
     }
     setMarker(e);
@@ -179,8 +146,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       if (errorStart == -1) {
         setMarker(fileToParse,
                   errorMessage,
-                  jj_input_stream.tokenBegin,
-                  jj_input_stream.tokenBegin + e.currentToken.image.length(),
+                  SimpleCharStream.tokenBegin,
+                  SimpleCharStream.tokenBegin + e.currentToken.image.length(),
                   errorLevel,
                   "Line " + e.currentToken.beginLine);
       } else {
@@ -308,7 +275,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     if (currentPosition == htmlStart) {
       return;
     }
-    final char[] chars = SimpleCharStream.currentBuffer.substring(htmlStart,currentPosition).toCharArray();
+    final char[] chars = SimpleCharStream.currentBuffer.substring(htmlStart,currentPosition+1).toCharArray();
     pushOnAstNodes(new HTMLCode(chars, htmlStart,currentPosition));
   }
 
@@ -316,12 +283,6 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
           phpFile();
   }
 
-  static final public void phpTest() throws ParseException {
-    Php();
-    jj_consume_token(0);
-   PHPParser.createNewHTMLCode();
-  }
-
   static final public void phpFile() throws ParseException {
     try {
       label_1:
@@ -397,7 +358,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
  * or <? somephpcode ?>
  */
   static final public void PhpBlock() throws ParseException {
-  final int start = jj_input_stream.getPosition();
+  final int start = SimpleCharStream.getPosition();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case PHPECHOSTART:
       phpEchoBlock();
@@ -459,7 +420,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       setMarker(fileToParse,
                 "You should use '<?php' instead of '<?' it will avoid some problems with XML",
                 start,
-                jj_input_stream.getPosition(),
+                SimpleCharStream.getPosition(),
                 INFO,
                 "Line " + token.beginLine);
     } catch (CoreException e) {
@@ -482,8 +443,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       } catch (ParseException e) {
     errorMessage = "'?>' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
       break;
@@ -577,13 +538,13 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
   final int pos;
     jj_consume_token(CLASS);
     try {
-     pos = jj_input_stream.getPosition();
+     pos = SimpleCharStream.getPosition();
       className = jj_consume_token(IDENTIFIER);
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected";
     errorLevel   = ERROR;
-    errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd     = jj_input_stream.getPosition() + 1;
+    errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd     = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -594,8 +555,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       } catch (ParseException e) {
       errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected";
       errorLevel   = ERROR;
-      errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd   = jj_input_stream.getPosition() + 1;
+      errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+      errorEnd   = SimpleCharStream.getPosition() + 1;
       {if (true) throw e;}
       }
       break;
@@ -631,8 +592,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image + "', '{' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     label_3:
@@ -653,8 +614,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', 'var', 'function' or '}' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
   }
@@ -668,11 +629,10 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case FUNCTION:
       method = MethodDeclaration();
-                                classDeclaration.addMethod(method);
+                                method.setParent(classDeclaration);
       break;
     case VAR:
       field = FieldDeclaration();
-                                classDeclaration.addVariable(field);
       break;
     default:
       jj_la1[8] = jj_gen;
@@ -686,13 +646,14 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
  */
   static final public FieldDeclaration FieldDeclaration() throws ParseException {
   VariableDeclaration variableDeclaration;
-  final ArrayList list = new ArrayList();
+  VariableDeclaration[] list;
+  final ArrayList arrayList = new ArrayList();
   final int pos = SimpleCharStream.getPosition();
     jj_consume_token(VAR);
     variableDeclaration = VariableDeclarator();
-    list.add(variableDeclaration);
-    outlineInfo.addVariable(new String(variableDeclaration.name));
-    currentSegment.add(variableDeclaration);
+   arrayList.add(variableDeclaration);
+   outlineInfo.addVariable(new String(variableDeclaration.name));
+   currentSegment.add(variableDeclaration);
     label_4:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -705,7 +666,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       }
       jj_consume_token(COMMA);
       variableDeclaration = VariableDeclarator();
-       list.add(variableDeclaration);
+       arrayList.add(variableDeclaration);
        outlineInfo.addVariable(new String(variableDeclaration.name));
        currentSegment.add(variableDeclaration);
     }
@@ -714,20 +675,23 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected after variable declaration";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd     = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
-   {if (true) return new FieldDeclaration((VariableDeclaration[]) list.toArray(),
+   list = new VariableDeclaration[arrayList.size()];
+   arrayList.toArray(list);
+   {if (true) return new FieldDeclaration(list,
                                pos,
-                               SimpleCharStream.getPosition());}
+                               SimpleCharStream.getPosition(),
+                               currentSegment);}
     throw new Error("Missing return statement in function");
   }
 
   static final public VariableDeclaration VariableDeclarator() throws ParseException {
-  final String varName, varValue;
+  final String varName;
   Expression initializer = null;
-  final int pos = jj_input_stream.getPosition();
+  final int pos = SimpleCharStream.getPosition();
     varName = VariableDeclaratorId();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case ASSIGN:
@@ -737,8 +701,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       } catch (ParseException e) {
       errorMessage = "Literal expression expected in variable initializer";
       errorLevel   = ERROR;
-      errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd   = jj_input_stream.getPosition() + 1;
+      errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+      errorEnd   = SimpleCharStream.getPosition() + 1;
       {if (true) throw e;}
       }
       break;
@@ -750,7 +714,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     {if (true) return new VariableDeclaration(currentSegment,
                                   varName.toCharArray(),
                                   pos,
-                                  jj_input_stream.getPosition());}
+                                  SimpleCharStream.getPosition());}
   }
     {if (true) return new VariableDeclaration(currentSegment,
                                     varName.toCharArray(),
@@ -789,8 +753,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     } catch (ParseException e) {
     errorMessage = "'$' expected for variable identifier";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -826,7 +790,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
     case DOLLAR:
       jj_consume_token(DOLLAR);
       expr = VariableName();
-   {if (true) return expr;}
+   {if (true) return "$" + expr;}
       break;
     default:
       jj_la1[12] = jj_gen;
@@ -846,9 +810,9 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
       jj_consume_token(LBRACE);
       expression = Expression();
       jj_consume_token(RBRACE);
-   buff = new StringBuffer('{');
+   buff = new StringBuffer("{");
    buff.append(expression.toStringExpression());
-   buff.append('}');
+   buff.append("}");
    {if (true) return buff.toString();}
       break;
     case IDENTIFIER:
@@ -962,19 +926,19 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
   }
 
   static final public ArrayVariableDeclaration ArrayVariable() throws ParseException {
-Expression expr;
-Expression expr2 = null;
+Expression expr,expr2;
     expr = Expression();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case ARRAYASSIGN:
       jj_consume_token(ARRAYASSIGN);
       expr2 = Expression();
+   {if (true) return new ArrayVariableDeclaration(expr,expr2);}
       break;
     default:
       jj_la1[18] = jj_gen;
       ;
     }
-   {if (true) return new ArrayVariableDeclaration(expr,expr2);}
+   {if (true) return new ArrayVariableDeclaration(expr,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
@@ -1032,7 +996,9 @@ Expression expr2 = null;
       ;
     }
     jj_consume_token(RPAREN);
-   {if (true) return (ArrayVariableDeclaration[]) list.toArray();}
+  ArrayVariableDeclaration[] vars = new ArrayVariableDeclaration[list.size()];
+  list.toArray(vars);
+  {if (true) return vars;}
     throw new Error("Missing return statement in function");
   }
 
@@ -1042,30 +1008,25 @@ Expression expr2 = null;
  */
   static final public MethodDeclaration MethodDeclaration() throws ParseException {
   final MethodDeclaration functionDeclaration;
-  Token functionToken;
   final Block block;
-    functionToken = jj_consume_token(FUNCTION);
+    jj_consume_token(FUNCTION);
     try {
       functionDeclaration = MethodDeclarator();
      outlineInfo.addVariable(new String(functionDeclaration.name));
     } catch (ParseException e) {
-    if (errorMessage != null) {
-      {if (true) throw e;}
-    }
+    if (errorMessage != null)  {if (true) throw e;}
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function identifier expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     if (currentSegment != null) {
       currentSegment.add(functionDeclaration);
       currentSegment = functionDeclaration;
     }
-    currentFunction = functionDeclaration;
     block = Block();
     functionDeclaration.statements = block.statements;
-    currentFunction = null;
     if (currentSegment != null) {
       currentSegment = (OutlineableWithChildren) currentSegment.getParent();
     }
@@ -1107,8 +1068,6 @@ Expression expr2 = null;
  * (FormalParameter())
  */
   static final public Hashtable FormalParameters() throws ParseException {
-  String expr;
-  final StringBuffer buff = new StringBuffer("(");
   VariableDeclaration var;
   final Hashtable parameters = new Hashtable();
     try {
@@ -1116,8 +1075,8 @@ Expression expr2 = null;
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected after function identifier";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1150,8 +1109,8 @@ Expression expr2 = null;
     } catch (ParseException e) {
     errorMessage = "')' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
   {if (true) return parameters;}
@@ -1188,55 +1147,55 @@ Expression expr2 = null;
       jj_consume_token(STRING);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.STRING,
-                                        pos,pos-6);}
+                                                      pos,pos-6);}
       break;
     case BOOL:
       jj_consume_token(BOOL);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.BOOL,
-                                        pos,pos-4);}
+                                                      pos,pos-4);}
       break;
     case BOOLEAN:
       jj_consume_token(BOOLEAN);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.BOOLEAN,
-                                        pos,pos-7);}
+                                                      pos,pos-7);}
       break;
     case REAL:
       jj_consume_token(REAL);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.REAL,
-                                        pos,pos-4);}
+                                                      pos,pos-4);}
       break;
     case DOUBLE:
       jj_consume_token(DOUBLE);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.DOUBLE,
-                                        pos,pos-5);}
+                                                      pos,pos-5);}
       break;
     case FLOAT:
       jj_consume_token(FLOAT);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.FLOAT,
-                                        pos,pos-5);}
+                                                      pos,pos-5);}
       break;
     case INT:
       jj_consume_token(INT);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.INT,
-                                        pos,pos-3);}
+                                                      pos,pos-3);}
       break;
     case INTEGER:
       jj_consume_token(INTEGER);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.INTEGER,
-                                        pos,pos-7);}
+                                                      pos,pos-7);}
       break;
     case OBJECT:
       jj_consume_token(OBJECT);
                         pos = SimpleCharStream.getPosition();
                         {if (true) return new ConstantIdentifier(Types.OBJECT,
-                                        pos,pos-6);}
+                                                      pos,pos-6);}
       break;
     default:
       jj_la1[25] = jj_gen;
@@ -1315,8 +1274,8 @@ Expression expr2 = null;
       }
       errorMessage = "expression expected";
       errorLevel   = ERROR;
-      errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd   = jj_input_stream.getPosition() + 1;
+      errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+      errorEnd   = SimpleCharStream.getPosition() + 1;
       {if (true) throw e;}
     }
      {if (true) return new VarAssignation(varName.toCharArray(),
@@ -1620,8 +1579,8 @@ Expression expr2 = null;
     }
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
     expr = new BinaryExpression(expr,expr2,operator);
@@ -1759,13 +1718,11 @@ Expression expr2 = null;
     try {
       expr = UnaryExpression();
     } catch (ParseException e) {
-    if (errorMessage != null) {
-      {if (true) throw e;}
-    }
+    if (errorMessage != null) {if (true) throw e;}
     errorMessage = "unexpected token '"+e.currentToken.next.image+"'";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     label_18:
@@ -1836,7 +1793,7 @@ Expression expr2 = null;
     case LPAREN:
     case DOLLAR_ID:
       expr = AtUnaryExpression();
-   {if (true) return expr;}
+                              {if (true) return expr;}
       break;
     default:
       jj_la1[48] = jj_gen;
@@ -2000,8 +1957,8 @@ final int operator;
           } catch (ParseException e) {
     errorMessage = "')' expected";
     errorLevel   = ERROR;
-    errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd     = jj_input_stream.getPosition() + 1;
+    errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd     = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
           }
    {if (true) return expr;}
@@ -2085,7 +2042,6 @@ final int pos = SimpleCharStream.getPosition();
   static final public Expression PrimaryExpression() throws ParseException {
   final Token identifier;
   Expression expr;
-  final StringBuffer buff = new StringBuffer();
   final int pos = SimpleCharStream.getPosition();
     if (jj_2_5(2)) {
       identifier = jj_consume_token(IDENTIFIER);
@@ -2277,8 +2233,8 @@ final int pos = SimpleCharStream.getPosition();
       } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function call or field access expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
    {if (true) return new ClassAccess(prefix,
@@ -2368,8 +2324,8 @@ final int pos = SimpleCharStream.getPosition();
       } catch (ParseException e) {
     errorMessage = "']' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
    {if (true) return new ArrayDeclarator(prefix,expression,SimpleCharStream.getPosition());}
@@ -2399,7 +2355,7 @@ final int pos = SimpleCharStream.getPosition();
     case STRING_LITERAL:
       token = jj_consume_token(STRING_LITERAL);
                                     pos = SimpleCharStream.getPosition();
-                                    {if (true) return new StringLiteral(token.image.toCharArray(),pos-token.image.length(),pos);}
+                                    {if (true) return new StringLiteral(token.image.toCharArray(),pos-token.image.length());}
       break;
     case TRUE:
       jj_consume_token(TRUE);
@@ -2425,7 +2381,7 @@ final int pos = SimpleCharStream.getPosition();
   }
 
   static final public FunctionCall Arguments(Expression func) throws ParseException {
-ArgumentDeclaration[] args = null;
+Expression[] args = null;
     jj_consume_token(LPAREN);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case ARRAY:
@@ -2460,19 +2416,24 @@ ArgumentDeclaration[] args = null;
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected to close the argument list";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
    {if (true) return new FunctionCall(func,args,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
-  static final public ArgumentDeclaration[] ArgumentList() throws ParseException {
-Expression expr;
+/**
+ * An argument list is a list of arguments separated by comma :
+ * argumentDeclaration() (, argumentDeclaration)*
+ * @return an array of arguments
+ */
+  static final public Expression[] ArgumentList() throws ParseException {
+Expression arg;
 final ArrayList list = new ArrayList();
-    expr = Expression();
-   list.add(expr);
+    arg = Expression();
+   list.add(arg);
     label_21:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2485,17 +2446,19 @@ final ArrayList list = new ArrayList();
       }
       jj_consume_token(COMMA);
       try {
-        expr = Expression();
-         list.add(expr);
+        arg = Expression();
+         list.add(arg);
       } catch (ParseException e) {
         errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. An expression expected after a comma in argument list";
         errorLevel   = ERROR;
-        errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-        errorEnd     = jj_input_stream.getPosition() + 1;
+        errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+        errorEnd     = SimpleCharStream.getPosition() + 1;
         {if (true) throw e;}
       }
     }
-    {if (true) return (ArgumentDeclaration[]) list.toArray();}
+   Expression[] arguments = new Expression[list.size()];
+   list.toArray(arguments);
+   {if (true) return arguments;}
     throw new Error("Missing return statement in function");
   }
 
@@ -2513,8 +2476,8 @@ final ArrayList list = new ArrayList();
     if (e.currentToken.next.kind != 4) {
       errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
       errorLevel   = ERROR;
-      errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd   = jj_input_stream.getPosition() + 1;
+      errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+      errorEnd   = SimpleCharStream.getPosition() + 1;
       {if (true) throw e;}
     }
       }
@@ -2545,8 +2508,8 @@ final ArrayList list = new ArrayList();
         } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
     errorLevel   = ERROR;
-    errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd     = jj_input_stream.getPosition() + 1;
+    errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd     = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
         }
    {if (true) return statement;}
@@ -2718,11 +2681,11 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "End of file unexpected, '<?php' expected";
     errorLevel   = ERROR;
-    errorStart   = jj_input_stream.getPosition();
-    errorEnd     = jj_input_stream.getPosition();
+    errorStart   = SimpleCharStream.getPosition();
+    errorEnd     = SimpleCharStream.getPosition();
     {if (true) throw e;}
     }
-  nbNodes = nodePtr-startIndex;
+  nbNodes = nodePtr-startIndex - 1;
   blockNodes = new AstNode[nbNodes];
   System.arraycopy(nodes,startIndex,blockNodes,0,nbNodes);
   {if (true) return new HTMLBlock(nodes);}
@@ -2734,9 +2697,8 @@ final ArrayList list = new ArrayList();
  */
   static final public InclusionStatement IncludeStatement() throws ParseException {
   final Expression expr;
-  final Token token;
   final int keyword;
-  final int pos = jj_input_stream.getPosition();
+  final int pos = SimpleCharStream.getPosition();
   final InclusionStatement inclusionStatement;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case REQUIRE:
@@ -2768,8 +2730,8 @@ final ArrayList list = new ArrayList();
     }
     errorMessage = "unexpected token '"+ e.currentToken.next.image+"', expression expected";
     errorLevel   = ERROR;
-    errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd     = jj_input_stream.getPosition() + 1;
+    errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd     = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
    inclusionStatement = new InclusionStatement(currentSegment,
@@ -2782,8 +2744,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
     errorLevel   = ERROR;
-    errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd     = jj_input_stream.getPosition() + 1;
+    errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd     = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
    {if (true) return inclusionStatement;}
@@ -2810,8 +2772,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected";
     errorLevel   = ERROR;
-    errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd     = jj_input_stream.getPosition() + 1;
+    errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd     = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2840,8 +2802,8 @@ final ArrayList list = new ArrayList();
       } catch (ParseException e) {
       errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ',' expected";
       errorLevel   = ERROR;
-      errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd     = jj_input_stream.getPosition() + 1;
+      errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+      errorEnd     = SimpleCharStream.getPosition() + 1;
       {if (true) throw e;}
       }
       expr = VariableDeclaratorId();
@@ -2852,21 +2814,28 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case ASSIGN:
       jj_consume_token(ASSIGN);
       expression = Expression();
-     {if (true) return new ListExpression((String[]) list.toArray(),expression,pos,SimpleCharStream.getPosition());}
+    String[] strings = new String[list.size()];
+    list.toArray(strings);
+    {if (true) return new ListExpression(strings,
+                              expression,
+                              pos,
+                              SimpleCharStream.getPosition());}
       break;
     default:
       jj_la1[79] = jj_gen;
       ;
     }
-   {if (true) return new ListExpression((String[]) list.toArray(),null,pos,SimpleCharStream.getPosition());}
+    String[] strings = new String[list.size()];
+    list.toArray(strings);
+    {if (true) return new ListExpression(strings,pos,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
@@ -2897,13 +2866,15 @@ final ArrayList list = new ArrayList();
     }
     try {
       jj_consume_token(SEMICOLON);
-     {if (true) return new EchoStatement((Expression[]) expressions.toArray(),pos);}
+    Expression[] exprs = new Expression[expressions.size()];
+    expressions.toArray(exprs);
+    {if (true) return new EchoStatement(exprs,pos);}
     } catch (ParseException e) {
     if (e.currentToken.next.kind != 4) {
       errorMessage = "';' expected after 'echo' statement";
       errorLevel   = ERROR;
-      errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd     = jj_input_stream.getPosition() + 1;
+      errorStart   = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+      errorEnd     = SimpleCharStream.getPosition() + 1;
       {if (true) throw e;}
     }
     }
@@ -2911,7 +2882,7 @@ final ArrayList list = new ArrayList();
   }
 
   static final public GlobalStatement GlobalStatement() throws ParseException {
-   final int pos = jj_input_stream.getPosition();
+   final int pos = SimpleCharStream.getPosition();
    String expr;
    ArrayList vars = new ArrayList();
    GlobalStatement global;
@@ -2934,17 +2905,19 @@ final ArrayList list = new ArrayList();
     }
     try {
       jj_consume_token(SEMICOLON);
-     global = new GlobalStatement(currentSegment,
-                                  (String[]) vars.toArray(),
-                                  pos,
-                                  SimpleCharStream.getPosition());
+    String[] strings = new String[vars.size()];
+    vars.toArray(strings);
+    global = new GlobalStatement(currentSegment,
+                                 strings,
+                                 pos,
+                                 SimpleCharStream.getPosition());
     currentSegment.add(global);
     {if (true) return global;}
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. a ';' was expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -2973,14 +2946,16 @@ final ArrayList list = new ArrayList();
     }
     try {
       jj_consume_token(SEMICOLON);
-     {if (true) return new StaticStatement((String[])vars.toArray(),
+    String[] strings = new String[vars.size()];
+    vars.toArray(strings);
+    {if (true) return new StaticStatement(strings,
                                 pos,
                                 SimpleCharStream.getPosition());}
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. a ';' was expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -3006,13 +2981,15 @@ final ArrayList list = new ArrayList();
  */
   static final public Block Block() throws ParseException {
   final int pos = SimpleCharStream.getPosition();
+  final ArrayList list = new ArrayList();
+  Statement statement;
     try {
       jj_consume_token(LBRACE);
     } catch (ParseException e) {
     errorMessage = "'{' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     label_27:
@@ -3108,10 +3085,12 @@ final ArrayList list = new ArrayList();
       case LBRACE:
       case SEMICOLON:
       case DOLLAR_ID:
-        BlockStatement();
+        statement = BlockStatement();
+                                  list.add(statement);
         break;
       case PHPEND:
-        htmlBlock();
+        statement = htmlBlock();
+                                  list.add(statement);
         break;
       default:
         jj_la1[84] = jj_gen;
@@ -3124,10 +3103,13 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.image +"', '}' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
+  Statement[] statements = new Statement[list.size()];
+  list.toArray(statements);
+  {if (true) return new Block(statements,pos,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
@@ -3274,7 +3256,9 @@ final ArrayList list = new ArrayList();
       var = LocalVariableDeclarator();
                                              list.add(var);
     }
-   {if (true) return (VariableDeclaration[]) list.toArray();}
+    VariableDeclaration[] vars = new VariableDeclaration[list.size()];
+    list.toArray(vars);
+  {if (true) return vars;}
     throw new Error("Missing return statement in function");
   }
 
@@ -3296,7 +3280,7 @@ final ArrayList list = new ArrayList();
     {if (true) return new VariableDeclaration(currentSegment,
                                   varName.toCharArray(),
                                   pos,
-                                  jj_input_stream.getPosition());}
+                                  SimpleCharStream.getPosition());}
    }
     {if (true) return new VariableDeclaration(currentSegment,
                                     varName.toCharArray(),
@@ -3314,7 +3298,8 @@ final ArrayList list = new ArrayList();
   }
 
   static final public Statement StatementExpression() throws ParseException {
-  Expression expr;
+  Expression expr,expr2;
+  int operator;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case INCR:
     case DECR:
@@ -3346,15 +3331,15 @@ final ArrayList list = new ArrayList();
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case INCR:
           jj_consume_token(INCR);
-            expr = new PostfixedUnaryExpression(expr,
+            {if (true) return new PostfixedUnaryExpression(expr,
                                                 OperatorIds.PLUS_PLUS,
-                                                SimpleCharStream.getPosition());
+                                                SimpleCharStream.getPosition());}
           break;
         case DECR:
           jj_consume_token(DECR);
-            expr = new PostfixedUnaryExpression(expr,
+            {if (true) return new PostfixedUnaryExpression(expr,
                                                 OperatorIds.MINUS_MINUS,
-                                                SimpleCharStream.getPosition());
+                                                SimpleCharStream.getPosition());}
           break;
         case ASSIGN:
         case PLUSASSIGN:
@@ -3369,8 +3354,9 @@ final ArrayList list = new ArrayList();
         case TILDEEQUAL:
         case LSHIFTASSIGN:
         case RSIGNEDSHIFTASSIGN:
-          AssignmentOperator();
-          Expression();
+          operator = AssignmentOperator();
+          expr2 = Expression();
+     {if (true) return new BinaryExpression(expr,expr2,operator);}
           break;
         default:
           jj_la1[89] = jj_gen;
@@ -3382,6 +3368,7 @@ final ArrayList list = new ArrayList();
         jj_la1[90] = jj_gen;
         ;
       }
+   {if (true) return expr;}
       break;
     default:
       jj_la1[91] = jj_gen;
@@ -3401,8 +3388,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "'(' expected after 'switch'";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
@@ -3413,8 +3400,8 @@ final ArrayList list = new ArrayList();
     }
     errorMessage = "expression expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
@@ -3422,8 +3409,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "')' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3462,12 +3449,14 @@ final ArrayList list = new ArrayList();
     }
     try {
       jj_consume_token(RBRACE);
-     {if (true) return (AbstractCase[]) cases.toArray();}
+    AbstractCase[] abcase = new AbstractCase[cases.size()];
+    cases.toArray(abcase);
+    {if (true) return abcase;}
     } catch (ParseException e) {
     errorMessage = "'}' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -3511,18 +3500,20 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "'endswitch' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
       jj_consume_token(SEMICOLON);
-     {if (true) return (AbstractCase[]) cases.toArray();}
+    AbstractCase[] abcase = new AbstractCase[cases.size()];
+    cases.toArray(abcase);
+    {if (true) return abcase;}
     } catch (ParseException e) {
     errorMessage = "';' expected after 'endswitch' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -3647,10 +3638,12 @@ final ArrayList list = new ArrayList();
       jj_la1[97] = jj_gen;
       ;
     }
-   if (expr == null) {//it's a default
-    {if (true) return new DefaultCase((Statement[]) stmts.toArray(),pos,SimpleCharStream.getPosition());}
+  Statement[] stmtsArray = new Statement[stmts.size()];
+  stmts.toArray(stmtsArray);
+  if (expr == null) {//it's a default
+    {if (true) return new DefaultCase(stmtsArray,pos,SimpleCharStream.getPosition());}
   }
-  {if (true) return new Case(expr,(Statement[]) stmts.toArray(),pos,SimpleCharStream.getPosition());}
+  {if (true) return new Case(expr,stmtsArray,pos,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
@@ -3661,7 +3654,6 @@ final ArrayList list = new ArrayList();
  * @return the if it was a case and null if not
  */
   static final public Expression SwitchLabel() throws ParseException {
-  final Token token;
   final Expression expr;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case CASE:
@@ -3672,8 +3664,8 @@ final ArrayList list = new ArrayList();
     if (errorMessage != null) {if (true) throw e;}
     errorMessage = "expression expected after 'case' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
       try {
@@ -3682,8 +3674,8 @@ final ArrayList list = new ArrayList();
       } catch (ParseException e) {
     errorMessage = "':' expected after case expression";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
       break;
@@ -3695,8 +3687,8 @@ final ArrayList list = new ArrayList();
       } catch (ParseException e) {
     errorMessage = "':' expected after 'default' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
       break;
@@ -3745,8 +3737,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "';' expected after 'break' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
    {if (true) return new Break(expression, start, SimpleCharStream.getPosition());}
@@ -3754,7 +3746,7 @@ final ArrayList list = new ArrayList();
   }
 
   static final public IfStatement IfStatement() throws ParseException {
-  final int pos = jj_input_stream.getPosition();
+  final int pos = SimpleCharStream.getPosition();
   Expression condition;
   IfStatement ifStatement;
     jj_consume_token(IF);
@@ -3771,7 +3763,7 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "'(' expected after " + keyword + " keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length();
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length();
     errorEnd   = errorStart +1;
     processParseException(e);
     }
@@ -3782,8 +3774,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "')' expected after " + keyword + " keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -3791,14 +3783,19 @@ final ArrayList list = new ArrayList();
 
   static final public IfStatement IfStatement0(Expression condition, final int start,final int end) throws ParseException {
   Statement statement;
+  Statement stmt;
+  final Statement[] statementsArray;
   ElseIf elseifStatement;
   Else elseStatement = null;
-  ArrayList stmts = new ArrayList();
-  ArrayList elseifs = new ArrayList();
+  ArrayList stmts;
+  final ArrayList elseIfList = new ArrayList();
+  ElseIf[] elseIfs;
   int pos = SimpleCharStream.getPosition();
+  int endStatements;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COLON:
       jj_consume_token(COLON);
+   stmts = new ArrayList();
       label_32:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3901,6 +3898,7 @@ final ArrayList list = new ArrayList();
           throw new ParseException();
         }
       }
+    endStatements = SimpleCharStream.getPosition();
       label_33:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3912,7 +3910,7 @@ final ArrayList list = new ArrayList();
           break label_33;
         }
         elseifStatement = ElseIfStatementColon();
-                                              elseifs.add(elseifStatement);
+                                              elseIfList.add(elseifStatement);
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case ELSE:
@@ -3937,24 +3935,38 @@ final ArrayList list = new ArrayList();
       } catch (ParseException e) {
     errorMessage = "'endif' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
       try {
         jj_consume_token(SEMICOLON);
-     {if (true) return new IfStatement(condition,
-                            (ElseIf[]) elseifs.toArray(),
-                            elseStatement,
-                            pos,
-                            SimpleCharStream.getPosition());}
       } catch (ParseException e) {
     errorMessage = "';' expected after 'endif' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
+    elseIfs = new ElseIf[elseIfList.size()];
+    elseIfList.toArray(elseIfs);
+    if (stmts.size() == 1) {
+      {if (true) return new IfStatement(condition,
+                             (Statement) stmts.get(0),
+                              elseIfs,
+                              elseStatement,
+                              pos,
+                              SimpleCharStream.getPosition());}
+    } else {
+      statementsArray = new Statement[stmts.size()];
+      stmts.toArray(statementsArray);
+      {if (true) return new IfStatement(condition,
+                             new Block(statementsArray,pos,endStatements),
+                              elseIfs,
+                              elseStatement,
+                              pos,
+                              SimpleCharStream.getPosition());}
+    }
       break;
     case PHPEND:
     case IF:
@@ -4036,17 +4048,16 @@ final ArrayList list = new ArrayList();
       case LBRACE:
       case SEMICOLON:
       case DOLLAR_ID:
-        statement = Statement();
+        stmt = Statement();
         break;
       case PHPEND:
-        statement = htmlBlock();
+        stmt = htmlBlock();
         break;
       default:
         jj_la1[104] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
-   stmts.add(statement);
       label_34:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4058,7 +4069,7 @@ final ArrayList list = new ArrayList();
           break label_34;
         }
         elseifStatement = ElseIfStatement();
-                                                      elseifs.add(elseifStatement);
+                                                      elseIfList.add(elseifStatement);
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case ELSE:
@@ -4073,8 +4084,8 @@ final ArrayList list = new ArrayList();
       }
       errorMessage = "unexpected token '"+e.currentToken.next.image+"', a statement was expected";
       errorLevel   = ERROR;
-      errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-      errorEnd   = jj_input_stream.getPosition() + 1;
+      errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+      errorEnd   = SimpleCharStream.getPosition() + 1;
       {if (true) throw e;}
         }
         break;
@@ -4082,11 +4093,14 @@ final ArrayList list = new ArrayList();
         jj_la1[106] = jj_gen;
         ;
       }
-   {if (true) return new IfStatement(condition,
-                          (ElseIf[]) elseifs.toArray(),
-                          elseStatement,
-                          pos,
-                          SimpleCharStream.getPosition());}
+    elseIfs = new ElseIf[elseIfList.size()];
+    elseIfList.toArray(elseIfs);
+    {if (true) return new IfStatement(condition,
+                           stmt,
+                           elseIfs,
+                           elseStatement,
+                           pos,
+                           SimpleCharStream.getPosition());}
       break;
     default:
       jj_la1[107] = jj_gen;
@@ -4206,7 +4220,9 @@ final ArrayList list = new ArrayList();
         throw new ParseException();
       }
     }
-   {if (true) return new ElseIf(condition,(Statement[]) list.toArray(),pos,SimpleCharStream.getPosition());}
+  Statement[] stmtsArray = new Statement[list.size()];
+  list.toArray(stmtsArray);
+  {if (true) return new ElseIf(condition,stmtsArray ,pos,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
@@ -4318,7 +4334,9 @@ final ArrayList list = new ArrayList();
         throw new ParseException();
       }
     }
-   {if (true) return new Else((Statement[]) list.toArray(),pos,SimpleCharStream.getPosition());}
+  Statement[] stmtsArray = new Statement[list.size()];
+  list.toArray(stmtsArray);
+  {if (true) return new Else(stmtsArray,pos,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
@@ -4331,7 +4349,9 @@ final ArrayList list = new ArrayList();
     condition = Condition("elseif");
     statement = Statement();
                                                                     list.add(statement);/*todo:do better*/
-   {if (true) return new ElseIf(condition,(Statement[]) list.toArray(),pos,SimpleCharStream.getPosition());}
+  Statement[] stmtsArray = new Statement[list.size()];
+  list.toArray(stmtsArray);
+  {if (true) return new ElseIf(condition,stmtsArray,pos,SimpleCharStream.getPosition());}
     throw new Error("Missing return statement in function");
   }
 
@@ -4419,18 +4439,20 @@ final ArrayList list = new ArrayList();
       } catch (ParseException e) {
     errorMessage = "'endwhile' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
       try {
         jj_consume_token(SEMICOLON);
-     {if (true) return new Block((Statement[]) stmts.toArray(),pos,SimpleCharStream.getPosition());}
+    Statement[] stmtsArray = new Statement[stmts.size()];
+    stmts.toArray(stmtsArray);
+    {if (true) return new Block(stmtsArray,pos,SimpleCharStream.getPosition());}
       } catch (ParseException e) {
     errorMessage = "';' expected after 'endwhile' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
       }
       break;
@@ -4498,8 +4520,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -4508,7 +4530,6 @@ final ArrayList list = new ArrayList();
   static final public ForeachStatement ForeachStatement() throws ParseException {
   Statement statement;
   Expression expression;
-  final StringBuffer buff = new StringBuffer();
   final int pos = SimpleCharStream.getPosition();
   ArrayVariableDeclaration variable;
     jj_consume_token(FOREACH);
@@ -4517,8 +4538,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "'(' expected after 'foreach' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
@@ -4526,8 +4547,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "variable expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
@@ -4535,8 +4556,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "'as' expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
@@ -4544,8 +4565,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "variable expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
@@ -4553,8 +4574,8 @@ final ArrayList list = new ArrayList();
     } catch (ParseException e) {
     errorMessage = "')' expected after 'foreach' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     try {
@@ -4563,8 +4584,8 @@ final ArrayList list = new ArrayList();
     if (errorMessage != null) {if (true) throw e;}
     errorMessage = "statement expected";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
    {if (true) return new ForeachStatement(expression,
@@ -4590,8 +4611,8 @@ final int startBlock, endBlock;
     } catch (ParseException e) {
     errorMessage = "'(' expected after 'for' keyword";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4766,18 +4787,20 @@ final int startBlock, endBlock;
       } catch (ParseException e) {
         errorMessage = "'endfor' expected";
         errorLevel   = ERROR;
-        errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-        errorEnd   = jj_input_stream.getPosition() + 1;
+        errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+        errorEnd   = SimpleCharStream.getPosition() + 1;
         {if (true) throw e;}
       }
       try {
         jj_consume_token(SEMICOLON);
-         {if (true) return new ForStatement(initializations,condition,increments,new Block((Statement[])list.toArray(),startBlock,endBlock),pos,SimpleCharStream.getPosition());}
+        Statement[] stmtsArray = new Statement[list.size()];
+        list.toArray(stmtsArray);
+        {if (true) return new ForStatement(initializations,condition,increments,new Block(stmtsArray,startBlock,endBlock),pos,SimpleCharStream.getPosition());}
       } catch (ParseException e) {
         errorMessage = "';' expected after 'endfor' keyword";
         errorLevel   = ERROR;
-        errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-        errorEnd   = jj_input_stream.getPosition() + 1;
+        errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+        errorEnd   = SimpleCharStream.getPosition() + 1;
         {if (true) throw e;}
       }
       break;
@@ -4834,7 +4857,9 @@ final int startBlock, endBlock;
       StatementExpression();
                                   list.add(expr);
     }
-   {if (true) return (Statement[]) list.toArray();}
+  Statement[] stmtsArray = new Statement[list.size()];
+  list.toArray(stmtsArray);
+  {if (true) return stmtsArray;}
     throw new Error("Missing return statement in function");
   }
 
@@ -4876,8 +4901,8 @@ final int startBlock, endBlock;
     } catch (ParseException e) {
     errorMessage = "';' expected after 'continue' statement";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -4921,8 +4946,8 @@ final int startBlock, endBlock;
     } catch (ParseException e) {
     errorMessage = "';' expected after 'return' statement";
     errorLevel   = ERROR;
-    errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
-    errorEnd   = jj_input_stream.getPosition() + 1;
+    errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1;
+    errorEnd   = SimpleCharStream.getPosition() + 1;
     {if (true) throw e;}
     }
     throw new Error("Missing return statement in function");
@@ -4984,6 +5009,246 @@ final int startBlock, endBlock;
     return retval;
   }
 
+  static final private boolean jj_3R_83() {
+    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_82() {
+    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_44() {
+    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_184() {
+    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_81() {
+    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_183() {
+    if (jj_3R_52()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_80() {
+    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_85() {
+    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_99()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_100()) { 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_101()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_167() {
+    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_183()) {
+    jj_scanpos = xsp;
+    if (jj_3R_184()) 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_139()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_79() {
+    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_43() {
+    if (jj_3R_52()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_78() {
+    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_77() {
+    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_84() {
+    if (jj_scan_token(PRINT)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_45()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_76() {
+    if (jj_scan_token(BOOL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3_4() {
+    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_43()) {
+    jj_scanpos = xsp;
+    if (jj_3R_44()) 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;
+    return false;
+  }
+
+  static final private boolean jj_3R_75() {
+    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_52() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_75()) {
+    jj_scanpos = xsp;
+    if (jj_3R_76()) {
+    jj_scanpos = xsp;
+    if (jj_3R_77()) {
+    jj_scanpos = xsp;
+    if (jj_3R_78()) {
+    jj_scanpos = xsp;
+    if (jj_3R_79()) {
+    jj_scanpos = xsp;
+    if (jj_3R_80()) {
+    jj_scanpos = xsp;
+    if (jj_3R_81()) {
+    jj_scanpos = xsp;
+    if (jj_3R_82()) {
+    jj_scanpos = xsp;
+    if (jj_3R_83()) 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;
+    } 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_165() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_45()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    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_164() {
+    if (jj_3R_169()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_163() {
+    if (jj_3R_168()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_162() {
+    if (jj_3R_167()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_158() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_161()) {
+    jj_scanpos = xsp;
+    if (jj_3R_162()) {
+    jj_scanpos = xsp;
+    if (jj_3R_163()) {
+    jj_scanpos = xsp;
+    if (jj_3R_164()) {
+    jj_scanpos = xsp;
+    if (jj_3R_165()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_161() {
+    if (jj_scan_token(BANG)) return true;
+    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;
+  }
+
+  static final private boolean jj_3R_160() {
+    if (jj_scan_token(DECR)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_159() {
+    if (jj_scan_token(INCR)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
   static final private boolean jj_3R_157() {
     Token xsp;
     xsp = jj_scanpos;
@@ -5132,6 +5397,14 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_87() {
+    if (jj_scan_token(ASSIGN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_45()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
   static final private boolean jj_3R_134() {
     if (jj_3R_139()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -5181,14 +5454,6 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_87() {
-    if (jj_scan_token(ASSIGN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_45()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
   static final private boolean jj_3R_198() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -5209,20 +5474,6 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_138() {
-    if (jj_scan_token(RUNSIGNEDSHIFT)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_201() {
-    if (jj_scan_token(ARRAYASSIGN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_45()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
   static final private boolean jj_3R_197() {
     if (jj_3R_41()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -5235,6 +5486,22 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_57() {
+    if (jj_3R_50()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_87()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_138() {
+    if (jj_scan_token(RUNSIGNEDSHIFT)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
   static final private boolean jj_3R_137() {
     if (jj_scan_token(RSIGNEDSHIFT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -5298,26 +5565,48 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_58() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_57()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_47() {
+    if (jj_3R_57()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_58()) { jj_scanpos = xsp; break; }
+      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    }
+    return false;
+  }
+
   static final private boolean jj_3R_133() {
     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_132() {
-    if (jj_scan_token(LE)) return true;
+  static final private boolean jj_3R_201() {
+    if (jj_scan_token(ARRAYASSIGN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_45()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_131() {
-    if (jj_scan_token(GT)) return true;
+  static final private boolean jj_3R_132() {
+    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_130() {
-    if (jj_scan_token(LT)) return true;
+  static final private boolean jj_3R_131() {
+    if (jj_scan_token(GT)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -5332,6 +5621,12 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_130() {
+    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_122() {
     Token xsp;
     xsp = jj_scanpos;
@@ -5363,16 +5658,6 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_57() {
-    if (jj_3R_50()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_87()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
   static final private boolean jj_3R_203() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -5393,38 +5678,18 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_58() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_57()) return true;
+  static final private boolean jj_3R_127() {
+    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_47() {
-    if (jj_3R_57()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_58()) { jj_scanpos = xsp; break; }
-      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    }
-    return false;
-  }
-
   static final private boolean jj_3R_200() {
     if (jj_3R_202()) 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(TRIPLEEQUAL)) 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(BANGDOUBLEEQUAL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -5449,24 +5714,6 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_93() {
-    if (jj_3R_52()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_199() {
-    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_200()) 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_120() {
     Token xsp;
     xsp = jj_scanpos;
@@ -5489,6 +5736,22 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_108() {
+    if (jj_scan_token(LBRACE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_45()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    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_93() {
+    if (jj_3R_52()) 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;
@@ -5501,12 +5764,14 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_108() {
-    if (jj_scan_token(LBRACE)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_45()) return true;
+  static final private boolean jj_3R_199() {
+    if (jj_scan_token(LPAREN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(RBRACE)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_200()) 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;
   }
@@ -5517,14 +5782,10 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_177() {
-    if (jj_scan_token(NULL)) return true;
+  static final private boolean jj_3R_90() {
+    if (jj_scan_token(DOLLAR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_176() {
-    if (jj_scan_token(FALSE)) return true;
+    if (jj_3R_59()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -5537,22 +5798,14 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_175() {
-    if (jj_scan_token(TRUE)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_90() {
-    if (jj_scan_token(DOLLAR)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_59()) return true;
+  static final private boolean jj_3R_177() {
+    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_174() {
-    if (jj_scan_token(STRING_LITERAL)) return true;
+  static final private boolean jj_3R_176() {
+    if (jj_scan_token(FALSE)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -5569,12 +5822,34 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_175() {
+    if (jj_scan_token(TRUE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
+  static final private boolean jj_3R_174() {
+    if (jj_scan_token(STRING_LITERAL)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
   static final private boolean jj_3R_173() {
     if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
+  static final private boolean jj_3R_89() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_108()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
   static final private boolean jj_3R_169() {
     Token xsp;
     xsp = jj_scanpos;
@@ -5612,30 +5887,30 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_92() {
+  static final private boolean jj_3R_88() {
+    if (jj_scan_token(LBRACE)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     if (jj_3R_45()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    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_60() {
+  static final private boolean jj_3R_59() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_92()) {
+    if (jj_3R_88()) {
     jj_scanpos = xsp;
-    if (jj_3R_93()) return true;
+    if (jj_3R_89()) {
+    jj_scanpos = xsp;
+    if (jj_3R_90()) {
+    jj_scanpos = xsp;
+    if (jj_3R_91()) 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_89() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_108()) jj_scanpos = xsp;
-    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;
   }
 
@@ -5651,30 +5926,20 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_88() {
-    if (jj_scan_token(LBRACE)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+  static final private boolean jj_3R_92() {
     if (jj_3R_45()) 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;
   }
 
-  static final private boolean jj_3R_59() {
+  static final private boolean jj_3R_60() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_88()) {
-    jj_scanpos = xsp;
-    if (jj_3R_89()) {
-    jj_scanpos = xsp;
-    if (jj_3R_90()) {
+    if (jj_3R_92()) {
     jj_scanpos = xsp;
-    if (jj_3R_91()) return true;
+    if (jj_3R_93()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
@@ -5688,14 +5953,10 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_49() {
-    if (jj_scan_token(LBRACKET)) return true;
+  static final private boolean jj_3R_46() {
+    if (jj_scan_token(IDENTIFIER)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_60()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(RBRACKET)) return true;
+    if (jj_scan_token(COLON)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -5708,6 +5969,14 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_95() {
+    if (jj_scan_token(DOLLAR)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_59()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
   static final private boolean jj_3R_109() {
     if (jj_3R_113()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -5720,10 +5989,20 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_95() {
-    if (jj_scan_token(DOLLAR)) return true;
+  static final private boolean jj_3R_49() {
+    if (jj_scan_token(LBRACKET)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_59()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_60()) 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_3_8() {
+    if (jj_3R_47()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -5736,20 +6015,22 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_48() {
-    if (jj_scan_token(CLASSACCESS)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_59()) return true;
+  static final private boolean jj_3R_94() {
+    if (jj_scan_token(DOLLAR_ID)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_98()) jj_scanpos = xsp;
+    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_40() {
+  static final private boolean jj_3R_61() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_48()) {
+    if (jj_3R_94()) {
     jj_scanpos = xsp;
-    if (jj_3R_49()) return true;
+    if (jj_3R_95()) 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;
@@ -5767,80 +6048,70 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_46() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(COLON)) return true;
+  static final private boolean jj_3R_48() {
+    if (jj_scan_token(CLASSACCESS)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_94() {
-    if (jj_scan_token(DOLLAR_ID)) return true;
+    if (jj_3R_59()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_98()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_61() {
+  static final private boolean jj_3R_40() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_94()) {
+    if (jj_3R_48()) {
     jj_scanpos = xsp;
-    if (jj_3R_95()) return true;
+    if (jj_3R_49()) 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_196() {
-    if (jj_3R_40()) return true;
+  static final private boolean jj_3R_112() {
+    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_112() {
-    if (jj_scan_token(_ANDL)) return true;
+  static final private boolean jj_3R_111() {
+    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_195() {
-    if (jj_3R_199()) return true;
+  static final private boolean jj_3R_196() {
+    if (jj_3R_40()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_188() {
+  static final private boolean jj_3R_105() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_195()) {
+    if (jj_3R_111()) {
     jj_scanpos = xsp;
-    if (jj_3R_196()) return true;
+    if (jj_3R_112()) 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_104()) 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(AND_AND)) return true;
+  static final private boolean jj_3R_195() {
+    if (jj_3R_199()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_105() {
+  static final private boolean jj_3R_188() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_111()) {
+    if (jj_3R_195()) {
     jj_scanpos = xsp;
-    if (jj_3R_112()) return true;
+    if (jj_3R_196()) 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_104()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
@@ -5868,44 +6139,44 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_187() {
-    if (jj_3R_50()) return true;
+  static 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_186() {
-    if (jj_scan_token(IDENTIFIER)) return true;
+  static final private boolean jj_3R_187() {
+    if (jj_3R_50()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_178() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_186()) {
-    jj_scanpos = xsp;
-    if (jj_3R_187()) return true;
+  static final private boolean jj_3R_107() {
+    if (jj_scan_token(_ORL)) 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_3_1() {
-    if (jj_3R_40()) return true;
+  static final private boolean jj_3R_106() {
+    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_107() {
-    if (jj_scan_token(_ORL)) return true;
+  static final private boolean jj_3R_186() {
+    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_106() {
-    if (jj_scan_token(OR_OR)) return true;
+  static final private boolean jj_3R_178() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_186()) {
+    jj_scanpos = xsp;
+    if (jj_3R_187()) 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;
   }
 
@@ -5956,22 +6227,14 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_191() {
-    if (jj_3R_50()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_190() {
-    if (jj_scan_token(NEW)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_178()) return true;
+  static final private boolean jj_3R_74() {
+    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_74() {
-    if (jj_scan_token(TILDEEQUAL)) return true;
+  static final private boolean jj_3R_191() {
+    if (jj_3R_50()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -5988,28 +6251,16 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_189() {
-    if (jj_scan_token(IDENTIFIER)) return true;
+  static final private boolean jj_3R_71() {
+    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_180() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_189()) {
-    jj_scanpos = xsp;
-    if (jj_3R_190()) {
-    jj_scanpos = xsp;
-    if (jj_3R_191()) return true;
+  static final private boolean jj_3R_190() {
+    if (jj_scan_token(NEW)) 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_71() {
-    if (jj_scan_token(XORASSIGN)) return true;
+    if (jj_3R_178()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -6032,6 +6283,26 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_189() {
+    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_180() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_189()) {
+    jj_scanpos = xsp;
+    if (jj_3R_190()) {
+    jj_scanpos = xsp;
+    if (jj_3R_191()) 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_67() {
     if (jj_scan_token(MINUSASSIGN)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -6112,12 +6383,6 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3_8() {
-    if (jj_3R_47()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
   static final private boolean jj_3R_182() {
     if (jj_scan_token(ARRAY)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -6156,6 +6421,14 @@ final int startBlock, endBlock;
     return false;
   }
 
+  static final private boolean jj_3R_101() {
+    if (jj_scan_token(ASSIGN)) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    if (jj_3R_45()) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+    return false;
+  }
+
   static final private boolean jj_3R_42() {
     if (jj_3R_50()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -6166,10 +6439,8 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_101() {
-    if (jj_scan_token(ASSIGN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_45()) return true;
+  static final private boolean jj_3_3() {
+    if (jj_3R_42()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
@@ -6204,12 +6475,6 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3_3() {
-    if (jj_3R_42()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
   static final private boolean jj_3R_56() {
     if (jj_3R_86()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -6222,35 +6487,12 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_194() {
-    if (jj_scan_token(DECR)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
   static final private boolean jj_3R_54() {
     if (jj_3R_85()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_193() {
-    if (jj_scan_token(INCR)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_185() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_193()) {
-    jj_scanpos = xsp;
-    if (jj_3R_194()) 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_45() {
     Token xsp;
     xsp = jj_scanpos;
@@ -6274,16 +6516,6 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_168() {
-    if (jj_3R_166()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_185()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
   static final private boolean jj_3R_100() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
@@ -6292,248 +6524,41 @@ final int startBlock, endBlock;
     return false;
   }
 
-  static final private boolean jj_3R_99() {
-    if (jj_3R_50()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_83() {
-    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_44() {
-    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_184() {
-    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_82() {
-    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_183() {
-    if (jj_3R_52()) return true;
+  static final private boolean jj_3R_194() {
+    if (jj_scan_token(DECR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_81() {
-    if (jj_scan_token(INT)) return true;
+  static final private boolean jj_3R_193() {
+    if (jj_scan_token(INCR)) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_167() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
+  static final private boolean jj_3R_185() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_183()) {
+    if (jj_3R_193()) {
     jj_scanpos = xsp;
-    if (jj_3R_184()) return true;
+    if (jj_3R_194()) 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_139()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_80() {
-    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_43() {
-    if (jj_3R_52()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_79() {
-    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_85() {
-    if (jj_scan_token(LIST)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_scan_token(LPAREN)) return true;
+  static final private boolean jj_3R_168() {
+    if (jj_3R_166()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_99()) jj_scanpos = xsp;
-    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3R_100()) { 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_101()) jj_scanpos = xsp;
+    if (jj_3R_185()) jj_scanpos = xsp;
     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }
 
-  static final private boolean jj_3R_78() {
-    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_77() {
-    if (jj_scan_token(BOOLEAN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3_4() {
-    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_43()) {
-    jj_scanpos = xsp;
-    if (jj_3R_44()) 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;
-    return false;
-  }
-
-  static final private boolean jj_3R_76() {
-    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_84() {
-    if (jj_scan_token(PRINT)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_45()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_75() {
-    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_52() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_75()) {
-    jj_scanpos = xsp;
-    if (jj_3R_76()) {
-    jj_scanpos = xsp;
-    if (jj_3R_77()) {
-    jj_scanpos = xsp;
-    if (jj_3R_78()) {
-    jj_scanpos = xsp;
-    if (jj_3R_79()) {
-    jj_scanpos = xsp;
-    if (jj_3R_80()) {
-    jj_scanpos = xsp;
-    if (jj_3R_81()) {
-    jj_scanpos = xsp;
-    if (jj_3R_82()) {
-    jj_scanpos = xsp;
-    if (jj_3R_83()) 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;
-    } 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_165() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    if (jj_3R_45()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    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_164() {
-    if (jj_3R_169()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_163() {
-    if (jj_3R_168()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_162() {
-    if (jj_3R_167()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_158() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_161()) {
-    jj_scanpos = xsp;
-    if (jj_3R_162()) {
-    jj_scanpos = xsp;
-    if (jj_3R_163()) {
-    jj_scanpos = xsp;
-    if (jj_3R_164()) {
-    jj_scanpos = xsp;
-    if (jj_3R_165()) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_161() {
-    if (jj_scan_token(BANG)) return true;
-    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;
-  }
-
-  static final private boolean jj_3R_160() {
-    if (jj_scan_token(DECR)) return true;
-    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
-    return false;
-  }
-
-  static final private boolean jj_3R_159() {
-    if (jj_scan_token(INCR)) return true;
+  static final private boolean jj_3R_99() {
+    if (jj_3R_50()) return true;
     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
     return false;
   }