*** empty log message ***
[phpeclipse.git] / net.sourceforge.phpeclipse / src / test / PHPParser.java
1 /* Generated By:JavaCC: Do not edit this line. PHPParser.java */
2 package test;
3
4 import org.eclipse.core.resources.IFile;
5 import org.eclipse.core.resources.IMarker;
6 import org.eclipse.core.runtime.CoreException;
7 import org.eclipse.ui.texteditor.MarkerUtilities;
8 import org.eclipse.jface.preference.IPreferenceStore;
9
10 import java.util.Hashtable;
11 import java.util.Enumeration;
12 import java.io.StringReader;
13 import java.io.*;
14 import java.text.MessageFormat;
15
16 import net.sourceforge.phpeclipse.actions.PHPStartApacheAction;
17 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
18 import net.sourceforge.phpdt.internal.compiler.parser.*;
19 import net.sourceforge.phpdt.internal.compiler.ast.*;
20
21 /**
22  * A new php parser.
23  * This php parser is inspired by the Java 1.2 grammar example
24  * given with JavaCC. You can get JavaCC at http://www.webgain.com
25  * You can test the parser with the PHPParserTestCase2.java
26  * @author Matthieu Casanova
27  */
28 public final class PHPParser extends PHPParserSuperclass implements PHPParserConstants {
29
30   /** The file that is parsed. */
31   private static IFile fileToParse;
32
33   /** The current segment. */
34   private static PHPSegmentWithChildren currentSegment;
35
36   private static final String PARSE_ERROR_STRING = "Parse error"; //$NON-NLS-1$
37   private static final String PARSE_WARNING_STRING = "Warning"; //$NON-NLS-1$
38   PHPOutlineInfo outlineInfo;
39
40   private static PHPFunctionDeclaration currentFunction;
41   private static boolean assigning;
42
43   /** The error level of the current ParseException. */
44   private static int errorLevel = ERROR;
45   /** The message of the current ParseException. If it's null it's because the parse exception wasn't handled */
46   private static String errorMessage;
47
48   private static int errorStart = -1;
49   private static int errorEnd = -1;
50
51         //ast stack
52         private final static int AstStackIncrement = 100;
53         /** The stack of node. */
54   private static AstNode[] astStack;
55   /** The cursor in expression stack. */
56         private static int expressionPtr;
57
58   public final void setFileToParse(final IFile fileToParse) {
59     this.fileToParse = fileToParse;
60   }
61
62   public PHPParser() {
63   }
64
65   public PHPParser(final IFile fileToParse) {
66     this(new StringReader(""));
67     this.fileToParse = fileToParse;
68   }
69
70   public static final void phpParserTester(final String strEval) throws CoreException, ParseException {
71     PHPParserTokenManager.SwitchTo(PHPParserTokenManager.PHPPARSING);
72     final StringReader stream = new StringReader(strEval);
73     if (jj_input_stream == null) {
74       jj_input_stream = new SimpleCharStream(stream, 1, 1);
75     }
76     ReInit(new StringReader(strEval));
77     astStack = new AstNode[AstStackIncrement];
78     phpTest();
79   }
80
81   public static final void htmlParserTester(final File fileName) throws CoreException, ParseException {
82     try {
83       final Reader stream = new FileReader(fileName);
84       if (jj_input_stream == null) {
85         jj_input_stream = new SimpleCharStream(stream, 1, 1);
86       }
87       ReInit(stream);
88       astStack = new AstNode[AstStackIncrement];
89       phpFile();
90     } catch (FileNotFoundException e) {
91       e.printStackTrace();  //To change body of catch statement use Options | File Templates.
92     }
93   }
94
95   public static final void htmlParserTester(final String strEval) throws CoreException, ParseException {
96     final StringReader stream = new StringReader(strEval);
97     if (jj_input_stream == null) {
98       jj_input_stream = new SimpleCharStream(stream, 1, 1);
99     }
100     ReInit(stream);
101     astStack = new AstNode[AstStackIncrement];
102     phpFile();
103   }
104
105   public final PHPOutlineInfo parseInfo(final Object parent, final String s) {
106     outlineInfo = new PHPOutlineInfo(parent);
107     currentSegment = outlineInfo.getDeclarations();
108     final StringReader stream = new StringReader(s);
109     if (jj_input_stream == null) {
110       jj_input_stream = new SimpleCharStream(stream, 1, 1);
111     }
112     ReInit(stream);
113     astStack = new AstNode[AstStackIncrement];
114     try {
115       parse();
116     } catch (ParseException e) {
117       processParseException(e);
118     }
119     return outlineInfo;
120   }
121
122   /**
123    * This method will process the parse exception.
124    * If the error message is null, the parse exception wasn't catched and a trace is written in the log
125    * @param e the ParseException
126    */
127   private static void processParseException(final ParseException e) {
128     if (errorMessage == null) {
129       PHPeclipsePlugin.log(e);
130       errorMessage = "this exception wasn't handled by the parser please tell us how to reproduce it";
131       errorStart = jj_input_stream.getPosition();
132       errorEnd   = errorStart + 1;
133     }
134     setMarker(e);
135     errorMessage = null;
136   }
137
138   /**
139    * Create marker for the parse error
140    * @param e the ParseException
141    */
142   private static void setMarker(final ParseException e) {
143     try {
144       if (errorStart == -1) {
145         setMarker(fileToParse,
146                   errorMessage,
147                   jj_input_stream.tokenBegin,
148                   jj_input_stream.tokenBegin + e.currentToken.image.length(),
149                   errorLevel,
150                   "Line " + e.currentToken.beginLine);
151       } else {
152         setMarker(fileToParse,
153                   errorMessage,
154                   errorStart,
155                   errorEnd,
156                   errorLevel,
157                   "Line " + e.currentToken.beginLine);
158         errorStart = -1;
159         errorEnd = -1;
160       }
161     } catch (CoreException e2) {
162       PHPeclipsePlugin.log(e2);
163     }
164   }
165
166   /**
167    * Create markers according to the external parser output
168    */
169   private static void createMarkers(final String output, final IFile file) throws CoreException {
170     // delete all markers
171     file.deleteMarkers(IMarker.PROBLEM, false, 0);
172
173     int indx = 0;
174     int brIndx;
175     boolean flag = true;
176     while ((brIndx = output.indexOf("<br />", indx)) != -1) {
177       // newer php error output (tested with 4.2.3)
178       scanLine(output, file, indx, brIndx);
179       indx = brIndx + 6;
180       flag = false;
181     }
182     if (flag) {
183       while ((brIndx = output.indexOf("<br>", indx)) != -1) {
184         // older php error output (tested with 4.2.3)
185         scanLine(output, file, indx, brIndx);
186         indx = brIndx + 4;
187       }
188     }
189   }
190
191   private static void scanLine(final String output,
192                                final IFile file,
193                                final int indx,
194                                final int brIndx) throws CoreException {
195     String current;
196     StringBuffer lineNumberBuffer = new StringBuffer(10);
197     char ch;
198     current = output.substring(indx, brIndx);
199
200     if (current.indexOf(PARSE_WARNING_STRING) != -1 || current.indexOf(PARSE_ERROR_STRING) != -1) {
201       int onLine = current.indexOf("on line <b>");
202       if (onLine != -1) {
203         lineNumberBuffer.delete(0, lineNumberBuffer.length());
204         for (int i = onLine; i < current.length(); i++) {
205           ch = current.charAt(i);
206           if ('0' <= ch && '9' >= ch) {
207             lineNumberBuffer.append(ch);
208           }
209         }
210
211         int lineNumber = Integer.parseInt(lineNumberBuffer.toString());
212
213         Hashtable attributes = new Hashtable();
214
215         current = current.replaceAll("\n", "");
216         current = current.replaceAll("<b>", "");
217         current = current.replaceAll("</b>", "");
218         MarkerUtilities.setMessage(attributes, current);
219
220         if (current.indexOf(PARSE_ERROR_STRING) != -1)
221           attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR));
222         else if (current.indexOf(PARSE_WARNING_STRING) != -1)
223           attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING));
224         else
225           attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO));
226         MarkerUtilities.setLineNumber(attributes, lineNumber);
227         MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM);
228       }
229     }
230   }
231
232   public final void parse(final String s) throws CoreException {
233     final StringReader stream = new StringReader(s);
234     if (jj_input_stream == null) {
235       jj_input_stream = new SimpleCharStream(stream, 1, 1);
236     }
237     ReInit(stream);
238     astStack = new AstNode[AstStackIncrement];
239     try {
240       parse();
241     } catch (ParseException e) {
242       processParseException(e);
243     }
244   }
245
246   /**
247    * Call the php parse command ( php -l -f &lt;filename&gt; )
248    * and create markers according to the external parser output
249    */
250   public static void phpExternalParse(final IFile file) {
251     final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore();
252     final String filename = file.getLocation().toString();
253
254     final String[] arguments = { filename };
255     final MessageFormat form = new MessageFormat(store.getString(PHPeclipsePlugin.EXTERNAL_PARSER_PREF));
256     final String command = form.format(arguments);
257
258     final String parserResult = PHPStartApacheAction.getParserOutput(command, "External parser: ");
259
260     try {
261       // parse the buffer to find the errors and warnings
262       createMarkers(parserResult, file);
263     } catch (CoreException e) {
264       PHPeclipsePlugin.log(e);
265     }
266   }
267
268   private static final void parse() throws ParseException {
269           phpFile();
270   }
271
272   static final public void phpTest() throws ParseException {
273     Php();
274     jj_consume_token(0);
275   }
276
277   static final public void phpFile() throws ParseException {
278     try {
279       label_1:
280       while (true) {
281         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
282         case PHPSTARTSHORT:
283         case PHPSTARTLONG:
284         case PHPECHOSTART:
285         case PHPEND:
286         case CLASS:
287         case FUNCTION:
288         case IF:
289         case ARRAY:
290         case BREAK:
291         case LIST:
292         case PRINT:
293         case ECHO:
294         case INCLUDE:
295         case REQUIRE:
296         case INCLUDE_ONCE:
297         case REQUIRE_ONCE:
298         case GLOBAL:
299         case STATIC:
300         case CONTINUE:
301         case DO:
302         case FOR:
303         case NEW:
304         case NULL:
305         case RETURN:
306         case SWITCH:
307         case TRUE:
308         case FALSE:
309         case WHILE:
310         case FOREACH:
311         case INTEGER_LITERAL:
312         case FLOATING_POINT_LITERAL:
313         case STRING_LITERAL:
314         case IDENTIFIER:
315         case LPAREN:
316         case LBRACE:
317         case SEMICOLON:
318         case AT:
319         case DOLLAR:
320         case BANG:
321         case INCR:
322         case DECR:
323         case PLUS:
324         case MINUS:
325         case BIT_AND:
326         case DOLLAR_ID:
327           ;
328           break;
329         default:
330           jj_la1[0] = jj_gen;
331           break label_1;
332         }
333         PhpBlock();
334       }
335       jj_consume_token(0);
336     } catch (TokenMgrError e) {
337     PHPeclipsePlugin.log(e);
338     errorStart   = SimpleCharStream.getPosition();
339     errorEnd     = errorStart + 1;
340     errorMessage = e.getMessage();
341     errorLevel   = ERROR;
342     {if (true) throw generateParseException();}
343     }
344   }
345
346 /**
347  * A php block is a <?= expression [;]?>
348  * or <?php somephpcode ?>
349  * or <? somephpcode ?>
350  */
351   static final public void PhpBlock() throws ParseException {
352   final int start = jj_input_stream.getPosition();
353     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
354     case PHPECHOSTART:
355       phpEchoBlock();
356       break;
357     case PHPSTARTSHORT:
358     case PHPSTARTLONG:
359     case PHPEND:
360     case CLASS:
361     case FUNCTION:
362     case IF:
363     case ARRAY:
364     case BREAK:
365     case LIST:
366     case PRINT:
367     case ECHO:
368     case INCLUDE:
369     case REQUIRE:
370     case INCLUDE_ONCE:
371     case REQUIRE_ONCE:
372     case GLOBAL:
373     case STATIC:
374     case CONTINUE:
375     case DO:
376     case FOR:
377     case NEW:
378     case NULL:
379     case RETURN:
380     case SWITCH:
381     case TRUE:
382     case FALSE:
383     case WHILE:
384     case FOREACH:
385     case INTEGER_LITERAL:
386     case FLOATING_POINT_LITERAL:
387     case STRING_LITERAL:
388     case IDENTIFIER:
389     case LPAREN:
390     case LBRACE:
391     case SEMICOLON:
392     case AT:
393     case DOLLAR:
394     case BANG:
395     case INCR:
396     case DECR:
397     case PLUS:
398     case MINUS:
399     case BIT_AND:
400     case DOLLAR_ID:
401       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
402       case PHPSTARTSHORT:
403       case PHPSTARTLONG:
404         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
405         case PHPSTARTLONG:
406           jj_consume_token(PHPSTARTLONG);
407           break;
408         case PHPSTARTSHORT:
409           jj_consume_token(PHPSTARTSHORT);
410      try {
411       setMarker(fileToParse,
412                 "You should use '<?php' instead of '<?' it will avoid some problems with XML",
413                 start,
414                 jj_input_stream.getPosition(),
415                 INFO,
416                 "Line " + token.beginLine);
417     } catch (CoreException e) {
418       PHPeclipsePlugin.log(e);
419     }
420           break;
421         default:
422           jj_la1[1] = jj_gen;
423           jj_consume_token(-1);
424           throw new ParseException();
425         }
426         break;
427       default:
428         jj_la1[2] = jj_gen;
429         ;
430       }
431       Php();
432       try {
433         jj_consume_token(PHPEND);
434       } catch (ParseException e) {
435     errorMessage = "'?>' expected";
436     errorLevel   = ERROR;
437     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
438     errorEnd   = jj_input_stream.getPosition() + 1;
439     {if (true) throw e;}
440       }
441       break;
442     default:
443       jj_la1[3] = jj_gen;
444       jj_consume_token(-1);
445       throw new ParseException();
446     }
447   }
448
449   static final public void phpEchoBlock() throws ParseException {
450     jj_consume_token(PHPECHOSTART);
451     Expression();
452     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
453     case SEMICOLON:
454       jj_consume_token(SEMICOLON);
455       break;
456     default:
457       jj_la1[4] = jj_gen;
458       ;
459     }
460     jj_consume_token(PHPEND);
461   }
462
463   static final public void Php() throws ParseException {
464     label_2:
465     while (true) {
466       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
467       case CLASS:
468       case FUNCTION:
469       case IF:
470       case ARRAY:
471       case BREAK:
472       case LIST:
473       case PRINT:
474       case ECHO:
475       case INCLUDE:
476       case REQUIRE:
477       case INCLUDE_ONCE:
478       case REQUIRE_ONCE:
479       case GLOBAL:
480       case STATIC:
481       case CONTINUE:
482       case DO:
483       case FOR:
484       case NEW:
485       case NULL:
486       case RETURN:
487       case SWITCH:
488       case TRUE:
489       case FALSE:
490       case WHILE:
491       case FOREACH:
492       case INTEGER_LITERAL:
493       case FLOATING_POINT_LITERAL:
494       case STRING_LITERAL:
495       case IDENTIFIER:
496       case LPAREN:
497       case LBRACE:
498       case SEMICOLON:
499       case AT:
500       case DOLLAR:
501       case BANG:
502       case INCR:
503       case DECR:
504       case PLUS:
505       case MINUS:
506       case BIT_AND:
507       case DOLLAR_ID:
508         ;
509         break;
510       default:
511         jj_la1[5] = jj_gen;
512         break label_2;
513       }
514       BlockStatement();
515     }
516   }
517
518   static final public void ClassDeclaration() throws ParseException {
519   final PHPClassDeclaration classDeclaration;
520   final Token className;
521   final int pos;
522     jj_consume_token(CLASS);
523     try {
524      pos = jj_input_stream.getPosition();
525       className = jj_consume_token(IDENTIFIER);
526     } catch (ParseException e) {
527     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected";
528     errorLevel   = ERROR;
529     errorStart   = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
530     errorEnd     = jj_input_stream.getPosition() + 1;
531     {if (true) throw e;}
532     }
533     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
534     case EXTENDS:
535       jj_consume_token(EXTENDS);
536       try {
537         jj_consume_token(IDENTIFIER);
538       } catch (ParseException e) {
539       errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected";
540       errorLevel   = ERROR;
541       errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
542       errorEnd   = jj_input_stream.getPosition() + 1;
543       {if (true) throw e;}
544       }
545       break;
546     default:
547       jj_la1[6] = jj_gen;
548       ;
549     }
550     if (currentSegment != null) {
551       classDeclaration = new PHPClassDeclaration(currentSegment,className.image,pos);
552       currentSegment.add(classDeclaration);
553       currentSegment = classDeclaration;
554     }
555     ClassBody();
556     if (currentSegment != null) {
557       currentSegment = (PHPSegmentWithChildren) currentSegment.getParent();
558     }
559   }
560
561   static final public void ClassBody() throws ParseException {
562     try {
563       jj_consume_token(LBRACE);
564     } catch (ParseException e) {
565     errorMessage = "unexpected token : '"+ e.currentToken.next.image + "', '{' expected";
566     errorLevel   = ERROR;
567     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
568     errorEnd   = jj_input_stream.getPosition() + 1;
569     {if (true) throw e;}
570     }
571     label_3:
572     while (true) {
573       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
574       case FUNCTION:
575       case VAR:
576         ;
577         break;
578       default:
579         jj_la1[7] = jj_gen;
580         break label_3;
581       }
582       ClassBodyDeclaration();
583     }
584     try {
585       jj_consume_token(RBRACE);
586     } catch (ParseException e) {
587     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', 'var', 'function' or '}' expected";
588     errorLevel   = ERROR;
589     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
590     errorEnd   = jj_input_stream.getPosition() + 1;
591     {if (true) throw e;}
592     }
593   }
594
595 /**
596  * A class can contain only methods and fields.
597  */
598   static final public void ClassBodyDeclaration() throws ParseException {
599     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
600     case FUNCTION:
601       MethodDeclaration();
602       break;
603     case VAR:
604       FieldDeclaration();
605       break;
606     default:
607       jj_la1[8] = jj_gen;
608       jj_consume_token(-1);
609       throw new ParseException();
610     }
611   }
612
613 /**
614  * A class field declaration : it's var VariableDeclarator() (, VariableDeclarator())*;.
615  */
616   static final public void FieldDeclaration() throws ParseException {
617   PHPVarDeclaration variableDeclaration;
618     jj_consume_token(VAR);
619     variableDeclaration = VariableDeclarator();
620     if (currentSegment != null) {
621       currentSegment.add(variableDeclaration);
622     }
623     label_4:
624     while (true) {
625       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
626       case COMMA:
627         ;
628         break;
629       default:
630         jj_la1[9] = jj_gen;
631         break label_4;
632       }
633       jj_consume_token(COMMA);
634       variableDeclaration = VariableDeclarator();
635       if (currentSegment != null) {
636         currentSegment.add(variableDeclaration);
637       }
638     }
639     try {
640       jj_consume_token(SEMICOLON);
641     } catch (ParseException e) {
642     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected after variable declaration";
643     errorLevel   = ERROR;
644     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
645     errorEnd   = jj_input_stream.getPosition() + 1;
646     {if (true) throw e;}
647     }
648   }
649
650   static final public PHPVarDeclaration VariableDeclarator() throws ParseException {
651   final String varName, varValue;
652   final int pos = jj_input_stream.getPosition();
653     varName = VariableDeclaratorId();
654     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
655     case ASSIGN:
656       jj_consume_token(ASSIGN);
657       try {
658         varValue = VariableInitializer();
659        {if (true) return new PHPVarDeclaration(currentSegment,varName,pos,varValue);}
660       } catch (ParseException e) {
661       errorMessage = "Literal expression expected in variable initializer";
662       errorLevel   = ERROR;
663       errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
664       errorEnd   = jj_input_stream.getPosition() + 1;
665       {if (true) throw e;}
666       }
667       break;
668     default:
669       jj_la1[10] = jj_gen;
670       ;
671     }
672    {if (true) return new PHPVarDeclaration(currentSegment,varName,pos);}
673     throw new Error("Missing return statement in function");
674   }
675
676   static final public String VariableDeclaratorId() throws ParseException {
677   String expr;
678   final StringBuffer buff = new StringBuffer();
679     try {
680       expr = Variable();
681      buff.append(expr);
682       label_5:
683       while (true) {
684         if (jj_2_1(2)) {
685           ;
686         } else {
687           break label_5;
688         }
689         expr = VariableSuffix();
690      buff.append(expr);
691       }
692      {if (true) return buff.toString();}
693     } catch (ParseException e) {
694     errorMessage = "'$' expected for variable identifier";
695     errorLevel   = ERROR;
696     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
697     errorEnd   = jj_input_stream.getPosition() + 1;
698     {if (true) throw e;}
699     }
700     throw new Error("Missing return statement in function");
701   }
702
703   static final public String Variable() throws ParseException {
704   String expr = null;
705   final Token token;
706     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
707     case DOLLAR_ID:
708       token = jj_consume_token(DOLLAR_ID);
709       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
710       case LBRACE:
711         jj_consume_token(LBRACE);
712         expr = Expression();
713         jj_consume_token(RBRACE);
714         break;
715       default:
716         jj_la1[11] = jj_gen;
717         ;
718       }
719     if (expr == null && !assigning) {
720       if (currentFunction != null) {
721         PHPVarDeclaration var = currentFunction.getParameter(token.image.substring(1));
722         if (var != null) {
723           var.getVariable().setUsed(true);
724         }
725       }
726       {if (true) return token.image.substring(1);}
727     }
728     {if (true) return token + "{" + expr + "}";}
729       break;
730     case DOLLAR:
731       jj_consume_token(DOLLAR);
732       expr = VariableName();
733    {if (true) return expr;}
734       break;
735     default:
736       jj_la1[12] = jj_gen;
737       jj_consume_token(-1);
738       throw new ParseException();
739     }
740     throw new Error("Missing return statement in function");
741   }
742
743   static final public String VariableName() throws ParseException {
744 String expr = null;
745 final Token token;
746     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
747     case LBRACE:
748       jj_consume_token(LBRACE);
749       expr = Expression();
750       jj_consume_token(RBRACE);
751    {if (true) return "{"+expr+"}";}
752       break;
753     case IDENTIFIER:
754       token = jj_consume_token(IDENTIFIER);
755       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
756       case LBRACE:
757         jj_consume_token(LBRACE);
758         expr = Expression();
759         jj_consume_token(RBRACE);
760         break;
761       default:
762         jj_la1[13] = jj_gen;
763         ;
764       }
765     if (expr == null) {
766       if (currentFunction != null) {
767         PHPVarDeclaration var = currentFunction.getParameter(token.image);
768         if (var != null) {
769           var.getVariable().setUsed(true);
770         }
771       }
772       {if (true) return token.image;}
773     }
774     {if (true) return token + "{" + expr + "}";}
775       break;
776     case DOLLAR:
777       jj_consume_token(DOLLAR);
778       expr = VariableName();
779     if (currentFunction != null) {
780       PHPVarDeclaration var = currentFunction.getParameter(expr);
781       if (var != null) {
782         var.getVariable().setUsed(true);
783       }
784     }
785     {if (true) return "$" + expr;}
786       break;
787     case DOLLAR_ID:
788       token = jj_consume_token(DOLLAR_ID);
789     if (currentFunction != null) {
790       PHPVarDeclaration var = currentFunction.getParameter(token.image.substring(1));
791       if (var != null) {
792         var.getVariable().setUsed(true);
793       }
794     }
795     {if (true) return token.image + expr;}
796       break;
797     default:
798       jj_la1[14] = jj_gen;
799       jj_consume_token(-1);
800       throw new ParseException();
801     }
802     throw new Error("Missing return statement in function");
803   }
804
805   static final public String VariableInitializer() throws ParseException {
806   final String expr;
807   final Token token;
808     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
809     case NULL:
810     case TRUE:
811     case FALSE:
812     case INTEGER_LITERAL:
813     case FLOATING_POINT_LITERAL:
814     case STRING_LITERAL:
815       expr = Literal();
816    {if (true) return expr;}
817       break;
818     case MINUS:
819       jj_consume_token(MINUS);
820       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
821       case INTEGER_LITERAL:
822         token = jj_consume_token(INTEGER_LITERAL);
823         break;
824       case FLOATING_POINT_LITERAL:
825         token = jj_consume_token(FLOATING_POINT_LITERAL);
826         break;
827       default:
828         jj_la1[15] = jj_gen;
829         jj_consume_token(-1);
830         throw new ParseException();
831       }
832    {if (true) return "-" + token.image;}
833       break;
834     case PLUS:
835       jj_consume_token(PLUS);
836       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
837       case INTEGER_LITERAL:
838         token = jj_consume_token(INTEGER_LITERAL);
839         break;
840       case FLOATING_POINT_LITERAL:
841         token = jj_consume_token(FLOATING_POINT_LITERAL);
842         break;
843       default:
844         jj_la1[16] = jj_gen;
845         jj_consume_token(-1);
846         throw new ParseException();
847       }
848    {if (true) return "+" + token.image;}
849       break;
850     case ARRAY:
851       expr = ArrayDeclarator();
852    {if (true) return expr;}
853       break;
854     case IDENTIFIER:
855       token = jj_consume_token(IDENTIFIER);
856    {if (true) return token.image;}
857       break;
858     default:
859       jj_la1[17] = jj_gen;
860       jj_consume_token(-1);
861       throw new ParseException();
862     }
863     throw new Error("Missing return statement in function");
864   }
865
866   static final public String ArrayVariable() throws ParseException {
867 String expr;
868 final StringBuffer buff = new StringBuffer();
869     expr = Expression();
870    buff.append(expr);
871     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
872     case ARRAYASSIGN:
873       jj_consume_token(ARRAYASSIGN);
874       expr = Expression();
875     buff.append("=>").append(expr);
876       break;
877     default:
878       jj_la1[18] = jj_gen;
879       ;
880     }
881    {if (true) return buff.toString();}
882     throw new Error("Missing return statement in function");
883   }
884
885   static final public String ArrayInitializer() throws ParseException {
886 String expr;
887 final StringBuffer buff = new StringBuffer("(");
888     jj_consume_token(LPAREN);
889     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
890     case ARRAY:
891     case LIST:
892     case PRINT:
893     case NEW:
894     case NULL:
895     case TRUE:
896     case FALSE:
897     case INTEGER_LITERAL:
898     case FLOATING_POINT_LITERAL:
899     case STRING_LITERAL:
900     case IDENTIFIER:
901     case LPAREN:
902     case AT:
903     case DOLLAR:
904     case BANG:
905     case INCR:
906     case DECR:
907     case PLUS:
908     case MINUS:
909     case BIT_AND:
910     case DOLLAR_ID:
911       expr = ArrayVariable();
912              buff.append(expr);
913       label_6:
914       while (true) {
915         if (jj_2_2(2)) {
916           ;
917         } else {
918           break label_6;
919         }
920         jj_consume_token(COMMA);
921         expr = ArrayVariable();
922              buff.append(",").append(expr);
923       }
924       break;
925     default:
926       jj_la1[19] = jj_gen;
927       ;
928     }
929     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
930     case COMMA:
931       jj_consume_token(COMMA);
932                      buff.append(",");
933       break;
934     default:
935       jj_la1[20] = jj_gen;
936       ;
937     }
938     jj_consume_token(RPAREN);
939     buff.append(")");
940     {if (true) return buff.toString();}
941     throw new Error("Missing return statement in function");
942   }
943
944 /**
945  * A Method Declaration.
946  * <b>function</b> MetodDeclarator() Block()
947  */
948   static final public void MethodDeclaration() throws ParseException {
949   final PHPFunctionDeclaration functionDeclaration;
950   Token functionToken;
951     functionToken = jj_consume_token(FUNCTION);
952     try {
953       functionDeclaration = MethodDeclarator();
954     } catch (ParseException e) {
955     if (errorMessage != null) {
956       {if (true) throw e;}
957     }
958     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function identifier expected";
959     errorLevel   = ERROR;
960     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
961     errorEnd   = jj_input_stream.getPosition() + 1;
962     {if (true) throw e;}
963     }
964     if (currentSegment != null) {
965       currentSegment.add(functionDeclaration);
966       currentSegment = functionDeclaration;
967     }
968     currentFunction = functionDeclaration;
969     Block();
970     Hashtable parameters = currentFunction.getParameters();
971     Enumeration vars = parameters.elements();
972     while (vars.hasMoreElements()) {
973       PHPVarDeclaration o = (PHPVarDeclaration) vars.nextElement();
974       if (!o.getVariable().isUsed()) {
975         try {
976           setMarker(fileToParse,
977                     "Parameter "+o.getVariable().getName()+" is never used in function",
978                     functionToken.beginLine,
979                     WARNING,
980                     "Line " + token.beginLine);
981         } catch (CoreException e) {
982           PHPeclipsePlugin.log(e);
983         }
984       }
985     }
986     currentFunction = null;
987     if (currentSegment != null) {
988       currentSegment = (PHPSegmentWithChildren) currentSegment.getParent();
989     }
990   }
991
992 /**
993  * A MethodDeclarator.
994  * [&] IDENTIFIER(parameters ...).
995  * @return a function description for the outline
996  */
997   static final public PHPFunctionDeclaration MethodDeclarator() throws ParseException {
998   final Token identifier;
999   final StringBuffer methodDeclaration = new StringBuffer();
1000   final Hashtable formalParameters;
1001   final int pos = jj_input_stream.getPosition();
1002     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1003     case BIT_AND:
1004       jj_consume_token(BIT_AND);
1005                methodDeclaration.append("&");
1006       break;
1007     default:
1008       jj_la1[21] = jj_gen;
1009       ;
1010     }
1011     identifier = jj_consume_token(IDENTIFIER);
1012     formalParameters = FormalParameters();
1013     methodDeclaration.append(identifier);
1014     {if (true) return new PHPFunctionDeclaration(currentSegment,methodDeclaration.toString(),pos,formalParameters);}
1015     throw new Error("Missing return statement in function");
1016   }
1017
1018 /**
1019  * FormalParameters follows method identifier.
1020  * (FormalParameter())
1021  */
1022   static final public Hashtable FormalParameters() throws ParseException {
1023   String expr;
1024   final StringBuffer buff = new StringBuffer("(");
1025   PHPVarDeclaration var;
1026   final Hashtable parameters = new Hashtable();
1027     try {
1028       jj_consume_token(LPAREN);
1029     } catch (ParseException e) {
1030     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected after function identifier";
1031     errorLevel   = ERROR;
1032     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
1033     errorEnd   = jj_input_stream.getPosition() + 1;
1034     {if (true) throw e;}
1035     }
1036     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1037     case DOLLAR:
1038     case BIT_AND:
1039     case DOLLAR_ID:
1040       var = FormalParameter();
1041                parameters.put(var.getVariable().getName(),var);
1042       label_7:
1043       while (true) {
1044         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1045         case COMMA:
1046           ;
1047           break;
1048         default:
1049           jj_la1[22] = jj_gen;
1050           break label_7;
1051         }
1052         jj_consume_token(COMMA);
1053         var = FormalParameter();
1054                  parameters.put(var.getVariable().getName(),var);
1055       }
1056       break;
1057     default:
1058       jj_la1[23] = jj_gen;
1059       ;
1060     }
1061     try {
1062       jj_consume_token(RPAREN);
1063     } catch (ParseException e) {
1064     errorMessage = "')' expected";
1065     errorLevel   = ERROR;
1066     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
1067     errorEnd   = jj_input_stream.getPosition() + 1;
1068     {if (true) throw e;}
1069     }
1070   {if (true) return parameters;}
1071     throw new Error("Missing return statement in function");
1072   }
1073
1074 /**
1075  * A formal parameter.
1076  * $varname[=value] (,$varname[=value])
1077  */
1078   static final public PHPVarDeclaration FormalParameter() throws ParseException {
1079   final PHPVarDeclaration variableDeclaration;
1080   Token token = null;
1081     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1082     case BIT_AND:
1083       token = jj_consume_token(BIT_AND);
1084       break;
1085     default:
1086       jj_la1[24] = jj_gen;
1087       ;
1088     }
1089     variableDeclaration = VariableDeclarator();
1090     if (token != null) {
1091       variableDeclaration.getVariable().setReference(true);
1092     }
1093     {if (true) return variableDeclaration;}
1094     throw new Error("Missing return statement in function");
1095   }
1096
1097   static final public String Type() throws ParseException {
1098     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1099     case STRING:
1100       jj_consume_token(STRING);
1101    {if (true) return "string";}
1102       break;
1103     case BOOL:
1104       jj_consume_token(BOOL);
1105    {if (true) return "bool";}
1106       break;
1107     case BOOLEAN:
1108       jj_consume_token(BOOLEAN);
1109    {if (true) return "boolean";}
1110       break;
1111     case REAL:
1112       jj_consume_token(REAL);
1113    {if (true) return "real";}
1114       break;
1115     case DOUBLE:
1116       jj_consume_token(DOUBLE);
1117    {if (true) return "double";}
1118       break;
1119     case FLOAT:
1120       jj_consume_token(FLOAT);
1121    {if (true) return "float";}
1122       break;
1123     case INT:
1124       jj_consume_token(INT);
1125    {if (true) return "int";}
1126       break;
1127     case INTEGER:
1128       jj_consume_token(INTEGER);
1129    {if (true) return "integer";}
1130       break;
1131     case OBJECT:
1132       jj_consume_token(OBJECT);
1133    {if (true) return "object";}
1134       break;
1135     default:
1136       jj_la1[25] = jj_gen;
1137       jj_consume_token(-1);
1138       throw new ParseException();
1139     }
1140     throw new Error("Missing return statement in function");
1141   }
1142
1143   static final public String Expression() throws ParseException {
1144   final String expr;
1145   final String assignOperator;
1146   final String expr2;
1147     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1148     case PRINT:
1149       expr = PrintExpression();
1150    {if (true) return expr;}
1151       break;
1152     case LIST:
1153       expr = ListExpression();
1154    {if (true) return expr;}
1155       break;
1156     default:
1157       jj_la1[26] = jj_gen;
1158       if (jj_2_3(2147483647)) {
1159         expr = varAssignation();
1160    {if (true) return expr;}
1161       } else {
1162         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1163         case ARRAY:
1164         case NEW:
1165         case NULL:
1166         case TRUE:
1167         case FALSE:
1168         case INTEGER_LITERAL:
1169         case FLOATING_POINT_LITERAL:
1170         case STRING_LITERAL:
1171         case IDENTIFIER:
1172         case LPAREN:
1173         case AT:
1174         case DOLLAR:
1175         case BANG:
1176         case INCR:
1177         case DECR:
1178         case PLUS:
1179         case MINUS:
1180         case BIT_AND:
1181         case DOLLAR_ID:
1182           expr = ConditionalExpression();
1183    {if (true) return expr;}
1184           break;
1185         default:
1186           jj_la1[27] = jj_gen;
1187           jj_consume_token(-1);
1188           throw new ParseException();
1189         }
1190       }
1191     }
1192     throw new Error("Missing return statement in function");
1193   }
1194
1195 /**
1196  * A Variable assignation.
1197  * varName (an assign operator) any expression
1198  */
1199   static final public String varAssignation() throws ParseException {
1200   String varName,assignOperator,expr2;
1201   PHPVarDeclaration variable;
1202   final int pos = SimpleCharStream.getPosition();
1203     varName = VariableDeclaratorId();
1204     assignOperator = AssignmentOperator();
1205     try {
1206       expr2 = Expression();
1207     } catch (ParseException e) {
1208       if (errorMessage != null) {
1209         {if (true) throw e;}
1210       }
1211       errorMessage = "expression expected";
1212       errorLevel   = ERROR;
1213       errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
1214       errorEnd   = jj_input_stream.getPosition() + 1;
1215       {if (true) throw e;}
1216     }
1217      {if (true) return varName + assignOperator + expr2;}
1218     throw new Error("Missing return statement in function");
1219   }
1220
1221   static final public String AssignmentOperator() throws ParseException {
1222     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1223     case ASSIGN:
1224       jj_consume_token(ASSIGN);
1225  {if (true) return "=";}
1226       break;
1227     case STARASSIGN:
1228       jj_consume_token(STARASSIGN);
1229  {if (true) return "*=";}
1230       break;
1231     case SLASHASSIGN:
1232       jj_consume_token(SLASHASSIGN);
1233  {if (true) return "/=";}
1234       break;
1235     case REMASSIGN:
1236       jj_consume_token(REMASSIGN);
1237  {if (true) return "%=";}
1238       break;
1239     case PLUSASSIGN:
1240       jj_consume_token(PLUSASSIGN);
1241  {if (true) return "+=";}
1242       break;
1243     case MINUSASSIGN:
1244       jj_consume_token(MINUSASSIGN);
1245  {if (true) return "-=";}
1246       break;
1247     case LSHIFTASSIGN:
1248       jj_consume_token(LSHIFTASSIGN);
1249  {if (true) return "<<=";}
1250       break;
1251     case RSIGNEDSHIFTASSIGN:
1252       jj_consume_token(RSIGNEDSHIFTASSIGN);
1253  {if (true) return ">>=";}
1254       break;
1255     case ANDASSIGN:
1256       jj_consume_token(ANDASSIGN);
1257  {if (true) return "&=";}
1258       break;
1259     case XORASSIGN:
1260       jj_consume_token(XORASSIGN);
1261  {if (true) return "|=";}
1262       break;
1263     case ORASSIGN:
1264       jj_consume_token(ORASSIGN);
1265  {if (true) return "|=";}
1266       break;
1267     case DOTASSIGN:
1268       jj_consume_token(DOTASSIGN);
1269  {if (true) return ".=";}
1270       break;
1271     case TILDEEQUAL:
1272       jj_consume_token(TILDEEQUAL);
1273  {if (true) return "~=";}
1274       break;
1275     default:
1276       jj_la1[28] = jj_gen;
1277       jj_consume_token(-1);
1278       throw new ParseException();
1279     }
1280     throw new Error("Missing return statement in function");
1281   }
1282
1283   static final public String ConditionalExpression() throws ParseException {
1284   final String expr;
1285   String expr2 = null;
1286   String expr3 = null;
1287     expr = ConditionalOrExpression();
1288     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1289     case HOOK:
1290       jj_consume_token(HOOK);
1291       expr2 = Expression();
1292       jj_consume_token(COLON);
1293       expr3 = ConditionalExpression();
1294       break;
1295     default:
1296       jj_la1[29] = jj_gen;
1297       ;
1298     }
1299   if (expr3 == null) {
1300     {if (true) return expr;}
1301   } else {
1302     {if (true) return expr + "?" + expr2 + ":" + expr3;}
1303   }
1304     throw new Error("Missing return statement in function");
1305   }
1306
1307   static final public String ConditionalOrExpression() throws ParseException {
1308   String expr;
1309   Token operator;
1310   final StringBuffer buff = new StringBuffer();
1311     expr = ConditionalAndExpression();
1312    buff.append(expr);
1313     label_8:
1314     while (true) {
1315       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1316       case _ORL:
1317       case SC_OR:
1318         ;
1319         break;
1320       default:
1321         jj_la1[30] = jj_gen;
1322         break label_8;
1323       }
1324       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1325       case SC_OR:
1326         operator = jj_consume_token(SC_OR);
1327         break;
1328       case _ORL:
1329         operator = jj_consume_token(_ORL);
1330         break;
1331       default:
1332         jj_la1[31] = jj_gen;
1333         jj_consume_token(-1);
1334         throw new ParseException();
1335       }
1336       expr = ConditionalAndExpression();
1337       buff.append(operator.image);
1338       buff.append(expr);
1339     }
1340     {if (true) return buff.toString();}
1341     throw new Error("Missing return statement in function");
1342   }
1343
1344   static final public String ConditionalAndExpression() throws ParseException {
1345   String expr;
1346   Token operator;
1347   final StringBuffer buff = new StringBuffer();
1348     expr = ConcatExpression();
1349    buff.append(expr);
1350     label_9:
1351     while (true) {
1352       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1353       case _ANDL:
1354       case SC_AND:
1355         ;
1356         break;
1357       default:
1358         jj_la1[32] = jj_gen;
1359         break label_9;
1360       }
1361       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1362       case SC_AND:
1363         operator = jj_consume_token(SC_AND);
1364         break;
1365       case _ANDL:
1366         operator = jj_consume_token(_ANDL);
1367         break;
1368       default:
1369         jj_la1[33] = jj_gen;
1370         jj_consume_token(-1);
1371         throw new ParseException();
1372       }
1373       expr = ConcatExpression();
1374       buff.append(operator.image);
1375       buff.append(expr);
1376     }
1377    {if (true) return buff.toString();}
1378     throw new Error("Missing return statement in function");
1379   }
1380
1381   static final public String ConcatExpression() throws ParseException {
1382   String expr;
1383   final StringBuffer buff = new StringBuffer();
1384     expr = InclusiveOrExpression();
1385    buff.append(expr);
1386     label_10:
1387     while (true) {
1388       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1389       case DOT:
1390         ;
1391         break;
1392       default:
1393         jj_la1[34] = jj_gen;
1394         break label_10;
1395       }
1396       jj_consume_token(DOT);
1397       expr = InclusiveOrExpression();
1398    buff.append(".").append(expr);
1399     }
1400    {if (true) return buff.toString();}
1401     throw new Error("Missing return statement in function");
1402   }
1403
1404   static final public String InclusiveOrExpression() throws ParseException {
1405   String expr;
1406   final StringBuffer buff = new StringBuffer();
1407     expr = ExclusiveOrExpression();
1408    buff.append(expr);
1409     label_11:
1410     while (true) {
1411       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1412       case BIT_OR:
1413         ;
1414         break;
1415       default:
1416         jj_la1[35] = jj_gen;
1417         break label_11;
1418       }
1419       jj_consume_token(BIT_OR);
1420       expr = ExclusiveOrExpression();
1421    buff.append("|").append(expr);
1422     }
1423    {if (true) return buff.toString();}
1424     throw new Error("Missing return statement in function");
1425   }
1426
1427   static final public String ExclusiveOrExpression() throws ParseException {
1428   String expr;
1429   final StringBuffer buff = new StringBuffer();
1430     expr = AndExpression();
1431     buff.append(expr);
1432     label_12:
1433     while (true) {
1434       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1435       case XOR:
1436         ;
1437         break;
1438       default:
1439         jj_la1[36] = jj_gen;
1440         break label_12;
1441       }
1442       jj_consume_token(XOR);
1443       expr = AndExpression();
1444     buff.append("^");
1445     buff.append(expr);
1446     }
1447     {if (true) return buff.toString();}
1448     throw new Error("Missing return statement in function");
1449   }
1450
1451   static final public String AndExpression() throws ParseException {
1452   String expr;
1453   final StringBuffer buff = new StringBuffer();
1454     expr = EqualityExpression();
1455     buff.append(expr);
1456     label_13:
1457     while (true) {
1458       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1459       case BIT_AND:
1460         ;
1461         break;
1462       default:
1463         jj_la1[37] = jj_gen;
1464         break label_13;
1465       }
1466       jj_consume_token(BIT_AND);
1467       expr = EqualityExpression();
1468     buff.append("&").append(expr);
1469     }
1470    {if (true) return buff.toString();}
1471     throw new Error("Missing return statement in function");
1472   }
1473
1474   static final public String EqualityExpression() throws ParseException {
1475   String expr;
1476   Token operator;
1477   final StringBuffer buff = new StringBuffer();
1478     expr = RelationalExpression();
1479    buff.append(expr);
1480     label_14:
1481     while (true) {
1482       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1483       case EQ:
1484       case NE:
1485       case DIF:
1486       case BANGDOUBLEEQUAL:
1487       case TRIPLEEQUAL:
1488         ;
1489         break;
1490       default:
1491         jj_la1[38] = jj_gen;
1492         break label_14;
1493       }
1494       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1495       case EQ:
1496         operator = jj_consume_token(EQ);
1497         break;
1498       case DIF:
1499         operator = jj_consume_token(DIF);
1500         break;
1501       case NE:
1502         operator = jj_consume_token(NE);
1503         break;
1504       case BANGDOUBLEEQUAL:
1505         operator = jj_consume_token(BANGDOUBLEEQUAL);
1506         break;
1507       case TRIPLEEQUAL:
1508         operator = jj_consume_token(TRIPLEEQUAL);
1509         break;
1510       default:
1511         jj_la1[39] = jj_gen;
1512         jj_consume_token(-1);
1513         throw new ParseException();
1514       }
1515       try {
1516         expr = RelationalExpression();
1517       } catch (ParseException e) {
1518     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected after '"+operator.image+"'";
1519     errorLevel   = ERROR;
1520     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
1521     errorEnd   = jj_input_stream.getPosition() + 1;
1522     {if (true) throw e;}
1523       }
1524     buff.append(operator.image);
1525     buff.append(expr);
1526     }
1527    {if (true) return buff.toString();}
1528     throw new Error("Missing return statement in function");
1529   }
1530
1531   static final public String RelationalExpression() throws ParseException {
1532   String expr;
1533   Token operator;
1534   final StringBuffer buff = new StringBuffer();
1535     expr = ShiftExpression();
1536    buff.append(expr);
1537     label_15:
1538     while (true) {
1539       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1540       case GT:
1541       case LT:
1542       case LE:
1543       case GE:
1544         ;
1545         break;
1546       default:
1547         jj_la1[40] = jj_gen;
1548         break label_15;
1549       }
1550       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1551       case LT:
1552         operator = jj_consume_token(LT);
1553         break;
1554       case GT:
1555         operator = jj_consume_token(GT);
1556         break;
1557       case LE:
1558         operator = jj_consume_token(LE);
1559         break;
1560       case GE:
1561         operator = jj_consume_token(GE);
1562         break;
1563       default:
1564         jj_la1[41] = jj_gen;
1565         jj_consume_token(-1);
1566         throw new ParseException();
1567       }
1568       expr = ShiftExpression();
1569    buff.append(operator.image).append(expr);
1570     }
1571    {if (true) return buff.toString();}
1572     throw new Error("Missing return statement in function");
1573   }
1574
1575   static final public String ShiftExpression() throws ParseException {
1576   String expr;
1577   Token operator;
1578   final StringBuffer buff = new StringBuffer();
1579     expr = AdditiveExpression();
1580    buff.append(expr);
1581     label_16:
1582     while (true) {
1583       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1584       case LSHIFT:
1585       case RSIGNEDSHIFT:
1586       case RUNSIGNEDSHIFT:
1587         ;
1588         break;
1589       default:
1590         jj_la1[42] = jj_gen;
1591         break label_16;
1592       }
1593       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1594       case LSHIFT:
1595         operator = jj_consume_token(LSHIFT);
1596         break;
1597       case RSIGNEDSHIFT:
1598         operator = jj_consume_token(RSIGNEDSHIFT);
1599         break;
1600       case RUNSIGNEDSHIFT:
1601         operator = jj_consume_token(RUNSIGNEDSHIFT);
1602         break;
1603       default:
1604         jj_la1[43] = jj_gen;
1605         jj_consume_token(-1);
1606         throw new ParseException();
1607       }
1608       expr = AdditiveExpression();
1609     buff.append(operator.image);
1610     buff.append(expr);
1611     }
1612    {if (true) return buff.toString();}
1613     throw new Error("Missing return statement in function");
1614   }
1615
1616   static final public String AdditiveExpression() throws ParseException {
1617   String expr;
1618   Token operator;
1619   final StringBuffer buff = new StringBuffer();
1620     expr = MultiplicativeExpression();
1621    buff.append(expr);
1622     label_17:
1623     while (true) {
1624       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1625       case PLUS:
1626       case MINUS:
1627         ;
1628         break;
1629       default:
1630         jj_la1[44] = jj_gen;
1631         break label_17;
1632       }
1633       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1634       case PLUS:
1635         operator = jj_consume_token(PLUS);
1636         break;
1637       case MINUS:
1638         operator = jj_consume_token(MINUS);
1639         break;
1640       default:
1641         jj_la1[45] = jj_gen;
1642         jj_consume_token(-1);
1643         throw new ParseException();
1644       }
1645       expr = MultiplicativeExpression();
1646     buff.append(operator.image);
1647     buff.append(expr);
1648     }
1649    {if (true) return buff.toString();}
1650     throw new Error("Missing return statement in function");
1651   }
1652
1653   static final public String MultiplicativeExpression() throws ParseException {
1654   String expr;
1655   Token operator;
1656   final StringBuffer buff = new StringBuffer();
1657     try {
1658       expr = UnaryExpression();
1659     } catch (ParseException e) {
1660     errorMessage = "unexpected token '"+e.currentToken.next.image+"'";
1661     errorLevel   = ERROR;
1662     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
1663     errorEnd   = jj_input_stream.getPosition() + 1;
1664     {if (true) throw e;}
1665     }
1666    buff.append(expr);
1667     label_18:
1668     while (true) {
1669       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1670       case STAR:
1671       case SLASH:
1672       case REM:
1673         ;
1674         break;
1675       default:
1676         jj_la1[46] = jj_gen;
1677         break label_18;
1678       }
1679       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1680       case STAR:
1681         operator = jj_consume_token(STAR);
1682         break;
1683       case SLASH:
1684         operator = jj_consume_token(SLASH);
1685         break;
1686       case REM:
1687         operator = jj_consume_token(REM);
1688         break;
1689       default:
1690         jj_la1[47] = jj_gen;
1691         jj_consume_token(-1);
1692         throw new ParseException();
1693       }
1694       expr = UnaryExpression();
1695       buff.append(operator.image);
1696       buff.append(expr);
1697     }
1698    {if (true) return buff.toString();}
1699     throw new Error("Missing return statement in function");
1700   }
1701
1702 /**
1703  * An unary expression starting with @, & or nothing
1704  */
1705   static final public String UnaryExpression() throws ParseException {
1706   final String expr;
1707   final Token token;
1708   final StringBuffer buff = new StringBuffer();
1709     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1710     case BIT_AND:
1711       token = jj_consume_token(BIT_AND);
1712       expr = UnaryExpressionNoPrefix();
1713     if (token == null) {
1714       {if (true) return expr;}
1715     }
1716     {if (true) return token.image + expr;}
1717       break;
1718     case ARRAY:
1719     case NEW:
1720     case NULL:
1721     case TRUE:
1722     case FALSE:
1723     case INTEGER_LITERAL:
1724     case FLOATING_POINT_LITERAL:
1725     case STRING_LITERAL:
1726     case IDENTIFIER:
1727     case LPAREN:
1728     case AT:
1729     case DOLLAR:
1730     case BANG:
1731     case INCR:
1732     case DECR:
1733     case PLUS:
1734     case MINUS:
1735     case DOLLAR_ID:
1736       label_19:
1737       while (true) {
1738         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1739         case AT:
1740           ;
1741           break;
1742         default:
1743           jj_la1[48] = jj_gen;
1744           break label_19;
1745         }
1746         jj_consume_token(AT);
1747          buff.append("@");
1748       }
1749       expr = UnaryExpressionNoPrefix();
1750    {if (true) return buff.append(expr).toString();}
1751       break;
1752     default:
1753       jj_la1[49] = jj_gen;
1754       jj_consume_token(-1);
1755       throw new ParseException();
1756     }
1757     throw new Error("Missing return statement in function");
1758   }
1759
1760   static final public String UnaryExpressionNoPrefix() throws ParseException {
1761   final String expr;
1762   final Token token;
1763     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1764     case PLUS:
1765     case MINUS:
1766       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1767       case PLUS:
1768         token = jj_consume_token(PLUS);
1769         break;
1770       case MINUS:
1771         token = jj_consume_token(MINUS);
1772         break;
1773       default:
1774         jj_la1[50] = jj_gen;
1775         jj_consume_token(-1);
1776         throw new ParseException();
1777       }
1778       expr = UnaryExpression();
1779     {if (true) return token.image + expr;}
1780       break;
1781     case INCR:
1782     case DECR:
1783       expr = PreIncDecExpression();
1784    {if (true) return expr;}
1785       break;
1786     case ARRAY:
1787     case NEW:
1788     case NULL:
1789     case TRUE:
1790     case FALSE:
1791     case INTEGER_LITERAL:
1792     case FLOATING_POINT_LITERAL:
1793     case STRING_LITERAL:
1794     case IDENTIFIER:
1795     case LPAREN:
1796     case DOLLAR:
1797     case BANG:
1798     case DOLLAR_ID:
1799       expr = UnaryExpressionNotPlusMinus();
1800    {if (true) return expr;}
1801       break;
1802     default:
1803       jj_la1[51] = jj_gen;
1804       jj_consume_token(-1);
1805       throw new ParseException();
1806     }
1807     throw new Error("Missing return statement in function");
1808   }
1809
1810   static final public String PreIncDecExpression() throws ParseException {
1811 final String expr;
1812 final Token token;
1813     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1814     case INCR:
1815       token = jj_consume_token(INCR);
1816       break;
1817     case DECR:
1818       token = jj_consume_token(DECR);
1819       break;
1820     default:
1821       jj_la1[52] = jj_gen;
1822       jj_consume_token(-1);
1823       throw new ParseException();
1824     }
1825     expr = PrimaryExpression();
1826    {if (true) return token.image + expr;}
1827     throw new Error("Missing return statement in function");
1828   }
1829
1830   static final public String UnaryExpressionNotPlusMinus() throws ParseException {
1831   final String expr;
1832     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1833     case BANG:
1834       jj_consume_token(BANG);
1835       expr = UnaryExpression();
1836    {if (true) return "!" + expr;}
1837       break;
1838     default:
1839       jj_la1[53] = jj_gen;
1840       if (jj_2_4(2147483647)) {
1841         expr = CastExpression();
1842    {if (true) return expr;}
1843       } else {
1844         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1845         case ARRAY:
1846         case NEW:
1847         case IDENTIFIER:
1848         case DOLLAR:
1849         case DOLLAR_ID:
1850           expr = PostfixExpression();
1851    {if (true) return expr;}
1852           break;
1853         case NULL:
1854         case TRUE:
1855         case FALSE:
1856         case INTEGER_LITERAL:
1857         case FLOATING_POINT_LITERAL:
1858         case STRING_LITERAL:
1859           expr = Literal();
1860    {if (true) return expr;}
1861           break;
1862         case LPAREN:
1863           jj_consume_token(LPAREN);
1864           expr = Expression();
1865           try {
1866             jj_consume_token(RPAREN);
1867           } catch (ParseException e) {
1868     errorMessage = "')' expected";
1869     errorLevel   = ERROR;
1870     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
1871     errorEnd   = jj_input_stream.getPosition() + 1;
1872     {if (true) throw e;}
1873           }
1874    {if (true) return "("+expr+")";}
1875           break;
1876         default:
1877           jj_la1[54] = jj_gen;
1878           jj_consume_token(-1);
1879           throw new ParseException();
1880         }
1881       }
1882     }
1883     throw new Error("Missing return statement in function");
1884   }
1885
1886   static final public String CastExpression() throws ParseException {
1887 final String type, expr;
1888     jj_consume_token(LPAREN);
1889     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1890     case STRING:
1891     case OBJECT:
1892     case BOOL:
1893     case BOOLEAN:
1894     case REAL:
1895     case DOUBLE:
1896     case FLOAT:
1897     case INT:
1898     case INTEGER:
1899       type = Type();
1900       break;
1901     case ARRAY:
1902       jj_consume_token(ARRAY);
1903                                      type = "array";
1904       break;
1905     default:
1906       jj_la1[55] = jj_gen;
1907       jj_consume_token(-1);
1908       throw new ParseException();
1909     }
1910     jj_consume_token(RPAREN);
1911     expr = UnaryExpression();
1912    {if (true) return "(" + type + ")" + expr;}
1913     throw new Error("Missing return statement in function");
1914   }
1915
1916   static final public String PostfixExpression() throws ParseException {
1917   final String expr;
1918   Token operator = null;
1919     expr = PrimaryExpression();
1920     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1921     case INCR:
1922     case DECR:
1923       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1924       case INCR:
1925         operator = jj_consume_token(INCR);
1926         break;
1927       case DECR:
1928         operator = jj_consume_token(DECR);
1929         break;
1930       default:
1931         jj_la1[56] = jj_gen;
1932         jj_consume_token(-1);
1933         throw new ParseException();
1934       }
1935       break;
1936     default:
1937       jj_la1[57] = jj_gen;
1938       ;
1939     }
1940     if (operator == null) {
1941       {if (true) return expr;}
1942     }
1943     {if (true) return expr + operator.image;}
1944     throw new Error("Missing return statement in function");
1945   }
1946
1947   static final public String PrimaryExpression() throws ParseException {
1948   final Token identifier;
1949   String expr;
1950   final StringBuffer buff = new StringBuffer();
1951     if (jj_2_5(2)) {
1952       identifier = jj_consume_token(IDENTIFIER);
1953       jj_consume_token(STATICCLASSACCESS);
1954       expr = ClassIdentifier();
1955    buff.append(identifier.image).append("::").append(expr);
1956       label_20:
1957       while (true) {
1958         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1959         case CLASSACCESS:
1960         case LPAREN:
1961         case LBRACKET:
1962           ;
1963           break;
1964         default:
1965           jj_la1[58] = jj_gen;
1966           break label_20;
1967         }
1968         expr = PrimarySuffix();
1969    buff.append(expr);
1970       }
1971    {if (true) return buff.toString();}
1972     } else {
1973       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1974       case NEW:
1975       case IDENTIFIER:
1976       case DOLLAR:
1977       case DOLLAR_ID:
1978         expr = PrimaryPrefix();
1979                            buff.append(expr);
1980         label_21:
1981         while (true) {
1982           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
1983           case CLASSACCESS:
1984           case LPAREN:
1985           case LBRACKET:
1986             ;
1987             break;
1988           default:
1989             jj_la1[59] = jj_gen;
1990             break label_21;
1991           }
1992           expr = PrimarySuffix();
1993                              buff.append(expr);
1994         }
1995    {if (true) return buff.toString();}
1996         break;
1997       case ARRAY:
1998         expr = ArrayDeclarator();
1999    {if (true) return "array" + expr;}
2000         break;
2001       default:
2002         jj_la1[60] = jj_gen;
2003         jj_consume_token(-1);
2004         throw new ParseException();
2005       }
2006     }
2007     throw new Error("Missing return statement in function");
2008   }
2009
2010   static final public String ArrayDeclarator() throws ParseException {
2011   final String expr;
2012     jj_consume_token(ARRAY);
2013     expr = ArrayInitializer();
2014    {if (true) return "array" + expr;}
2015     throw new Error("Missing return statement in function");
2016   }
2017
2018   static final public String PrimaryPrefix() throws ParseException {
2019   final String expr;
2020   final Token token;
2021     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2022     case IDENTIFIER:
2023       token = jj_consume_token(IDENTIFIER);
2024    {if (true) return token.image;}
2025       break;
2026     case NEW:
2027       jj_consume_token(NEW);
2028       expr = ClassIdentifier();
2029     {if (true) return "new " + expr;}
2030       break;
2031     case DOLLAR:
2032     case DOLLAR_ID:
2033       expr = VariableDeclaratorId();
2034    {if (true) return expr;}
2035       break;
2036     default:
2037       jj_la1[61] = jj_gen;
2038       jj_consume_token(-1);
2039       throw new ParseException();
2040     }
2041     throw new Error("Missing return statement in function");
2042   }
2043
2044   static final public String classInstantiation() throws ParseException {
2045   String expr;
2046   final StringBuffer buff = new StringBuffer("new ");
2047     jj_consume_token(NEW);
2048     expr = ClassIdentifier();
2049    buff.append(expr);
2050     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2051     case ARRAY:
2052     case NEW:
2053     case IDENTIFIER:
2054     case DOLLAR:
2055     case DOLLAR_ID:
2056       expr = PrimaryExpression();
2057      buff.append(expr);
2058       break;
2059     default:
2060       jj_la1[62] = jj_gen;
2061       ;
2062     }
2063    {if (true) return buff.toString();}
2064     throw new Error("Missing return statement in function");
2065   }
2066
2067   static final public String ClassIdentifier() throws ParseException {
2068   final String expr;
2069   final Token token;
2070     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2071     case IDENTIFIER:
2072       token = jj_consume_token(IDENTIFIER);
2073    {if (true) return token.image;}
2074       break;
2075     case DOLLAR:
2076     case DOLLAR_ID:
2077       expr = VariableDeclaratorId();
2078    {if (true) return expr;}
2079       break;
2080     default:
2081       jj_la1[63] = jj_gen;
2082       jj_consume_token(-1);
2083       throw new ParseException();
2084     }
2085     throw new Error("Missing return statement in function");
2086   }
2087
2088   static final public String PrimarySuffix() throws ParseException {
2089   final String expr;
2090     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2091     case LPAREN:
2092       expr = Arguments();
2093    {if (true) return expr;}
2094       break;
2095     case CLASSACCESS:
2096     case LBRACKET:
2097       expr = VariableSuffix();
2098    {if (true) return expr;}
2099       break;
2100     default:
2101       jj_la1[64] = jj_gen;
2102       jj_consume_token(-1);
2103       throw new ParseException();
2104     }
2105     throw new Error("Missing return statement in function");
2106   }
2107
2108   static final public String VariableSuffix() throws ParseException {
2109   String expr = null;
2110     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2111     case CLASSACCESS:
2112       jj_consume_token(CLASSACCESS);
2113       try {
2114         expr = VariableName();
2115       } catch (ParseException e) {
2116     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function call or field access expected";
2117     errorLevel   = ERROR;
2118     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2119     errorEnd   = jj_input_stream.getPosition() + 1;
2120     {if (true) throw e;}
2121       }
2122    {if (true) return "->" + expr;}
2123       break;
2124     case LBRACKET:
2125       jj_consume_token(LBRACKET);
2126       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2127       case ARRAY:
2128       case LIST:
2129       case PRINT:
2130       case NEW:
2131       case NULL:
2132       case TRUE:
2133       case FALSE:
2134       case STRING:
2135       case OBJECT:
2136       case BOOL:
2137       case BOOLEAN:
2138       case REAL:
2139       case DOUBLE:
2140       case FLOAT:
2141       case INT:
2142       case INTEGER:
2143       case INTEGER_LITERAL:
2144       case FLOATING_POINT_LITERAL:
2145       case STRING_LITERAL:
2146       case IDENTIFIER:
2147       case LPAREN:
2148       case AT:
2149       case DOLLAR:
2150       case BANG:
2151       case INCR:
2152       case DECR:
2153       case PLUS:
2154       case MINUS:
2155       case BIT_AND:
2156       case DOLLAR_ID:
2157         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2158         case ARRAY:
2159         case LIST:
2160         case PRINT:
2161         case NEW:
2162         case NULL:
2163         case TRUE:
2164         case FALSE:
2165         case INTEGER_LITERAL:
2166         case FLOATING_POINT_LITERAL:
2167         case STRING_LITERAL:
2168         case IDENTIFIER:
2169         case LPAREN:
2170         case AT:
2171         case DOLLAR:
2172         case BANG:
2173         case INCR:
2174         case DECR:
2175         case PLUS:
2176         case MINUS:
2177         case BIT_AND:
2178         case DOLLAR_ID:
2179           expr = Expression();
2180           break;
2181         case STRING:
2182         case OBJECT:
2183         case BOOL:
2184         case BOOLEAN:
2185         case REAL:
2186         case DOUBLE:
2187         case FLOAT:
2188         case INT:
2189         case INTEGER:
2190           expr = Type();
2191           break;
2192         default:
2193           jj_la1[65] = jj_gen;
2194           jj_consume_token(-1);
2195           throw new ParseException();
2196         }
2197         break;
2198       default:
2199         jj_la1[66] = jj_gen;
2200         ;
2201       }
2202       try {
2203         jj_consume_token(RBRACKET);
2204       } catch (ParseException e) {
2205     errorMessage = "']' expected";
2206     errorLevel   = ERROR;
2207     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2208     errorEnd   = jj_input_stream.getPosition() + 1;
2209     {if (true) throw e;}
2210       }
2211     if(expr == null) {
2212       {if (true) return "[]";}
2213     }
2214     {if (true) return "[" + expr + "]";}
2215       break;
2216     default:
2217       jj_la1[67] = jj_gen;
2218       jj_consume_token(-1);
2219       throw new ParseException();
2220     }
2221     throw new Error("Missing return statement in function");
2222   }
2223
2224   static final public String Literal() throws ParseException {
2225   final String expr;
2226   final Token token;
2227     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2228     case INTEGER_LITERAL:
2229       token = jj_consume_token(INTEGER_LITERAL);
2230    {if (true) return token.image;}
2231       break;
2232     case FLOATING_POINT_LITERAL:
2233       token = jj_consume_token(FLOATING_POINT_LITERAL);
2234    {if (true) return token.image;}
2235       break;
2236     case STRING_LITERAL:
2237       token = jj_consume_token(STRING_LITERAL);
2238    {if (true) return token.image;}
2239       break;
2240     case TRUE:
2241     case FALSE:
2242       expr = BooleanLiteral();
2243    {if (true) return expr;}
2244       break;
2245     case NULL:
2246       jj_consume_token(NULL);
2247    {if (true) return "null";}
2248       break;
2249     default:
2250       jj_la1[68] = jj_gen;
2251       jj_consume_token(-1);
2252       throw new ParseException();
2253     }
2254     throw new Error("Missing return statement in function");
2255   }
2256
2257   static final public String BooleanLiteral() throws ParseException {
2258     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2259     case TRUE:
2260       jj_consume_token(TRUE);
2261    {if (true) return "true";}
2262       break;
2263     case FALSE:
2264       jj_consume_token(FALSE);
2265    {if (true) return "false";}
2266       break;
2267     default:
2268       jj_la1[69] = jj_gen;
2269       jj_consume_token(-1);
2270       throw new ParseException();
2271     }
2272     throw new Error("Missing return statement in function");
2273   }
2274
2275   static final public String Arguments() throws ParseException {
2276 String expr = null;
2277     jj_consume_token(LPAREN);
2278     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2279     case ARRAY:
2280     case LIST:
2281     case PRINT:
2282     case NEW:
2283     case NULL:
2284     case TRUE:
2285     case FALSE:
2286     case INTEGER_LITERAL:
2287     case FLOATING_POINT_LITERAL:
2288     case STRING_LITERAL:
2289     case IDENTIFIER:
2290     case LPAREN:
2291     case AT:
2292     case DOLLAR:
2293     case BANG:
2294     case INCR:
2295     case DECR:
2296     case PLUS:
2297     case MINUS:
2298     case BIT_AND:
2299     case DOLLAR_ID:
2300       expr = ArgumentList();
2301       break;
2302     default:
2303       jj_la1[70] = jj_gen;
2304       ;
2305     }
2306     try {
2307       jj_consume_token(RPAREN);
2308     } catch (ParseException e) {
2309     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected to close the argument list";
2310     errorLevel   = ERROR;
2311     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2312     errorEnd   = jj_input_stream.getPosition() + 1;
2313     {if (true) throw e;}
2314     }
2315   if (expr == null) {
2316     {if (true) return "()";}
2317   }
2318   {if (true) return "(" + expr + ")";}
2319     throw new Error("Missing return statement in function");
2320   }
2321
2322   static final public String ArgumentList() throws ParseException {
2323 String expr;
2324 final StringBuffer buff = new StringBuffer();
2325     expr = Expression();
2326    buff.append(expr);
2327     label_22:
2328     while (true) {
2329       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2330       case COMMA:
2331         ;
2332         break;
2333       default:
2334         jj_la1[71] = jj_gen;
2335         break label_22;
2336       }
2337       jj_consume_token(COMMA);
2338       try {
2339         expr = Expression();
2340       } catch (ParseException e) {
2341         errorMessage = "expression expected after a comma in argument list";
2342         errorLevel   = ERROR;
2343         errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2344         errorEnd   = jj_input_stream.getPosition() + 1;
2345         {if (true) throw e;}
2346       }
2347       buff.append(",").append(expr);
2348     }
2349     {if (true) return buff.toString();}
2350     throw new Error("Missing return statement in function");
2351   }
2352
2353 /**
2354  * A Statement without break
2355  */
2356   static final public void StatementNoBreak() throws ParseException {
2357     if (jj_2_6(2)) {
2358       Expression();
2359       try {
2360         jj_consume_token(SEMICOLON);
2361       } catch (ParseException e) {
2362     if (e.currentToken.next.kind != 4) {
2363       errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
2364       errorLevel   = ERROR;
2365       errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2366       errorEnd   = jj_input_stream.getPosition() + 1;
2367       {if (true) throw e;}
2368     }
2369       }
2370     } else if (jj_2_7(2)) {
2371       LabeledStatement();
2372     } else {
2373       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2374       case LBRACE:
2375         Block();
2376         break;
2377       case SEMICOLON:
2378         EmptyStatement();
2379         break;
2380       case ARRAY:
2381       case NEW:
2382       case IDENTIFIER:
2383       case DOLLAR:
2384       case INCR:
2385       case DECR:
2386       case DOLLAR_ID:
2387         StatementExpression();
2388         try {
2389           jj_consume_token(SEMICOLON);
2390         } catch (ParseException e) {
2391     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
2392     errorLevel   = ERROR;
2393     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2394     errorEnd   = jj_input_stream.getPosition() + 1;
2395     {if (true) throw e;}
2396         }
2397         break;
2398       case SWITCH:
2399         SwitchStatement();
2400         break;
2401       case IF:
2402         IfStatement();
2403         break;
2404       case WHILE:
2405         WhileStatement();
2406         break;
2407       case DO:
2408         DoStatement();
2409         break;
2410       case FOR:
2411         ForStatement();
2412         break;
2413       case FOREACH:
2414         ForeachStatement();
2415         break;
2416       case CONTINUE:
2417         ContinueStatement();
2418         break;
2419       case RETURN:
2420         ReturnStatement();
2421         break;
2422       case ECHO:
2423         EchoStatement();
2424         break;
2425       case INCLUDE:
2426       case REQUIRE:
2427       case INCLUDE_ONCE:
2428       case REQUIRE_ONCE:
2429       case AT:
2430         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2431         case AT:
2432           jj_consume_token(AT);
2433           break;
2434         default:
2435           jj_la1[72] = jj_gen;
2436           ;
2437         }
2438         IncludeStatement();
2439         break;
2440       case STATIC:
2441         StaticStatement();
2442         break;
2443       case GLOBAL:
2444         GlobalStatement();
2445         break;
2446       default:
2447         jj_la1[73] = jj_gen;
2448         jj_consume_token(-1);
2449         throw new ParseException();
2450       }
2451     }
2452   }
2453
2454 /**
2455  * A Normal statement
2456  */
2457   static final public void Statement() throws ParseException {
2458     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2459     case IF:
2460     case ARRAY:
2461     case LIST:
2462     case PRINT:
2463     case ECHO:
2464     case INCLUDE:
2465     case REQUIRE:
2466     case INCLUDE_ONCE:
2467     case REQUIRE_ONCE:
2468     case GLOBAL:
2469     case STATIC:
2470     case CONTINUE:
2471     case DO:
2472     case FOR:
2473     case NEW:
2474     case NULL:
2475     case RETURN:
2476     case SWITCH:
2477     case TRUE:
2478     case FALSE:
2479     case WHILE:
2480     case FOREACH:
2481     case INTEGER_LITERAL:
2482     case FLOATING_POINT_LITERAL:
2483     case STRING_LITERAL:
2484     case IDENTIFIER:
2485     case LPAREN:
2486     case LBRACE:
2487     case SEMICOLON:
2488     case AT:
2489     case DOLLAR:
2490     case BANG:
2491     case INCR:
2492     case DECR:
2493     case PLUS:
2494     case MINUS:
2495     case BIT_AND:
2496     case DOLLAR_ID:
2497       StatementNoBreak();
2498       break;
2499     case BREAK:
2500       BreakStatement();
2501       break;
2502     default:
2503       jj_la1[74] = jj_gen;
2504       jj_consume_token(-1);
2505       throw new ParseException();
2506     }
2507   }
2508
2509   static final public void htmlBlock() throws ParseException {
2510     jj_consume_token(PHPEND);
2511     label_23:
2512     while (true) {
2513       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2514       case PHPECHOSTART:
2515         ;
2516         break;
2517       default:
2518         jj_la1[75] = jj_gen;
2519         break label_23;
2520       }
2521       phpEchoBlock();
2522     }
2523     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2524     case PHPSTARTLONG:
2525       jj_consume_token(PHPSTARTLONG);
2526       break;
2527     case PHPSTARTSHORT:
2528       jj_consume_token(PHPSTARTSHORT);
2529       break;
2530     default:
2531       jj_la1[76] = jj_gen;
2532       jj_consume_token(-1);
2533       throw new ParseException();
2534     }
2535   }
2536
2537 /**
2538  * An include statement. It's "include" an expression;
2539  */
2540   static final public void IncludeStatement() throws ParseException {
2541   final String expr;
2542   final Token token;
2543   final int pos = jj_input_stream.getPosition();
2544     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2545     case REQUIRE:
2546       token = jj_consume_token(REQUIRE);
2547       break;
2548     case REQUIRE_ONCE:
2549       token = jj_consume_token(REQUIRE_ONCE);
2550       break;
2551     case INCLUDE:
2552       token = jj_consume_token(INCLUDE);
2553       break;
2554     case INCLUDE_ONCE:
2555       token = jj_consume_token(INCLUDE_ONCE);
2556       break;
2557     default:
2558       jj_la1[77] = jj_gen;
2559       jj_consume_token(-1);
2560       throw new ParseException();
2561     }
2562     expr = Expression();
2563     if (currentSegment != null) {
2564       currentSegment.add(new PHPReqIncDeclaration(currentSegment, token.image,pos,expr));
2565     }
2566     try {
2567       jj_consume_token(SEMICOLON);
2568     } catch (ParseException e) {
2569     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
2570     errorLevel   = ERROR;
2571     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2572     errorEnd   = jj_input_stream.getPosition() + 1;
2573     {if (true) throw e;}
2574     }
2575   }
2576
2577   static final public String PrintExpression() throws ParseException {
2578   final StringBuffer buff = new StringBuffer("print ");
2579   final String expr;
2580     jj_consume_token(PRINT);
2581     expr = Expression();
2582     buff.append(expr);
2583     {if (true) return buff.toString();}
2584     throw new Error("Missing return statement in function");
2585   }
2586
2587   static final public String ListExpression() throws ParseException {
2588   final StringBuffer buff = new StringBuffer("list(");
2589   String expr;
2590     jj_consume_token(LIST);
2591     try {
2592       jj_consume_token(LPAREN);
2593     } catch (ParseException e) {
2594     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected";
2595     errorLevel   = ERROR;
2596     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2597     errorEnd   = jj_input_stream.getPosition() + 1;
2598     {if (true) throw e;}
2599     }
2600     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2601     case DOLLAR:
2602     case DOLLAR_ID:
2603       expr = VariableDeclaratorId();
2604      buff.append(expr);
2605       break;
2606     default:
2607       jj_la1[78] = jj_gen;
2608       ;
2609     }
2610     label_24:
2611     while (true) {
2612       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2613       case COMMA:
2614         ;
2615         break;
2616       default:
2617         jj_la1[79] = jj_gen;
2618         break label_24;
2619       }
2620       try {
2621         jj_consume_token(COMMA);
2622       } catch (ParseException e) {
2623       errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ',' expected";
2624       errorLevel   = ERROR;
2625       errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2626       errorEnd   = jj_input_stream.getPosition() + 1;
2627       {if (true) throw e;}
2628       }
2629       expr = VariableDeclaratorId();
2630      buff.append(",").append(expr);
2631     }
2632    buff.append(")");
2633     try {
2634       jj_consume_token(RPAREN);
2635     } catch (ParseException e) {
2636     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected";
2637     errorLevel   = ERROR;
2638     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2639     errorEnd   = jj_input_stream.getPosition() + 1;
2640     {if (true) throw e;}
2641     }
2642     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2643     case ASSIGN:
2644       jj_consume_token(ASSIGN);
2645       expr = Expression();
2646                                   buff.append("(").append(expr);
2647       break;
2648     default:
2649       jj_la1[80] = jj_gen;
2650       ;
2651     }
2652    {if (true) return buff.toString();}
2653     throw new Error("Missing return statement in function");
2654   }
2655
2656 /**
2657  * An echo statement is like this : echo anyexpression (, otherexpression)*
2658  */
2659   static final public void EchoStatement() throws ParseException {
2660     jj_consume_token(ECHO);
2661     Expression();
2662     label_25:
2663     while (true) {
2664       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2665       case COMMA:
2666         ;
2667         break;
2668       default:
2669         jj_la1[81] = jj_gen;
2670         break label_25;
2671       }
2672       jj_consume_token(COMMA);
2673       Expression();
2674     }
2675     try {
2676       jj_consume_token(SEMICOLON);
2677     } catch (ParseException e) {
2678     if (e.currentToken.next.kind != 4) {
2679       errorMessage = "';' expected after 'echo' statement";
2680       errorLevel   = ERROR;
2681       errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2682       errorEnd   = jj_input_stream.getPosition() + 1;
2683       {if (true) throw e;}
2684     }
2685     }
2686   }
2687
2688   static final public void GlobalStatement() throws ParseException {
2689    final int pos = jj_input_stream.getPosition();
2690    String expr;
2691     jj_consume_token(GLOBAL);
2692     expr = VariableDeclaratorId();
2693      if (currentSegment != null) {
2694       currentSegment.add(new PHPGlobalDeclaration(currentSegment, "global",pos,expr));
2695     }
2696     label_26:
2697     while (true) {
2698       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2699       case COMMA:
2700         ;
2701         break;
2702       default:
2703         jj_la1[82] = jj_gen;
2704         break label_26;
2705       }
2706       jj_consume_token(COMMA);
2707       expr = VariableDeclaratorId();
2708      if (currentSegment != null) {
2709       currentSegment.add(new PHPGlobalDeclaration(currentSegment, "global",pos,expr));
2710     }
2711     }
2712     try {
2713       jj_consume_token(SEMICOLON);
2714     } catch (ParseException e) {
2715     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
2716     errorLevel   = ERROR;
2717     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2718     errorEnd   = jj_input_stream.getPosition() + 1;
2719     {if (true) throw e;}
2720     }
2721   }
2722
2723   static final public void StaticStatement() throws ParseException {
2724     jj_consume_token(STATIC);
2725     VariableDeclarator();
2726     label_27:
2727     while (true) {
2728       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2729       case COMMA:
2730         ;
2731         break;
2732       default:
2733         jj_la1[83] = jj_gen;
2734         break label_27;
2735       }
2736       jj_consume_token(COMMA);
2737       VariableDeclarator();
2738     }
2739     try {
2740       jj_consume_token(SEMICOLON);
2741     } catch (ParseException e) {
2742     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
2743     errorLevel   = ERROR;
2744     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2745     errorEnd   = jj_input_stream.getPosition() + 1;
2746     {if (true) throw e;}
2747     }
2748   }
2749
2750   static final public void LabeledStatement() throws ParseException {
2751     jj_consume_token(IDENTIFIER);
2752     jj_consume_token(COLON);
2753     Statement();
2754   }
2755
2756   static final public void Block() throws ParseException {
2757     try {
2758       jj_consume_token(LBRACE);
2759     } catch (ParseException e) {
2760     errorMessage = "'{' expected";
2761     errorLevel   = ERROR;
2762     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2763     errorEnd   = jj_input_stream.getPosition() + 1;
2764     {if (true) throw e;}
2765     }
2766     label_28:
2767     while (true) {
2768       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2769       case PHPEND:
2770       case CLASS:
2771       case FUNCTION:
2772       case IF:
2773       case ARRAY:
2774       case BREAK:
2775       case LIST:
2776       case PRINT:
2777       case ECHO:
2778       case INCLUDE:
2779       case REQUIRE:
2780       case INCLUDE_ONCE:
2781       case REQUIRE_ONCE:
2782       case GLOBAL:
2783       case STATIC:
2784       case CONTINUE:
2785       case DO:
2786       case FOR:
2787       case NEW:
2788       case NULL:
2789       case RETURN:
2790       case SWITCH:
2791       case TRUE:
2792       case FALSE:
2793       case WHILE:
2794       case FOREACH:
2795       case INTEGER_LITERAL:
2796       case FLOATING_POINT_LITERAL:
2797       case STRING_LITERAL:
2798       case IDENTIFIER:
2799       case LPAREN:
2800       case LBRACE:
2801       case SEMICOLON:
2802       case AT:
2803       case DOLLAR:
2804       case BANG:
2805       case INCR:
2806       case DECR:
2807       case PLUS:
2808       case MINUS:
2809       case BIT_AND:
2810       case DOLLAR_ID:
2811         ;
2812         break;
2813       default:
2814         jj_la1[84] = jj_gen;
2815         break label_28;
2816       }
2817       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2818       case CLASS:
2819       case FUNCTION:
2820       case IF:
2821       case ARRAY:
2822       case BREAK:
2823       case LIST:
2824       case PRINT:
2825       case ECHO:
2826       case INCLUDE:
2827       case REQUIRE:
2828       case INCLUDE_ONCE:
2829       case REQUIRE_ONCE:
2830       case GLOBAL:
2831       case STATIC:
2832       case CONTINUE:
2833       case DO:
2834       case FOR:
2835       case NEW:
2836       case NULL:
2837       case RETURN:
2838       case SWITCH:
2839       case TRUE:
2840       case FALSE:
2841       case WHILE:
2842       case FOREACH:
2843       case INTEGER_LITERAL:
2844       case FLOATING_POINT_LITERAL:
2845       case STRING_LITERAL:
2846       case IDENTIFIER:
2847       case LPAREN:
2848       case LBRACE:
2849       case SEMICOLON:
2850       case AT:
2851       case DOLLAR:
2852       case BANG:
2853       case INCR:
2854       case DECR:
2855       case PLUS:
2856       case MINUS:
2857       case BIT_AND:
2858       case DOLLAR_ID:
2859         BlockStatement();
2860         break;
2861       case PHPEND:
2862         htmlBlock();
2863         break;
2864       default:
2865         jj_la1[85] = jj_gen;
2866         jj_consume_token(-1);
2867         throw new ParseException();
2868       }
2869     }
2870     try {
2871       jj_consume_token(RBRACE);
2872     } catch (ParseException e) {
2873     errorMessage = "unexpected token : '"+ e.currentToken.image +"', '}' expected";
2874     errorLevel   = ERROR;
2875     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
2876     errorEnd   = jj_input_stream.getPosition() + 1;
2877     {if (true) throw e;}
2878     }
2879   }
2880
2881   static final public void BlockStatement() throws ParseException {
2882     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2883     case IF:
2884     case ARRAY:
2885     case BREAK:
2886     case LIST:
2887     case PRINT:
2888     case ECHO:
2889     case INCLUDE:
2890     case REQUIRE:
2891     case INCLUDE_ONCE:
2892     case REQUIRE_ONCE:
2893     case GLOBAL:
2894     case STATIC:
2895     case CONTINUE:
2896     case DO:
2897     case FOR:
2898     case NEW:
2899     case NULL:
2900     case RETURN:
2901     case SWITCH:
2902     case TRUE:
2903     case FALSE:
2904     case WHILE:
2905     case FOREACH:
2906     case INTEGER_LITERAL:
2907     case FLOATING_POINT_LITERAL:
2908     case STRING_LITERAL:
2909     case IDENTIFIER:
2910     case LPAREN:
2911     case LBRACE:
2912     case SEMICOLON:
2913     case AT:
2914     case DOLLAR:
2915     case BANG:
2916     case INCR:
2917     case DECR:
2918     case PLUS:
2919     case MINUS:
2920     case BIT_AND:
2921     case DOLLAR_ID:
2922       Statement();
2923       break;
2924     case CLASS:
2925       ClassDeclaration();
2926       break;
2927     case FUNCTION:
2928       MethodDeclaration();
2929       break;
2930     default:
2931       jj_la1[86] = jj_gen;
2932       jj_consume_token(-1);
2933       throw new ParseException();
2934     }
2935   }
2936
2937 /**
2938  * A Block statement that will not contain any 'break'
2939  */
2940   static final public void BlockStatementNoBreak() throws ParseException {
2941     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
2942     case IF:
2943     case ARRAY:
2944     case LIST:
2945     case PRINT:
2946     case ECHO:
2947     case INCLUDE:
2948     case REQUIRE:
2949     case INCLUDE_ONCE:
2950     case REQUIRE_ONCE:
2951     case GLOBAL:
2952     case STATIC:
2953     case CONTINUE:
2954     case DO:
2955     case FOR:
2956     case NEW:
2957     case NULL:
2958     case RETURN:
2959     case SWITCH:
2960     case TRUE:
2961     case FALSE:
2962     case WHILE:
2963     case FOREACH:
2964     case INTEGER_LITERAL:
2965     case FLOATING_POINT_LITERAL:
2966     case STRING_LITERAL:
2967     case IDENTIFIER:
2968     case LPAREN:
2969     case LBRACE:
2970     case SEMICOLON:
2971     case AT:
2972     case DOLLAR:
2973     case BANG:
2974     case INCR:
2975     case DECR:
2976     case PLUS:
2977     case MINUS:
2978     case BIT_AND:
2979     case DOLLAR_ID:
2980       StatementNoBreak();
2981       break;
2982     case CLASS:
2983       ClassDeclaration();
2984       break;
2985     case FUNCTION:
2986       MethodDeclaration();
2987       break;
2988     default:
2989       jj_la1[87] = jj_gen;
2990       jj_consume_token(-1);
2991       throw new ParseException();
2992     }
2993   }
2994
2995   static final public void LocalVariableDeclaration() throws ParseException {
2996     LocalVariableDeclarator();
2997     label_29:
2998     while (true) {
2999       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3000       case COMMA:
3001         ;
3002         break;
3003       default:
3004         jj_la1[88] = jj_gen;
3005         break label_29;
3006       }
3007       jj_consume_token(COMMA);
3008       LocalVariableDeclarator();
3009     }
3010   }
3011
3012   static final public void LocalVariableDeclarator() throws ParseException {
3013     VariableDeclaratorId();
3014     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3015     case ASSIGN:
3016       jj_consume_token(ASSIGN);
3017       Expression();
3018       break;
3019     default:
3020       jj_la1[89] = jj_gen;
3021       ;
3022     }
3023   }
3024
3025   static final public void EmptyStatement() throws ParseException {
3026     jj_consume_token(SEMICOLON);
3027   }
3028
3029   static final public void StatementExpression() throws ParseException {
3030     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3031     case INCR:
3032     case DECR:
3033       PreIncDecExpression();
3034       break;
3035     case ARRAY:
3036     case NEW:
3037     case IDENTIFIER:
3038     case DOLLAR:
3039     case DOLLAR_ID:
3040       PrimaryExpression();
3041       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3042       case ASSIGN:
3043       case PLUSASSIGN:
3044       case MINUSASSIGN:
3045       case STARASSIGN:
3046       case SLASHASSIGN:
3047       case ANDASSIGN:
3048       case ORASSIGN:
3049       case XORASSIGN:
3050       case DOTASSIGN:
3051       case REMASSIGN:
3052       case TILDEEQUAL:
3053       case INCR:
3054       case DECR:
3055       case LSHIFTASSIGN:
3056       case RSIGNEDSHIFTASSIGN:
3057         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3058         case INCR:
3059           jj_consume_token(INCR);
3060           break;
3061         case DECR:
3062           jj_consume_token(DECR);
3063           break;
3064         case ASSIGN:
3065         case PLUSASSIGN:
3066         case MINUSASSIGN:
3067         case STARASSIGN:
3068         case SLASHASSIGN:
3069         case ANDASSIGN:
3070         case ORASSIGN:
3071         case XORASSIGN:
3072         case DOTASSIGN:
3073         case REMASSIGN:
3074         case TILDEEQUAL:
3075         case LSHIFTASSIGN:
3076         case RSIGNEDSHIFTASSIGN:
3077           AssignmentOperator();
3078           Expression();
3079           break;
3080         default:
3081           jj_la1[90] = jj_gen;
3082           jj_consume_token(-1);
3083           throw new ParseException();
3084         }
3085         break;
3086       default:
3087         jj_la1[91] = jj_gen;
3088         ;
3089       }
3090       break;
3091     default:
3092       jj_la1[92] = jj_gen;
3093       jj_consume_token(-1);
3094       throw new ParseException();
3095     }
3096   }
3097
3098   static final public void SwitchStatement() throws ParseException {
3099   final int pos = jj_input_stream.getPosition();
3100     jj_consume_token(SWITCH);
3101     try {
3102       jj_consume_token(LPAREN);
3103     } catch (ParseException e) {
3104     errorMessage = "'(' expected after 'switch'";
3105     errorLevel   = ERROR;
3106     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3107     errorEnd   = jj_input_stream.getPosition() + 1;
3108     {if (true) throw e;}
3109     }
3110     try {
3111       Expression();
3112     } catch (ParseException e) {
3113     if (errorMessage != null) {
3114       {if (true) throw e;}
3115     }
3116     errorMessage = "expression expected";
3117     errorLevel   = ERROR;
3118     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3119     errorEnd   = jj_input_stream.getPosition() + 1;
3120     {if (true) throw e;}
3121     }
3122     try {
3123       jj_consume_token(RPAREN);
3124     } catch (ParseException e) {
3125     errorMessage = "')' expected";
3126     errorLevel   = ERROR;
3127     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3128     errorEnd   = jj_input_stream.getPosition() + 1;
3129     {if (true) throw e;}
3130     }
3131     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3132     case LBRACE:
3133       switchStatementBrace();
3134       break;
3135     case COLON:
3136       switchStatementColon(pos, pos + 6);
3137       break;
3138     default:
3139       jj_la1[93] = jj_gen;
3140       jj_consume_token(-1);
3141       throw new ParseException();
3142     }
3143   }
3144
3145   static final public void switchStatementBrace() throws ParseException {
3146     jj_consume_token(LBRACE);
3147     label_30:
3148     while (true) {
3149       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3150       case CASE:
3151       case _DEFAULT:
3152         ;
3153         break;
3154       default:
3155         jj_la1[94] = jj_gen;
3156         break label_30;
3157       }
3158       switchLabel0();
3159     }
3160     try {
3161       jj_consume_token(RBRACE);
3162     } catch (ParseException e) {
3163     errorMessage = "'}' expected";
3164     errorLevel   = ERROR;
3165     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3166     errorEnd   = jj_input_stream.getPosition() + 1;
3167     {if (true) throw e;}
3168     }
3169   }
3170
3171 /**
3172  * A Switch statement with : ... endswitch;
3173  * @param start the begin offset of the switch
3174  * @param end the end offset of the switch
3175  */
3176   static final public void switchStatementColon(final int start, final int end) throws ParseException {
3177     jj_consume_token(COLON);
3178    try {
3179   setMarker(fileToParse,
3180             "Ugly syntax detected, you should switch () {...} instead of switch (): ... enswitch;",
3181             start,
3182             end,
3183             INFO,
3184             "Line " + token.beginLine);
3185   } catch (CoreException e) {
3186     PHPeclipsePlugin.log(e);
3187   }
3188     label_31:
3189     while (true) {
3190       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3191       case CASE:
3192       case _DEFAULT:
3193         ;
3194         break;
3195       default:
3196         jj_la1[95] = jj_gen;
3197         break label_31;
3198       }
3199       switchLabel0();
3200     }
3201     try {
3202       jj_consume_token(ENDSWITCH);
3203     } catch (ParseException e) {
3204     errorMessage = "'endswitch' expected";
3205     errorLevel   = ERROR;
3206     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3207     errorEnd   = jj_input_stream.getPosition() + 1;
3208     {if (true) throw e;}
3209     }
3210     try {
3211       jj_consume_token(SEMICOLON);
3212     } catch (ParseException e) {
3213     errorMessage = "';' expected after 'endswitch' keyword";
3214     errorLevel   = ERROR;
3215     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3216     errorEnd   = jj_input_stream.getPosition() + 1;
3217     {if (true) throw e;}
3218     }
3219   }
3220
3221   static final public void switchLabel0() throws ParseException {
3222   Token breakToken = null;
3223   final int line;
3224     line = SwitchLabel();
3225     label_32:
3226     while (true) {
3227       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3228       case PHPEND:
3229       case CLASS:
3230       case FUNCTION:
3231       case IF:
3232       case ARRAY:
3233       case LIST:
3234       case PRINT:
3235       case ECHO:
3236       case INCLUDE:
3237       case REQUIRE:
3238       case INCLUDE_ONCE:
3239       case REQUIRE_ONCE:
3240       case GLOBAL:
3241       case STATIC:
3242       case CONTINUE:
3243       case DO:
3244       case FOR:
3245       case NEW:
3246       case NULL:
3247       case RETURN:
3248       case SWITCH:
3249       case TRUE:
3250       case FALSE:
3251       case WHILE:
3252       case FOREACH:
3253       case INTEGER_LITERAL:
3254       case FLOATING_POINT_LITERAL:
3255       case STRING_LITERAL:
3256       case IDENTIFIER:
3257       case LPAREN:
3258       case LBRACE:
3259       case SEMICOLON:
3260       case AT:
3261       case DOLLAR:
3262       case BANG:
3263       case INCR:
3264       case DECR:
3265       case PLUS:
3266       case MINUS:
3267       case BIT_AND:
3268       case DOLLAR_ID:
3269         ;
3270         break;
3271       default:
3272         jj_la1[96] = jj_gen;
3273         break label_32;
3274       }
3275       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3276       case CLASS:
3277       case FUNCTION:
3278       case IF:
3279       case ARRAY:
3280       case LIST:
3281       case PRINT:
3282       case ECHO:
3283       case INCLUDE:
3284       case REQUIRE:
3285       case INCLUDE_ONCE:
3286       case REQUIRE_ONCE:
3287       case GLOBAL:
3288       case STATIC:
3289       case CONTINUE:
3290       case DO:
3291       case FOR:
3292       case NEW:
3293       case NULL:
3294       case RETURN:
3295       case SWITCH:
3296       case TRUE:
3297       case FALSE:
3298       case WHILE:
3299       case FOREACH:
3300       case INTEGER_LITERAL:
3301       case FLOATING_POINT_LITERAL:
3302       case STRING_LITERAL:
3303       case IDENTIFIER:
3304       case LPAREN:
3305       case LBRACE:
3306       case SEMICOLON:
3307       case AT:
3308       case DOLLAR:
3309       case BANG:
3310       case INCR:
3311       case DECR:
3312       case PLUS:
3313       case MINUS:
3314       case BIT_AND:
3315       case DOLLAR_ID:
3316         BlockStatementNoBreak();
3317         break;
3318       case PHPEND:
3319         htmlBlock();
3320         break;
3321       default:
3322         jj_la1[97] = jj_gen;
3323         jj_consume_token(-1);
3324         throw new ParseException();
3325       }
3326     }
3327     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3328     case BREAK:
3329       breakToken = BreakStatement();
3330       break;
3331     default:
3332       jj_la1[98] = jj_gen;
3333       ;
3334     }
3335     try {
3336       if (breakToken == null) {
3337         setMarker(fileToParse,
3338                   "You should use put a 'break' at the end of your statement",
3339                   line,
3340                   INFO,
3341                   "Line " + line);
3342       }
3343     } catch (CoreException e) {
3344       PHPeclipsePlugin.log(e);
3345     }
3346   }
3347
3348   static final public Token BreakStatement() throws ParseException {
3349   final Token token;
3350     token = jj_consume_token(BREAK);
3351     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3352     case ARRAY:
3353     case LIST:
3354     case PRINT:
3355     case NEW:
3356     case NULL:
3357     case TRUE:
3358     case FALSE:
3359     case INTEGER_LITERAL:
3360     case FLOATING_POINT_LITERAL:
3361     case STRING_LITERAL:
3362     case IDENTIFIER:
3363     case LPAREN:
3364     case AT:
3365     case DOLLAR:
3366     case BANG:
3367     case INCR:
3368     case DECR:
3369     case PLUS:
3370     case MINUS:
3371     case BIT_AND:
3372     case DOLLAR_ID:
3373       Expression();
3374       break;
3375     default:
3376       jj_la1[99] = jj_gen;
3377       ;
3378     }
3379     try {
3380       jj_consume_token(SEMICOLON);
3381     } catch (ParseException e) {
3382     errorMessage = "';' expected after 'break' keyword";
3383     errorLevel   = ERROR;
3384     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3385     errorEnd   = jj_input_stream.getPosition() + 1;
3386     {if (true) throw e;}
3387     }
3388    {if (true) return token;}
3389     throw new Error("Missing return statement in function");
3390   }
3391
3392   static final public int SwitchLabel() throws ParseException {
3393   final Token token;
3394     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3395     case CASE:
3396       token = jj_consume_token(CASE);
3397       try {
3398         Expression();
3399       } catch (ParseException e) {
3400     if (errorMessage != null) {if (true) throw e;}
3401     errorMessage = "expression expected after 'case' keyword";
3402     errorLevel   = ERROR;
3403     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3404     errorEnd   = jj_input_stream.getPosition() + 1;
3405     {if (true) throw e;}
3406       }
3407       try {
3408         jj_consume_token(COLON);
3409       } catch (ParseException e) {
3410     errorMessage = "':' expected after case expression";
3411     errorLevel   = ERROR;
3412     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3413     errorEnd   = jj_input_stream.getPosition() + 1;
3414     {if (true) throw e;}
3415       }
3416    {if (true) return token.beginLine;}
3417       break;
3418     case _DEFAULT:
3419       token = jj_consume_token(_DEFAULT);
3420       try {
3421         jj_consume_token(COLON);
3422       } catch (ParseException e) {
3423     errorMessage = "':' expected after 'default' keyword";
3424     errorLevel   = ERROR;
3425     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3426     errorEnd   = jj_input_stream.getPosition() + 1;
3427     {if (true) throw e;}
3428       }
3429    {if (true) return token.beginLine;}
3430       break;
3431     default:
3432       jj_la1[100] = jj_gen;
3433       jj_consume_token(-1);
3434       throw new ParseException();
3435     }
3436     throw new Error("Missing return statement in function");
3437   }
3438
3439   static final public void IfStatement() throws ParseException {
3440   final Token token;
3441   final int pos = jj_input_stream.getPosition();
3442     token = jj_consume_token(IF);
3443     Condition("if");
3444     IfStatement0(pos,pos+token.image.length());
3445   }
3446
3447   static final public void Condition(final String keyword) throws ParseException {
3448     try {
3449       jj_consume_token(LPAREN);
3450     } catch (ParseException e) {
3451     errorMessage = "'(' expected after " + keyword + " keyword";
3452     errorLevel   = ERROR;
3453     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length();
3454     errorEnd   = errorStart +1;
3455     processParseException(e);
3456     }
3457     Expression();
3458     try {
3459       jj_consume_token(RPAREN);
3460     } catch (ParseException e) {
3461     errorMessage = "')' expected after " + keyword + " keyword";
3462     errorLevel   = ERROR;
3463     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3464     errorEnd   = jj_input_stream.getPosition() + 1;
3465     {if (true) throw e;}
3466     }
3467   }
3468
3469   static final public void IfStatement0(final int start,final int end) throws ParseException {
3470     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3471     case COLON:
3472       jj_consume_token(COLON);
3473       label_33:
3474       while (true) {
3475         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3476         case PHPEND:
3477         case IF:
3478         case ARRAY:
3479         case BREAK:
3480         case LIST:
3481         case PRINT:
3482         case ECHO:
3483         case INCLUDE:
3484         case REQUIRE:
3485         case INCLUDE_ONCE:
3486         case REQUIRE_ONCE:
3487         case GLOBAL:
3488         case STATIC:
3489         case CONTINUE:
3490         case DO:
3491         case FOR:
3492         case NEW:
3493         case NULL:
3494         case RETURN:
3495         case SWITCH:
3496         case TRUE:
3497         case FALSE:
3498         case WHILE:
3499         case FOREACH:
3500         case INTEGER_LITERAL:
3501         case FLOATING_POINT_LITERAL:
3502         case STRING_LITERAL:
3503         case IDENTIFIER:
3504         case LPAREN:
3505         case LBRACE:
3506         case SEMICOLON:
3507         case AT:
3508         case DOLLAR:
3509         case BANG:
3510         case INCR:
3511         case DECR:
3512         case PLUS:
3513         case MINUS:
3514         case BIT_AND:
3515         case DOLLAR_ID:
3516           ;
3517           break;
3518         default:
3519           jj_la1[101] = jj_gen;
3520           break label_33;
3521         }
3522         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3523         case IF:
3524         case ARRAY:
3525         case BREAK:
3526         case LIST:
3527         case PRINT:
3528         case ECHO:
3529         case INCLUDE:
3530         case REQUIRE:
3531         case INCLUDE_ONCE:
3532         case REQUIRE_ONCE:
3533         case GLOBAL:
3534         case STATIC:
3535         case CONTINUE:
3536         case DO:
3537         case FOR:
3538         case NEW:
3539         case NULL:
3540         case RETURN:
3541         case SWITCH:
3542         case TRUE:
3543         case FALSE:
3544         case WHILE:
3545         case FOREACH:
3546         case INTEGER_LITERAL:
3547         case FLOATING_POINT_LITERAL:
3548         case STRING_LITERAL:
3549         case IDENTIFIER:
3550         case LPAREN:
3551         case LBRACE:
3552         case SEMICOLON:
3553         case AT:
3554         case DOLLAR:
3555         case BANG:
3556         case INCR:
3557         case DECR:
3558         case PLUS:
3559         case MINUS:
3560         case BIT_AND:
3561         case DOLLAR_ID:
3562           Statement();
3563           break;
3564         case PHPEND:
3565           htmlBlock();
3566           break;
3567         default:
3568           jj_la1[102] = jj_gen;
3569           jj_consume_token(-1);
3570           throw new ParseException();
3571         }
3572       }
3573       label_34:
3574       while (true) {
3575         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3576         case ELSEIF:
3577           ;
3578           break;
3579         default:
3580           jj_la1[103] = jj_gen;
3581           break label_34;
3582         }
3583         ElseIfStatementColon();
3584       }
3585       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3586       case ELSE:
3587         ElseStatementColon();
3588         break;
3589       default:
3590         jj_la1[104] = jj_gen;
3591         ;
3592       }
3593    try {
3594   setMarker(fileToParse,
3595             "Ugly syntax detected, you should if () {...} instead of if (): ... endif;",
3596             start,
3597             end,
3598             INFO,
3599             "Line " + token.beginLine);
3600   } catch (CoreException e) {
3601     PHPeclipsePlugin.log(e);
3602   }
3603       try {
3604         jj_consume_token(ENDIF);
3605       } catch (ParseException e) {
3606     errorMessage = "'endif' expected";
3607     errorLevel   = ERROR;
3608     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3609     errorEnd   = jj_input_stream.getPosition() + 1;
3610     {if (true) throw e;}
3611       }
3612       try {
3613         jj_consume_token(SEMICOLON);
3614       } catch (ParseException e) {
3615     errorMessage = "';' expected after 'endif' keyword";
3616     errorLevel   = ERROR;
3617     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3618     errorEnd   = jj_input_stream.getPosition() + 1;
3619     {if (true) throw e;}
3620       }
3621       break;
3622     case PHPEND:
3623     case IF:
3624     case ARRAY:
3625     case BREAK:
3626     case LIST:
3627     case PRINT:
3628     case ECHO:
3629     case INCLUDE:
3630     case REQUIRE:
3631     case INCLUDE_ONCE:
3632     case REQUIRE_ONCE:
3633     case GLOBAL:
3634     case STATIC:
3635     case CONTINUE:
3636     case DO:
3637     case FOR:
3638     case NEW:
3639     case NULL:
3640     case RETURN:
3641     case SWITCH:
3642     case TRUE:
3643     case FALSE:
3644     case WHILE:
3645     case FOREACH:
3646     case INTEGER_LITERAL:
3647     case FLOATING_POINT_LITERAL:
3648     case STRING_LITERAL:
3649     case IDENTIFIER:
3650     case LPAREN:
3651     case LBRACE:
3652     case SEMICOLON:
3653     case AT:
3654     case DOLLAR:
3655     case BANG:
3656     case INCR:
3657     case DECR:
3658     case PLUS:
3659     case MINUS:
3660     case BIT_AND:
3661     case DOLLAR_ID:
3662       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3663       case IF:
3664       case ARRAY:
3665       case BREAK:
3666       case LIST:
3667       case PRINT:
3668       case ECHO:
3669       case INCLUDE:
3670       case REQUIRE:
3671       case INCLUDE_ONCE:
3672       case REQUIRE_ONCE:
3673       case GLOBAL:
3674       case STATIC:
3675       case CONTINUE:
3676       case DO:
3677       case FOR:
3678       case NEW:
3679       case NULL:
3680       case RETURN:
3681       case SWITCH:
3682       case TRUE:
3683       case FALSE:
3684       case WHILE:
3685       case FOREACH:
3686       case INTEGER_LITERAL:
3687       case FLOATING_POINT_LITERAL:
3688       case STRING_LITERAL:
3689       case IDENTIFIER:
3690       case LPAREN:
3691       case LBRACE:
3692       case SEMICOLON:
3693       case AT:
3694       case DOLLAR:
3695       case BANG:
3696       case INCR:
3697       case DECR:
3698       case PLUS:
3699       case MINUS:
3700       case BIT_AND:
3701       case DOLLAR_ID:
3702         Statement();
3703         break;
3704       case PHPEND:
3705         htmlBlock();
3706         break;
3707       default:
3708         jj_la1[105] = jj_gen;
3709         jj_consume_token(-1);
3710         throw new ParseException();
3711       }
3712       label_35:
3713       while (true) {
3714         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3715         case ELSEIF:
3716           ;
3717           break;
3718         default:
3719           jj_la1[106] = jj_gen;
3720           break label_35;
3721         }
3722         ElseIfStatement();
3723       }
3724       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3725       case ELSE:
3726         jj_consume_token(ELSE);
3727         try {
3728           Statement();
3729         } catch (ParseException e) {
3730       if (errorMessage != null) {
3731         {if (true) throw e;}
3732       }
3733       errorMessage = "unexpected token '"+e.currentToken.next.image+"', a statement was expected";
3734       errorLevel   = ERROR;
3735       errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
3736       errorEnd   = jj_input_stream.getPosition() + 1;
3737       {if (true) throw e;}
3738         }
3739         break;
3740       default:
3741         jj_la1[107] = jj_gen;
3742         ;
3743       }
3744       break;
3745     default:
3746       jj_la1[108] = jj_gen;
3747       jj_consume_token(-1);
3748       throw new ParseException();
3749     }
3750   }
3751
3752   static final public void ElseIfStatementColon() throws ParseException {
3753     jj_consume_token(ELSEIF);
3754     Condition("elseif");
3755     jj_consume_token(COLON);
3756     label_36:
3757     while (true) {
3758       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3759       case PHPEND:
3760       case IF:
3761       case ARRAY:
3762       case BREAK:
3763       case LIST:
3764       case PRINT:
3765       case ECHO:
3766       case INCLUDE:
3767       case REQUIRE:
3768       case INCLUDE_ONCE:
3769       case REQUIRE_ONCE:
3770       case GLOBAL:
3771       case STATIC:
3772       case CONTINUE:
3773       case DO:
3774       case FOR:
3775       case NEW:
3776       case NULL:
3777       case RETURN:
3778       case SWITCH:
3779       case TRUE:
3780       case FALSE:
3781       case WHILE:
3782       case FOREACH:
3783       case INTEGER_LITERAL:
3784       case FLOATING_POINT_LITERAL:
3785       case STRING_LITERAL:
3786       case IDENTIFIER:
3787       case LPAREN:
3788       case LBRACE:
3789       case SEMICOLON:
3790       case AT:
3791       case DOLLAR:
3792       case BANG:
3793       case INCR:
3794       case DECR:
3795       case PLUS:
3796       case MINUS:
3797       case BIT_AND:
3798       case DOLLAR_ID:
3799         ;
3800         break;
3801       default:
3802         jj_la1[109] = jj_gen;
3803         break label_36;
3804       }
3805       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3806       case IF:
3807       case ARRAY:
3808       case BREAK:
3809       case LIST:
3810       case PRINT:
3811       case ECHO:
3812       case INCLUDE:
3813       case REQUIRE:
3814       case INCLUDE_ONCE:
3815       case REQUIRE_ONCE:
3816       case GLOBAL:
3817       case STATIC:
3818       case CONTINUE:
3819       case DO:
3820       case FOR:
3821       case NEW:
3822       case NULL:
3823       case RETURN:
3824       case SWITCH:
3825       case TRUE:
3826       case FALSE:
3827       case WHILE:
3828       case FOREACH:
3829       case INTEGER_LITERAL:
3830       case FLOATING_POINT_LITERAL:
3831       case STRING_LITERAL:
3832       case IDENTIFIER:
3833       case LPAREN:
3834       case LBRACE:
3835       case SEMICOLON:
3836       case AT:
3837       case DOLLAR:
3838       case BANG:
3839       case INCR:
3840       case DECR:
3841       case PLUS:
3842       case MINUS:
3843       case BIT_AND:
3844       case DOLLAR_ID:
3845         Statement();
3846         break;
3847       case PHPEND:
3848         htmlBlock();
3849         break;
3850       default:
3851         jj_la1[110] = jj_gen;
3852         jj_consume_token(-1);
3853         throw new ParseException();
3854       }
3855     }
3856   }
3857
3858   static final public void ElseStatementColon() throws ParseException {
3859     jj_consume_token(ELSE);
3860     jj_consume_token(COLON);
3861     label_37:
3862     while (true) {
3863       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3864       case PHPEND:
3865       case IF:
3866       case ARRAY:
3867       case BREAK:
3868       case LIST:
3869       case PRINT:
3870       case ECHO:
3871       case INCLUDE:
3872       case REQUIRE:
3873       case INCLUDE_ONCE:
3874       case REQUIRE_ONCE:
3875       case GLOBAL:
3876       case STATIC:
3877       case CONTINUE:
3878       case DO:
3879       case FOR:
3880       case NEW:
3881       case NULL:
3882       case RETURN:
3883       case SWITCH:
3884       case TRUE:
3885       case FALSE:
3886       case WHILE:
3887       case FOREACH:
3888       case INTEGER_LITERAL:
3889       case FLOATING_POINT_LITERAL:
3890       case STRING_LITERAL:
3891       case IDENTIFIER:
3892       case LPAREN:
3893       case LBRACE:
3894       case SEMICOLON:
3895       case AT:
3896       case DOLLAR:
3897       case BANG:
3898       case INCR:
3899       case DECR:
3900       case PLUS:
3901       case MINUS:
3902       case BIT_AND:
3903       case DOLLAR_ID:
3904         ;
3905         break;
3906       default:
3907         jj_la1[111] = jj_gen;
3908         break label_37;
3909       }
3910       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3911       case IF:
3912       case ARRAY:
3913       case BREAK:
3914       case LIST:
3915       case PRINT:
3916       case ECHO:
3917       case INCLUDE:
3918       case REQUIRE:
3919       case INCLUDE_ONCE:
3920       case REQUIRE_ONCE:
3921       case GLOBAL:
3922       case STATIC:
3923       case CONTINUE:
3924       case DO:
3925       case FOR:
3926       case NEW:
3927       case NULL:
3928       case RETURN:
3929       case SWITCH:
3930       case TRUE:
3931       case FALSE:
3932       case WHILE:
3933       case FOREACH:
3934       case INTEGER_LITERAL:
3935       case FLOATING_POINT_LITERAL:
3936       case STRING_LITERAL:
3937       case IDENTIFIER:
3938       case LPAREN:
3939       case LBRACE:
3940       case SEMICOLON:
3941       case AT:
3942       case DOLLAR:
3943       case BANG:
3944       case INCR:
3945       case DECR:
3946       case PLUS:
3947       case MINUS:
3948       case BIT_AND:
3949       case DOLLAR_ID:
3950         Statement();
3951         break;
3952       case PHPEND:
3953         htmlBlock();
3954         break;
3955       default:
3956         jj_la1[112] = jj_gen;
3957         jj_consume_token(-1);
3958         throw new ParseException();
3959       }
3960     }
3961   }
3962
3963   static final public void ElseIfStatement() throws ParseException {
3964     jj_consume_token(ELSEIF);
3965     Condition("elseif");
3966     Statement();
3967   }
3968
3969   static final public void WhileStatement() throws ParseException {
3970   final Token token;
3971   final int pos = jj_input_stream.getPosition();
3972     token = jj_consume_token(WHILE);
3973     Condition("while");
3974     WhileStatement0(pos,pos + token.image.length());
3975   }
3976
3977   static final public void WhileStatement0(final int start, final int end) throws ParseException {
3978     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3979     case COLON:
3980       jj_consume_token(COLON);
3981       label_38:
3982       while (true) {
3983         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
3984         case IF:
3985         case ARRAY:
3986         case BREAK:
3987         case LIST:
3988         case PRINT:
3989         case ECHO:
3990         case INCLUDE:
3991         case REQUIRE:
3992         case INCLUDE_ONCE:
3993         case REQUIRE_ONCE:
3994         case GLOBAL:
3995         case STATIC:
3996         case CONTINUE:
3997         case DO:
3998         case FOR:
3999         case NEW:
4000         case NULL:
4001         case RETURN:
4002         case SWITCH:
4003         case TRUE:
4004         case FALSE:
4005         case WHILE:
4006         case FOREACH:
4007         case INTEGER_LITERAL:
4008         case FLOATING_POINT_LITERAL:
4009         case STRING_LITERAL:
4010         case IDENTIFIER:
4011         case LPAREN:
4012         case LBRACE:
4013         case SEMICOLON:
4014         case AT:
4015         case DOLLAR:
4016         case BANG:
4017         case INCR:
4018         case DECR:
4019         case PLUS:
4020         case MINUS:
4021         case BIT_AND:
4022         case DOLLAR_ID:
4023           ;
4024           break;
4025         default:
4026           jj_la1[113] = jj_gen;
4027           break label_38;
4028         }
4029         Statement();
4030       }
4031    try {
4032   setMarker(fileToParse,
4033             "Ugly syntax detected, you should while () {...} instead of while (): ... endwhile;",
4034             start,
4035             end,
4036             INFO,
4037             "Line " + token.beginLine);
4038   } catch (CoreException e) {
4039     PHPeclipsePlugin.log(e);
4040   }
4041       try {
4042         jj_consume_token(ENDWHILE);
4043       } catch (ParseException e) {
4044     errorMessage = "'endwhile' expected";
4045     errorLevel   = ERROR;
4046     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4047     errorEnd   = jj_input_stream.getPosition() + 1;
4048     {if (true) throw e;}
4049       }
4050       try {
4051         jj_consume_token(SEMICOLON);
4052       } catch (ParseException e) {
4053     errorMessage = "';' expected after 'endwhile' keyword";
4054     errorLevel   = ERROR;
4055     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4056     errorEnd   = jj_input_stream.getPosition() + 1;
4057     {if (true) throw e;}
4058       }
4059       break;
4060     case IF:
4061     case ARRAY:
4062     case BREAK:
4063     case LIST:
4064     case PRINT:
4065     case ECHO:
4066     case INCLUDE:
4067     case REQUIRE:
4068     case INCLUDE_ONCE:
4069     case REQUIRE_ONCE:
4070     case GLOBAL:
4071     case STATIC:
4072     case CONTINUE:
4073     case DO:
4074     case FOR:
4075     case NEW:
4076     case NULL:
4077     case RETURN:
4078     case SWITCH:
4079     case TRUE:
4080     case FALSE:
4081     case WHILE:
4082     case FOREACH:
4083     case INTEGER_LITERAL:
4084     case FLOATING_POINT_LITERAL:
4085     case STRING_LITERAL:
4086     case IDENTIFIER:
4087     case LPAREN:
4088     case LBRACE:
4089     case SEMICOLON:
4090     case AT:
4091     case DOLLAR:
4092     case BANG:
4093     case INCR:
4094     case DECR:
4095     case PLUS:
4096     case MINUS:
4097     case BIT_AND:
4098     case DOLLAR_ID:
4099       Statement();
4100       break;
4101     default:
4102       jj_la1[114] = jj_gen;
4103       jj_consume_token(-1);
4104       throw new ParseException();
4105     }
4106   }
4107
4108   static final public void DoStatement() throws ParseException {
4109     jj_consume_token(DO);
4110     Statement();
4111     jj_consume_token(WHILE);
4112     Condition("while");
4113     try {
4114       jj_consume_token(SEMICOLON);
4115     } catch (ParseException e) {
4116     errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
4117     errorLevel   = ERROR;
4118     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4119     errorEnd   = jj_input_stream.getPosition() + 1;
4120     {if (true) throw e;}
4121     }
4122   }
4123
4124   static final public void ForeachStatement() throws ParseException {
4125     jj_consume_token(FOREACH);
4126     try {
4127       jj_consume_token(LPAREN);
4128     } catch (ParseException e) {
4129     errorMessage = "'(' expected after 'foreach' keyword";
4130     errorLevel   = ERROR;
4131     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4132     errorEnd   = jj_input_stream.getPosition() + 1;
4133     {if (true) throw e;}
4134     }
4135     try {
4136       Variable();
4137     } catch (ParseException e) {
4138     errorMessage = "variable expected";
4139     errorLevel   = ERROR;
4140     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4141     errorEnd   = jj_input_stream.getPosition() + 1;
4142     {if (true) throw e;}
4143     }
4144     label_39:
4145     while (true) {
4146       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4147       case CLASSACCESS:
4148       case LBRACKET:
4149         ;
4150         break;
4151       default:
4152         jj_la1[115] = jj_gen;
4153         break label_39;
4154       }
4155       VariableSuffix();
4156     }
4157     try {
4158       jj_consume_token(AS);
4159     } catch (ParseException e) {
4160     errorMessage = "'as' expected";
4161     errorLevel   = ERROR;
4162     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4163     errorEnd   = jj_input_stream.getPosition() + 1;
4164     {if (true) throw e;}
4165     }
4166     try {
4167       Variable();
4168     } catch (ParseException e) {
4169     errorMessage = "variable expected";
4170     errorLevel   = ERROR;
4171     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4172     errorEnd   = jj_input_stream.getPosition() + 1;
4173     {if (true) throw e;}
4174     }
4175     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4176     case ARRAYASSIGN:
4177       jj_consume_token(ARRAYASSIGN);
4178       Expression();
4179       break;
4180     default:
4181       jj_la1[116] = jj_gen;
4182       ;
4183     }
4184     try {
4185       jj_consume_token(RPAREN);
4186     } catch (ParseException e) {
4187     errorMessage = "')' expected after 'foreach' keyword";
4188     errorLevel   = ERROR;
4189     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4190     errorEnd   = jj_input_stream.getPosition() + 1;
4191     {if (true) throw e;}
4192     }
4193     try {
4194       Statement();
4195     } catch (ParseException e) {
4196     if (errorMessage != null) {if (true) throw e;}
4197     errorMessage = "statement expected";
4198     errorLevel   = ERROR;
4199     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4200     errorEnd   = jj_input_stream.getPosition() + 1;
4201     {if (true) throw e;}
4202     }
4203   }
4204
4205   static final public void ForStatement() throws ParseException {
4206 final Token token;
4207 final int pos = jj_input_stream.getPosition();
4208     token = jj_consume_token(FOR);
4209     try {
4210       jj_consume_token(LPAREN);
4211     } catch (ParseException e) {
4212     errorMessage = "'(' expected after 'for' keyword";
4213     errorLevel   = ERROR;
4214     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4215     errorEnd   = jj_input_stream.getPosition() + 1;
4216     {if (true) throw e;}
4217     }
4218     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4219     case ARRAY:
4220     case NEW:
4221     case IDENTIFIER:
4222     case DOLLAR:
4223     case INCR:
4224     case DECR:
4225     case DOLLAR_ID:
4226       ForInit();
4227       break;
4228     default:
4229       jj_la1[117] = jj_gen;
4230       ;
4231     }
4232     jj_consume_token(SEMICOLON);
4233     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4234     case ARRAY:
4235     case LIST:
4236     case PRINT:
4237     case NEW:
4238     case NULL:
4239     case TRUE:
4240     case FALSE:
4241     case INTEGER_LITERAL:
4242     case FLOATING_POINT_LITERAL:
4243     case STRING_LITERAL:
4244     case IDENTIFIER:
4245     case LPAREN:
4246     case AT:
4247     case DOLLAR:
4248     case BANG:
4249     case INCR:
4250     case DECR:
4251     case PLUS:
4252     case MINUS:
4253     case BIT_AND:
4254     case DOLLAR_ID:
4255       Expression();
4256       break;
4257     default:
4258       jj_la1[118] = jj_gen;
4259       ;
4260     }
4261     jj_consume_token(SEMICOLON);
4262     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4263     case ARRAY:
4264     case NEW:
4265     case IDENTIFIER:
4266     case DOLLAR:
4267     case INCR:
4268     case DECR:
4269     case DOLLAR_ID:
4270       StatementExpressionList();
4271       break;
4272     default:
4273       jj_la1[119] = jj_gen;
4274       ;
4275     }
4276     jj_consume_token(RPAREN);
4277     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4278     case IF:
4279     case ARRAY:
4280     case BREAK:
4281     case LIST:
4282     case PRINT:
4283     case ECHO:
4284     case INCLUDE:
4285     case REQUIRE:
4286     case INCLUDE_ONCE:
4287     case REQUIRE_ONCE:
4288     case GLOBAL:
4289     case STATIC:
4290     case CONTINUE:
4291     case DO:
4292     case FOR:
4293     case NEW:
4294     case NULL:
4295     case RETURN:
4296     case SWITCH:
4297     case TRUE:
4298     case FALSE:
4299     case WHILE:
4300     case FOREACH:
4301     case INTEGER_LITERAL:
4302     case FLOATING_POINT_LITERAL:
4303     case STRING_LITERAL:
4304     case IDENTIFIER:
4305     case LPAREN:
4306     case LBRACE:
4307     case SEMICOLON:
4308     case AT:
4309     case DOLLAR:
4310     case BANG:
4311     case INCR:
4312     case DECR:
4313     case PLUS:
4314     case MINUS:
4315     case BIT_AND:
4316     case DOLLAR_ID:
4317       Statement();
4318       break;
4319     case COLON:
4320       jj_consume_token(COLON);
4321       label_40:
4322       while (true) {
4323         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4324         case IF:
4325         case ARRAY:
4326         case BREAK:
4327         case LIST:
4328         case PRINT:
4329         case ECHO:
4330         case INCLUDE:
4331         case REQUIRE:
4332         case INCLUDE_ONCE:
4333         case REQUIRE_ONCE:
4334         case GLOBAL:
4335         case STATIC:
4336         case CONTINUE:
4337         case DO:
4338         case FOR:
4339         case NEW:
4340         case NULL:
4341         case RETURN:
4342         case SWITCH:
4343         case TRUE:
4344         case FALSE:
4345         case WHILE:
4346         case FOREACH:
4347         case INTEGER_LITERAL:
4348         case FLOATING_POINT_LITERAL:
4349         case STRING_LITERAL:
4350         case IDENTIFIER:
4351         case LPAREN:
4352         case LBRACE:
4353         case SEMICOLON:
4354         case AT:
4355         case DOLLAR:
4356         case BANG:
4357         case INCR:
4358         case DECR:
4359         case PLUS:
4360         case MINUS:
4361         case BIT_AND:
4362         case DOLLAR_ID:
4363           ;
4364           break;
4365         default:
4366           jj_la1[120] = jj_gen;
4367           break label_40;
4368         }
4369         Statement();
4370       }
4371         try {
4372         setMarker(fileToParse,
4373                   "Ugly syntax detected, you should for () {...} instead of for (): ... endfor;",
4374                   pos,
4375                   pos+token.image.length(),
4376                   INFO,
4377                   "Line " + token.beginLine);
4378         } catch (CoreException e) {
4379           PHPeclipsePlugin.log(e);
4380         }
4381       try {
4382         jj_consume_token(ENDFOR);
4383       } catch (ParseException e) {
4384         errorMessage = "'endfor' expected";
4385         errorLevel   = ERROR;
4386         errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4387         errorEnd   = jj_input_stream.getPosition() + 1;
4388         {if (true) throw e;}
4389       }
4390       try {
4391         jj_consume_token(SEMICOLON);
4392       } catch (ParseException e) {
4393         errorMessage = "';' expected after 'endfor' keyword";
4394         errorLevel   = ERROR;
4395         errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4396         errorEnd   = jj_input_stream.getPosition() + 1;
4397         {if (true) throw e;}
4398       }
4399       break;
4400     default:
4401       jj_la1[121] = jj_gen;
4402       jj_consume_token(-1);
4403       throw new ParseException();
4404     }
4405   }
4406
4407   static final public void ForInit() throws ParseException {
4408     if (jj_2_8(2147483647)) {
4409       LocalVariableDeclaration();
4410     } else {
4411       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4412       case ARRAY:
4413       case NEW:
4414       case IDENTIFIER:
4415       case DOLLAR:
4416       case INCR:
4417       case DECR:
4418       case DOLLAR_ID:
4419         StatementExpressionList();
4420         break;
4421       default:
4422         jj_la1[122] = jj_gen;
4423         jj_consume_token(-1);
4424         throw new ParseException();
4425       }
4426     }
4427   }
4428
4429   static final public void StatementExpressionList() throws ParseException {
4430     StatementExpression();
4431     label_41:
4432     while (true) {
4433       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4434       case COMMA:
4435         ;
4436         break;
4437       default:
4438         jj_la1[123] = jj_gen;
4439         break label_41;
4440       }
4441       jj_consume_token(COMMA);
4442       StatementExpression();
4443     }
4444   }
4445
4446   static final public void ContinueStatement() throws ParseException {
4447     jj_consume_token(CONTINUE);
4448     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4449     case ARRAY:
4450     case LIST:
4451     case PRINT:
4452     case NEW:
4453     case NULL:
4454     case TRUE:
4455     case FALSE:
4456     case INTEGER_LITERAL:
4457     case FLOATING_POINT_LITERAL:
4458     case STRING_LITERAL:
4459     case IDENTIFIER:
4460     case LPAREN:
4461     case AT:
4462     case DOLLAR:
4463     case BANG:
4464     case INCR:
4465     case DECR:
4466     case PLUS:
4467     case MINUS:
4468     case BIT_AND:
4469     case DOLLAR_ID:
4470       Expression();
4471       break;
4472     default:
4473       jj_la1[124] = jj_gen;
4474       ;
4475     }
4476     try {
4477       jj_consume_token(SEMICOLON);
4478     } catch (ParseException e) {
4479     errorMessage = "';' expected after 'continue' statement";
4480     errorLevel   = ERROR;
4481     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4482     errorEnd   = jj_input_stream.getPosition() + 1;
4483     {if (true) throw e;}
4484     }
4485   }
4486
4487   static final public void ReturnStatement() throws ParseException {
4488     jj_consume_token(RETURN);
4489     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
4490     case ARRAY:
4491     case LIST:
4492     case PRINT:
4493     case NEW:
4494     case NULL:
4495     case TRUE:
4496     case FALSE:
4497     case INTEGER_LITERAL:
4498     case FLOATING_POINT_LITERAL:
4499     case STRING_LITERAL:
4500     case IDENTIFIER:
4501     case LPAREN:
4502     case AT:
4503     case DOLLAR:
4504     case BANG:
4505     case INCR:
4506     case DECR:
4507     case PLUS:
4508     case MINUS:
4509     case BIT_AND:
4510     case DOLLAR_ID:
4511       Expression();
4512       break;
4513     default:
4514       jj_la1[125] = jj_gen;
4515       ;
4516     }
4517     try {
4518       jj_consume_token(SEMICOLON);
4519     } catch (ParseException e) {
4520     errorMessage = "';' expected after 'return' statement";
4521     errorLevel   = ERROR;
4522     errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
4523     errorEnd   = jj_input_stream.getPosition() + 1;
4524     {if (true) throw e;}
4525     }
4526   }
4527
4528   static final private boolean jj_2_1(int xla) {
4529     jj_la = xla; jj_lastpos = jj_scanpos = token;
4530     boolean retval = !jj_3_1();
4531     jj_save(0, xla);
4532     return retval;
4533   }
4534
4535   static final private boolean jj_2_2(int xla) {
4536     jj_la = xla; jj_lastpos = jj_scanpos = token;
4537     boolean retval = !jj_3_2();
4538     jj_save(1, xla);
4539     return retval;
4540   }
4541
4542   static final private boolean jj_2_3(int xla) {
4543     jj_la = xla; jj_lastpos = jj_scanpos = token;
4544     boolean retval = !jj_3_3();
4545     jj_save(2, xla);
4546     return retval;
4547   }
4548
4549   static final private boolean jj_2_4(int xla) {
4550     jj_la = xla; jj_lastpos = jj_scanpos = token;
4551     boolean retval = !jj_3_4();
4552     jj_save(3, xla);
4553     return retval;
4554   }
4555
4556   static final private boolean jj_2_5(int xla) {
4557     jj_la = xla; jj_lastpos = jj_scanpos = token;
4558     boolean retval = !jj_3_5();
4559     jj_save(4, xla);
4560     return retval;
4561   }
4562
4563   static final private boolean jj_2_6(int xla) {
4564     jj_la = xla; jj_lastpos = jj_scanpos = token;
4565     boolean retval = !jj_3_6();
4566     jj_save(5, xla);
4567     return retval;
4568   }
4569
4570   static final private boolean jj_2_7(int xla) {
4571     jj_la = xla; jj_lastpos = jj_scanpos = token;
4572     boolean retval = !jj_3_7();
4573     jj_save(6, xla);
4574     return retval;
4575   }
4576
4577   static final private boolean jj_2_8(int xla) {
4578     jj_la = xla; jj_lastpos = jj_scanpos = token;
4579     boolean retval = !jj_3_8();
4580     jj_save(7, xla);
4581     return retval;
4582   }
4583
4584   static final private boolean jj_3R_58() {
4585     if (jj_3R_88()) return true;
4586     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4587     return false;
4588   }
4589
4590   static final private boolean jj_3R_102() {
4591     if (jj_scan_token(COMMA)) return true;
4592     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4593     if (jj_3R_52()) return true;
4594     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4595     return false;
4596   }
4597
4598   static final private boolean jj_3R_57() {
4599     if (jj_3R_44()) return true;
4600     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4601     return false;
4602   }
4603
4604   static final private boolean jj_3R_56() {
4605     if (jj_3R_87()) return true;
4606     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4607     return false;
4608   }
4609
4610   static final private boolean jj_3R_101() {
4611     if (jj_3R_52()) return true;
4612     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4613     return false;
4614   }
4615
4616   static final private boolean jj_3_4() {
4617     if (jj_scan_token(LPAREN)) return true;
4618     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4619     Token xsp;
4620     xsp = jj_scanpos;
4621     if (jj_3R_45()) {
4622     jj_scanpos = xsp;
4623     if (jj_3R_46()) return true;
4624     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4625     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4626     if (jj_scan_token(RPAREN)) return true;
4627     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4628     return false;
4629   }
4630
4631   static final private boolean jj_3R_47() {
4632     Token xsp;
4633     xsp = jj_scanpos;
4634     if (jj_3R_55()) {
4635     jj_scanpos = xsp;
4636     if (jj_3R_56()) {
4637     jj_scanpos = xsp;
4638     if (jj_3R_57()) {
4639     jj_scanpos = xsp;
4640     if (jj_3R_58()) return true;
4641     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4642     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4643     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4644     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4645     return false;
4646   }
4647
4648   static final private boolean jj_3R_55() {
4649     if (jj_3R_86()) return true;
4650     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4651     return false;
4652   }
4653
4654   static final private boolean jj_3R_165() {
4655     if (jj_scan_token(LPAREN)) return true;
4656     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4657     if (jj_3R_47()) return true;
4658     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4659     if (jj_scan_token(RPAREN)) return true;
4660     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4661     return false;
4662   }
4663
4664   static final private boolean jj_3R_164() {
4665     if (jj_3R_169()) return true;
4666     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4667     return false;
4668   }
4669
4670   static final private boolean jj_3R_160() {
4671     if (jj_scan_token(DECR)) return true;
4672     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4673     return false;
4674   }
4675
4676   static final private boolean jj_3R_163() {
4677     if (jj_3R_168()) return true;
4678     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4679     return false;
4680   }
4681
4682   static final private boolean jj_3R_162() {
4683     if (jj_3R_167()) return true;
4684     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4685     return false;
4686   }
4687
4688   static final private boolean jj_3R_87() {
4689     if (jj_scan_token(LIST)) return true;
4690     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4691     if (jj_scan_token(LPAREN)) return true;
4692     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4693     Token xsp;
4694     xsp = jj_scanpos;
4695     if (jj_3R_101()) jj_scanpos = xsp;
4696     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4697     while (true) {
4698       xsp = jj_scanpos;
4699       if (jj_3R_102()) { jj_scanpos = xsp; break; }
4700       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4701     }
4702     if (jj_scan_token(RPAREN)) return true;
4703     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4704     xsp = jj_scanpos;
4705     if (jj_3R_103()) jj_scanpos = xsp;
4706     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4707     return false;
4708   }
4709
4710   static final private boolean jj_3R_85() {
4711     if (jj_scan_token(OBJECT)) return true;
4712     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4713     return false;
4714   }
4715
4716   static final private boolean jj_3R_158() {
4717     Token xsp;
4718     xsp = jj_scanpos;
4719     if (jj_3R_161()) {
4720     jj_scanpos = xsp;
4721     if (jj_3R_162()) {
4722     jj_scanpos = xsp;
4723     if (jj_3R_163()) {
4724     jj_scanpos = xsp;
4725     if (jj_3R_164()) {
4726     jj_scanpos = xsp;
4727     if (jj_3R_165()) return true;
4728     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4729     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4730     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4731     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4732     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4733     return false;
4734   }
4735
4736   static final private boolean jj_3R_161() {
4737     if (jj_scan_token(BANG)) return true;
4738     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4739     if (jj_3R_141()) return true;
4740     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4741     return false;
4742   }
4743
4744   static final private boolean jj_3R_84() {
4745     if (jj_scan_token(INTEGER)) return true;
4746     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4747     return false;
4748   }
4749
4750   static final private boolean jj_3R_83() {
4751     if (jj_scan_token(INT)) return true;
4752     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4753     return false;
4754   }
4755
4756   static final private boolean jj_3R_82() {
4757     if (jj_scan_token(FLOAT)) return true;
4758     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4759     return false;
4760   }
4761
4762   static final private boolean jj_3R_159() {
4763     if (jj_scan_token(INCR)) return true;
4764     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4765     return false;
4766   }
4767
4768   static final private boolean jj_3R_156() {
4769     if (jj_scan_token(MINUS)) return true;
4770     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4771     return false;
4772   }
4773
4774   static final private boolean jj_3R_157() {
4775     Token xsp;
4776     xsp = jj_scanpos;
4777     if (jj_3R_159()) {
4778     jj_scanpos = xsp;
4779     if (jj_3R_160()) return true;
4780     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4781     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4782     if (jj_3R_166()) return true;
4783     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4784     return false;
4785   }
4786
4787   static final private boolean jj_3R_81() {
4788     if (jj_scan_token(DOUBLE)) return true;
4789     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4790     return false;
4791   }
4792
4793   static final private boolean jj_3R_86() {
4794     if (jj_scan_token(PRINT)) return true;
4795     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4796     if (jj_3R_47()) return true;
4797     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4798     return false;
4799   }
4800
4801   static final private boolean jj_3R_80() {
4802     if (jj_scan_token(REAL)) return true;
4803     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4804     return false;
4805   }
4806
4807   static final private boolean jj_3R_79() {
4808     if (jj_scan_token(BOOLEAN)) return true;
4809     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4810     return false;
4811   }
4812
4813   static final private boolean jj_3R_78() {
4814     if (jj_scan_token(BOOL)) return true;
4815     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4816     return false;
4817   }
4818
4819   static final private boolean jj_3R_149() {
4820     if (jj_scan_token(REM)) return true;
4821     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4822     return false;
4823   }
4824
4825   static final private boolean jj_3R_154() {
4826     if (jj_3R_158()) return true;
4827     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4828     return false;
4829   }
4830
4831   static final private boolean jj_3R_77() {
4832     if (jj_scan_token(STRING)) return true;
4833     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4834     return false;
4835   }
4836
4837   static final private boolean jj_3R_54() {
4838     Token xsp;
4839     xsp = jj_scanpos;
4840     if (jj_3R_77()) {
4841     jj_scanpos = xsp;
4842     if (jj_3R_78()) {
4843     jj_scanpos = xsp;
4844     if (jj_3R_79()) {
4845     jj_scanpos = xsp;
4846     if (jj_3R_80()) {
4847     jj_scanpos = xsp;
4848     if (jj_3R_81()) {
4849     jj_scanpos = xsp;
4850     if (jj_3R_82()) {
4851     jj_scanpos = xsp;
4852     if (jj_3R_83()) {
4853     jj_scanpos = xsp;
4854     if (jj_3R_84()) {
4855     jj_scanpos = xsp;
4856     if (jj_3R_85()) return true;
4857     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4858     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4859     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4860     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4861     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4862     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4863     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4864     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4865     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4866     return false;
4867   }
4868
4869   static final private boolean jj_3R_153() {
4870     if (jj_3R_157()) return true;
4871     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4872     return false;
4873   }
4874
4875   static final private boolean jj_3R_155() {
4876     if (jj_scan_token(PLUS)) return true;
4877     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4878     return false;
4879   }
4880
4881   static final private boolean jj_3R_150() {
4882     Token xsp;
4883     xsp = jj_scanpos;
4884     if (jj_3R_152()) {
4885     jj_scanpos = xsp;
4886     if (jj_3R_153()) {
4887     jj_scanpos = xsp;
4888     if (jj_3R_154()) return true;
4889     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4890     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4891     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4892     return false;
4893   }
4894
4895   static final private boolean jj_3R_152() {
4896     Token xsp;
4897     xsp = jj_scanpos;
4898     if (jj_3R_155()) {
4899     jj_scanpos = xsp;
4900     if (jj_3R_156()) return true;
4901     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4902     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4903     if (jj_3R_141()) return true;
4904     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4905     return false;
4906   }
4907
4908   static final private boolean jj_3R_151() {
4909     if (jj_scan_token(AT)) return true;
4910     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4911     return false;
4912   }
4913
4914   static final private boolean jj_3R_146() {
4915     Token xsp;
4916     while (true) {
4917       xsp = jj_scanpos;
4918       if (jj_3R_151()) { jj_scanpos = xsp; break; }
4919       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4920     }
4921     if (jj_3R_150()) return true;
4922     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4923     return false;
4924   }
4925
4926   static final private boolean jj_3R_148() {
4927     if (jj_scan_token(SLASH)) return true;
4928     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4929     return false;
4930   }
4931
4932   static final private boolean jj_3R_141() {
4933     Token xsp;
4934     xsp = jj_scanpos;
4935     if (jj_3R_145()) {
4936     jj_scanpos = xsp;
4937     if (jj_3R_146()) return true;
4938     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4939     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4940     return false;
4941   }
4942
4943   static final private boolean jj_3R_145() {
4944     if (jj_scan_token(BIT_AND)) return true;
4945     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4946     if (jj_3R_150()) return true;
4947     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4948     return false;
4949   }
4950
4951   static final private boolean jj_3R_140() {
4952     if (jj_scan_token(RUNSIGNEDSHIFT)) return true;
4953     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4954     return false;
4955   }
4956
4957   static final private boolean jj_3R_147() {
4958     if (jj_scan_token(STAR)) return true;
4959     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4960     return false;
4961   }
4962
4963   static final private boolean jj_3R_142() {
4964     Token xsp;
4965     xsp = jj_scanpos;
4966     if (jj_3R_147()) {
4967     jj_scanpos = xsp;
4968     if (jj_3R_148()) {
4969     jj_scanpos = xsp;
4970     if (jj_3R_149()) return true;
4971     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4972     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4973     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4974     if (jj_3R_141()) return true;
4975     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4976     return false;
4977   }
4978
4979   static final private boolean jj_3R_144() {
4980     if (jj_scan_token(MINUS)) return true;
4981     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4982     return false;
4983   }
4984
4985   static final private boolean jj_3R_135() {
4986     if (jj_scan_token(GE)) return true;
4987     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4988     return false;
4989   }
4990
4991   static final private boolean jj_3R_136() {
4992     if (jj_3R_141()) return true;
4993     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4994     Token xsp;
4995     while (true) {
4996       xsp = jj_scanpos;
4997       if (jj_3R_142()) { jj_scanpos = xsp; break; }
4998       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
4999     }
5000     return false;
5001   }
5002
5003   static final private boolean jj_3R_139() {
5004     if (jj_scan_token(RSIGNEDSHIFT)) return true;
5005     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5006     return false;
5007   }
5008
5009   static final private boolean jj_3R_134() {
5010     if (jj_scan_token(LE)) return true;
5011     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5012     return false;
5013   }
5014
5015   static final private boolean jj_3R_143() {
5016     if (jj_scan_token(PLUS)) return true;
5017     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5018     return false;
5019   }
5020
5021   static final private boolean jj_3R_137() {
5022     Token xsp;
5023     xsp = jj_scanpos;
5024     if (jj_3R_143()) {
5025     jj_scanpos = xsp;
5026     if (jj_3R_144()) return true;
5027     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5028     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5029     if (jj_3R_136()) return true;
5030     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5031     return false;
5032   }
5033
5034   static final private boolean jj_3R_130() {
5035     if (jj_3R_136()) return true;
5036     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5037     Token xsp;
5038     while (true) {
5039       xsp = jj_scanpos;
5040       if (jj_3R_137()) { jj_scanpos = xsp; break; }
5041       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5042     }
5043     return false;
5044   }
5045
5046   static final private boolean jj_3_8() {
5047     if (jj_3R_49()) return true;
5048     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5049     return false;
5050   }
5051
5052   static final private boolean jj_3R_133() {
5053     if (jj_scan_token(GT)) return true;
5054     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5055     return false;
5056   }
5057
5058   static final private boolean jj_3_7() {
5059     if (jj_3R_48()) return true;
5060     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5061     return false;
5062   }
5063
5064   static final private boolean jj_3R_138() {
5065     if (jj_scan_token(LSHIFT)) return true;
5066     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5067     return false;
5068   }
5069
5070   static final private boolean jj_3R_131() {
5071     Token xsp;
5072     xsp = jj_scanpos;
5073     if (jj_3R_138()) {
5074     jj_scanpos = xsp;
5075     if (jj_3R_139()) {
5076     jj_scanpos = xsp;
5077     if (jj_3R_140()) return true;
5078     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5079     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5080     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5081     if (jj_3R_130()) return true;
5082     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5083     return false;
5084   }
5085
5086   static final private boolean jj_3R_123() {
5087     if (jj_3R_130()) return true;
5088     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5089     Token xsp;
5090     while (true) {
5091       xsp = jj_scanpos;
5092       if (jj_3R_131()) { jj_scanpos = xsp; break; }
5093       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5094     }
5095     return false;
5096   }
5097
5098   static final private boolean jj_3_6() {
5099     if (jj_3R_47()) return true;
5100     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5101     if (jj_scan_token(SEMICOLON)) return true;
5102     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5103     return false;
5104   }
5105
5106   static final private boolean jj_3R_132() {
5107     if (jj_scan_token(LT)) return true;
5108     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5109     return false;
5110   }
5111
5112   static final private boolean jj_3R_124() {
5113     Token xsp;
5114     xsp = jj_scanpos;
5115     if (jj_3R_132()) {
5116     jj_scanpos = xsp;
5117     if (jj_3R_133()) {
5118     jj_scanpos = xsp;
5119     if (jj_3R_134()) {
5120     jj_scanpos = xsp;
5121     if (jj_3R_135()) return true;
5122     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5123     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5124     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5125     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5126     if (jj_3R_123()) return true;
5127     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5128     return false;
5129   }
5130
5131   static final private boolean jj_3R_121() {
5132     if (jj_3R_123()) return true;
5133     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5134     Token xsp;
5135     while (true) {
5136       xsp = jj_scanpos;
5137       if (jj_3R_124()) { jj_scanpos = xsp; break; }
5138       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5139     }
5140     return false;
5141   }
5142
5143   static final private boolean jj_3R_205() {
5144     if (jj_scan_token(COMMA)) return true;
5145     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5146     if (jj_3R_47()) return true;
5147     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5148     return false;
5149   }
5150
5151   static final private boolean jj_3R_204() {
5152     if (jj_3R_47()) return true;
5153     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5154     Token xsp;
5155     while (true) {
5156       xsp = jj_scanpos;
5157       if (jj_3R_205()) { jj_scanpos = xsp; break; }
5158       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5159     }
5160     return false;
5161   }
5162
5163   static final private boolean jj_3R_129() {
5164     if (jj_scan_token(TRIPLEEQUAL)) return true;
5165     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5166     return false;
5167   }
5168
5169   static final private boolean jj_3R_128() {
5170     if (jj_scan_token(BANGDOUBLEEQUAL)) return true;
5171     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5172     return false;
5173   }
5174
5175   static final private boolean jj_3R_127() {
5176     if (jj_scan_token(NE)) return true;
5177     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5178     return false;
5179   }
5180
5181   static final private boolean jj_3R_126() {
5182     if (jj_scan_token(DIF)) return true;
5183     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5184     return false;
5185   }
5186
5187   static final private boolean jj_3R_125() {
5188     if (jj_scan_token(EQ)) return true;
5189     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5190     return false;
5191   }
5192
5193   static final private boolean jj_3R_202() {
5194     if (jj_3R_204()) return true;
5195     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5196     return false;
5197   }
5198
5199   static final private boolean jj_3R_200() {
5200     if (jj_scan_token(COMMA)) return true;
5201     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5202     return false;
5203   }
5204
5205   static final private boolean jj_3R_122() {
5206     Token xsp;
5207     xsp = jj_scanpos;
5208     if (jj_3R_125()) {
5209     jj_scanpos = xsp;
5210     if (jj_3R_126()) {
5211     jj_scanpos = xsp;
5212     if (jj_3R_127()) {
5213     jj_scanpos = xsp;
5214     if (jj_3R_128()) {
5215     jj_scanpos = xsp;
5216     if (jj_3R_129()) return true;
5217     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5218     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5219     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5220     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5221     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5222     if (jj_3R_121()) return true;
5223     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5224     return false;
5225   }
5226
5227   static final private boolean jj_3_2() {
5228     if (jj_scan_token(COMMA)) return true;
5229     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5230     if (jj_3R_43()) return true;
5231     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5232     return false;
5233   }
5234
5235   static final private boolean jj_3R_119() {
5236     if (jj_3R_121()) return true;
5237     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5238     Token xsp;
5239     while (true) {
5240       xsp = jj_scanpos;
5241       if (jj_3R_122()) { jj_scanpos = xsp; break; }
5242       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5243     }
5244     return false;
5245   }
5246
5247   static final private boolean jj_3R_199() {
5248     if (jj_3R_43()) return true;
5249     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5250     Token xsp;
5251     while (true) {
5252       xsp = jj_scanpos;
5253       if (jj_3_2()) { jj_scanpos = xsp; break; }
5254       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5255     }
5256     return false;
5257   }
5258
5259   static final private boolean jj_3R_201() {
5260     if (jj_scan_token(LPAREN)) return true;
5261     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5262     Token xsp;
5263     xsp = jj_scanpos;
5264     if (jj_3R_202()) jj_scanpos = xsp;
5265     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5266     if (jj_scan_token(RPAREN)) return true;
5267     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5268     return false;
5269   }
5270
5271   static final private boolean jj_3R_194() {
5272     if (jj_scan_token(LPAREN)) return true;
5273     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5274     Token xsp;
5275     xsp = jj_scanpos;
5276     if (jj_3R_199()) jj_scanpos = xsp;
5277     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5278     xsp = jj_scanpos;
5279     if (jj_3R_200()) jj_scanpos = xsp;
5280     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5281     if (jj_scan_token(RPAREN)) return true;
5282     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5283     return false;
5284   }
5285
5286   static final private boolean jj_3R_120() {
5287     if (jj_scan_token(BIT_AND)) return true;
5288     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5289     if (jj_3R_119()) return true;
5290     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5291     return false;
5292   }
5293
5294   static final private boolean jj_3R_196() {
5295     if (jj_scan_token(FALSE)) return true;
5296     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5297     return false;
5298   }
5299
5300   static final private boolean jj_3R_195() {
5301     if (jj_scan_token(TRUE)) return true;
5302     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5303     return false;
5304   }
5305
5306   static final private boolean jj_3R_185() {
5307     Token xsp;
5308     xsp = jj_scanpos;
5309     if (jj_3R_195()) {
5310     jj_scanpos = xsp;
5311     if (jj_3R_196()) return true;
5312     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5313     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5314     return false;
5315   }
5316
5317   static final private boolean jj_3R_117() {
5318     if (jj_3R_119()) return true;
5319     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5320     Token xsp;
5321     while (true) {
5322       xsp = jj_scanpos;
5323       if (jj_3R_120()) { jj_scanpos = xsp; break; }
5324       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5325     }
5326     return false;
5327   }
5328
5329   static final private boolean jj_3R_203() {
5330     if (jj_scan_token(ARRAYASSIGN)) return true;
5331     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5332     if (jj_3R_47()) return true;
5333     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5334     return false;
5335   }
5336
5337   static final private boolean jj_3R_43() {
5338     if (jj_3R_47()) return true;
5339     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5340     Token xsp;
5341     xsp = jj_scanpos;
5342     if (jj_3R_203()) jj_scanpos = xsp;
5343     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5344     return false;
5345   }
5346
5347   static final private boolean jj_3R_176() {
5348     if (jj_scan_token(NULL)) return true;
5349     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5350     return false;
5351   }
5352
5353   static final private boolean jj_3R_89() {
5354     if (jj_scan_token(ASSIGN)) return true;
5355     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5356     if (jj_3R_47()) return true;
5357     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5358     return false;
5359   }
5360
5361   static final private boolean jj_3R_95() {
5362     if (jj_3R_54()) return true;
5363     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5364     return false;
5365   }
5366
5367   static final private boolean jj_3R_175() {
5368     if (jj_3R_185()) return true;
5369     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5370     return false;
5371   }
5372
5373   static final private boolean jj_3R_60() {
5374     if (jj_scan_token(COMMA)) return true;
5375     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5376     if (jj_3R_59()) return true;
5377     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5378     return false;
5379   }
5380
5381   static final private boolean jj_3R_174() {
5382     if (jj_scan_token(STRING_LITERAL)) return true;
5383     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5384     return false;
5385   }
5386
5387   static final private boolean jj_3R_118() {
5388     if (jj_scan_token(XOR)) return true;
5389     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5390     if (jj_3R_117()) return true;
5391     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5392     return false;
5393   }
5394
5395   static final private boolean jj_3R_173() {
5396     if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
5397     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5398     return false;
5399   }
5400
5401   static final private boolean jj_3R_169() {
5402     Token xsp;
5403     xsp = jj_scanpos;
5404     if (jj_3R_172()) {
5405     jj_scanpos = xsp;
5406     if (jj_3R_173()) {
5407     jj_scanpos = xsp;
5408     if (jj_3R_174()) {
5409     jj_scanpos = xsp;
5410     if (jj_3R_175()) {
5411     jj_scanpos = xsp;
5412     if (jj_3R_176()) return true;
5413     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5414     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5415     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5416     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5417     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5418     return false;
5419   }
5420
5421   static final private boolean jj_3R_172() {
5422     if (jj_scan_token(INTEGER_LITERAL)) return true;
5423     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5424     return false;
5425   }
5426
5427   static final private boolean jj_3R_115() {
5428     if (jj_3R_117()) return true;
5429     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5430     Token xsp;
5431     while (true) {
5432       xsp = jj_scanpos;
5433       if (jj_3R_118()) { jj_scanpos = xsp; break; }
5434       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5435     }
5436     return false;
5437   }
5438
5439   static final private boolean jj_3R_94() {
5440     if (jj_3R_47()) return true;
5441     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5442     return false;
5443   }
5444
5445   static final private boolean jj_3R_62() {
5446     Token xsp;
5447     xsp = jj_scanpos;
5448     if (jj_3R_94()) {
5449     jj_scanpos = xsp;
5450     if (jj_3R_95()) return true;
5451     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5452     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5453     return false;
5454   }
5455
5456   static final private boolean jj_3R_59() {
5457     if (jj_3R_52()) return true;
5458     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5459     Token xsp;
5460     xsp = jj_scanpos;
5461     if (jj_3R_89()) jj_scanpos = xsp;
5462     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5463     return false;
5464   }
5465
5466   static final private boolean jj_3R_116() {
5467     if (jj_scan_token(BIT_OR)) return true;
5468     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5469     if (jj_3R_115()) return true;
5470     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5471     return false;
5472   }
5473
5474   static final private boolean jj_3R_111() {
5475     if (jj_3R_115()) return true;
5476     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5477     Token xsp;
5478     while (true) {
5479       xsp = jj_scanpos;
5480       if (jj_3R_116()) { jj_scanpos = xsp; break; }
5481       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5482     }
5483     return false;
5484   }
5485
5486   static final private boolean jj_3R_49() {
5487     if (jj_3R_59()) return true;
5488     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5489     Token xsp;
5490     while (true) {
5491       xsp = jj_scanpos;
5492       if (jj_3R_60()) { jj_scanpos = xsp; break; }
5493       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5494     }
5495     return false;
5496   }
5497
5498   static final private boolean jj_3R_51() {
5499     if (jj_scan_token(LBRACKET)) return true;
5500     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5501     Token xsp;
5502     xsp = jj_scanpos;
5503     if (jj_3R_62()) jj_scanpos = xsp;
5504     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5505     if (jj_scan_token(RBRACKET)) return true;
5506     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5507     return false;
5508   }
5509
5510   static final private boolean jj_3R_114() {
5511     if (jj_scan_token(_ANDL)) return true;
5512     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5513     return false;
5514   }
5515
5516   static final private boolean jj_3R_112() {
5517     if (jj_scan_token(DOT)) return true;
5518     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5519     if (jj_3R_111()) return true;
5520     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5521     return false;
5522   }
5523
5524   static final private boolean jj_3R_106() {
5525     if (jj_3R_111()) return true;
5526     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5527     Token xsp;
5528     while (true) {
5529       xsp = jj_scanpos;
5530       if (jj_3R_112()) { jj_scanpos = xsp; break; }
5531       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5532     }
5533     return false;
5534   }
5535
5536   static final private boolean jj_3R_93() {
5537     if (jj_scan_token(DOLLAR_ID)) return true;
5538     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5539     return false;
5540   }
5541
5542   static final private boolean jj_3R_50() {
5543     if (jj_scan_token(CLASSACCESS)) return true;
5544     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5545     if (jj_3R_61()) return true;
5546     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5547     return false;
5548   }
5549
5550   static final private boolean jj_3R_42() {
5551     Token xsp;
5552     xsp = jj_scanpos;
5553     if (jj_3R_50()) {
5554     jj_scanpos = xsp;
5555     if (jj_3R_51()) return true;
5556     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5557     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5558     return false;
5559   }
5560
5561   static final private boolean jj_3R_110() {
5562     if (jj_scan_token(LBRACE)) return true;
5563     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5564     if (jj_3R_47()) return true;
5565     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5566     if (jj_scan_token(RBRACE)) return true;
5567     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5568     return false;
5569   }
5570
5571   static final private boolean jj_3R_198() {
5572     if (jj_3R_42()) return true;
5573     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5574     return false;
5575   }
5576
5577   static final private boolean jj_3R_109() {
5578     if (jj_scan_token(_ORL)) return true;
5579     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5580     return false;
5581   }
5582
5583   static final private boolean jj_3R_92() {
5584     if (jj_scan_token(DOLLAR)) return true;
5585     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5586     if (jj_3R_61()) return true;
5587     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5588     return false;
5589   }
5590
5591   static final private boolean jj_3R_113() {
5592     if (jj_scan_token(SC_AND)) return true;
5593     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5594     return false;
5595   }
5596
5597   static final private boolean jj_3R_197() {
5598     if (jj_3R_201()) return true;
5599     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5600     return false;
5601   }
5602
5603   static final private boolean jj_3R_193() {
5604     Token xsp;
5605     xsp = jj_scanpos;
5606     if (jj_3R_197()) {
5607     jj_scanpos = xsp;
5608     if (jj_3R_198()) return true;
5609     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5610     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5611     return false;
5612   }
5613
5614   static final private boolean jj_3R_107() {
5615     Token xsp;
5616     xsp = jj_scanpos;
5617     if (jj_3R_113()) {
5618     jj_scanpos = xsp;
5619     if (jj_3R_114()) return true;
5620     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5621     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5622     if (jj_3R_106()) return true;
5623     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5624     return false;
5625   }
5626
5627   static final private boolean jj_3R_104() {
5628     if (jj_3R_106()) return true;
5629     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5630     Token xsp;
5631     while (true) {
5632       xsp = jj_scanpos;
5633       if (jj_3R_107()) { jj_scanpos = xsp; break; }
5634       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5635     }
5636     return false;
5637   }
5638
5639   static final private boolean jj_3R_99() {
5640     if (jj_scan_token(HOOK)) return true;
5641     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5642     if (jj_3R_47()) return true;
5643     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5644     if (jj_scan_token(COLON)) return true;
5645     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5646     if (jj_3R_88()) return true;
5647     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5648     return false;
5649   }
5650
5651   static final private boolean jj_3R_192() {
5652     if (jj_3R_52()) return true;
5653     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5654     return false;
5655   }
5656
5657   static final private boolean jj_3R_191() {
5658     if (jj_scan_token(IDENTIFIER)) return true;
5659     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5660     return false;
5661   }
5662
5663   static final private boolean jj_3R_182() {
5664     Token xsp;
5665     xsp = jj_scanpos;
5666     if (jj_3R_191()) {
5667     jj_scanpos = xsp;
5668     if (jj_3R_192()) return true;
5669     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5670     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5671     return false;
5672   }
5673
5674   static final private boolean jj_3R_91() {
5675     if (jj_scan_token(IDENTIFIER)) return true;
5676     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5677     Token xsp;
5678     xsp = jj_scanpos;
5679     if (jj_3R_110()) jj_scanpos = xsp;
5680     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5681     return false;
5682   }
5683
5684   static final private boolean jj_3R_90() {
5685     if (jj_scan_token(LBRACE)) return true;
5686     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5687     if (jj_3R_47()) return true;
5688     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5689     if (jj_scan_token(RBRACE)) return true;
5690     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5691     return false;
5692   }
5693
5694   static final private boolean jj_3R_61() {
5695     Token xsp;
5696     xsp = jj_scanpos;
5697     if (jj_3R_90()) {
5698     jj_scanpos = xsp;
5699     if (jj_3R_91()) {
5700     jj_scanpos = xsp;
5701     if (jj_3R_92()) {
5702     jj_scanpos = xsp;
5703     if (jj_3R_93()) return true;
5704     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5705     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5706     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5707     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5708     return false;
5709   }
5710
5711   static final private boolean jj_3R_100() {
5712     if (jj_scan_token(LBRACE)) return true;
5713     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5714     if (jj_3R_47()) return true;
5715     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5716     if (jj_scan_token(RBRACE)) return true;
5717     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5718     return false;
5719   }
5720
5721   static final private boolean jj_3R_108() {
5722     if (jj_scan_token(SC_OR)) return true;
5723     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5724     return false;
5725   }
5726
5727   static final private boolean jj_3R_105() {
5728     Token xsp;
5729     xsp = jj_scanpos;
5730     if (jj_3R_108()) {
5731     jj_scanpos = xsp;
5732     if (jj_3R_109()) return true;
5733     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5734     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5735     if (jj_3R_104()) return true;
5736     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5737     return false;
5738   }
5739
5740   static final private boolean jj_3R_98() {
5741     if (jj_3R_104()) return true;
5742     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5743     Token xsp;
5744     while (true) {
5745       xsp = jj_scanpos;
5746       if (jj_3R_105()) { jj_scanpos = xsp; break; }
5747       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5748     }
5749     return false;
5750   }
5751
5752   static final private boolean jj_3R_48() {
5753     if (jj_scan_token(IDENTIFIER)) return true;
5754     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5755     if (jj_scan_token(COLON)) return true;
5756     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5757     return false;
5758   }
5759
5760   static final private boolean jj_3R_97() {
5761     if (jj_scan_token(DOLLAR)) return true;
5762     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5763     if (jj_3R_61()) return true;
5764     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5765     return false;
5766   }
5767
5768   static final private boolean jj_3R_188() {
5769     if (jj_3R_52()) return true;
5770     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5771     return false;
5772   }
5773
5774   static final private boolean jj_3R_96() {
5775     if (jj_scan_token(DOLLAR_ID)) return true;
5776     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5777     Token xsp;
5778     xsp = jj_scanpos;
5779     if (jj_3R_100()) jj_scanpos = xsp;
5780     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5781     return false;
5782   }
5783
5784   static final private boolean jj_3R_63() {
5785     Token xsp;
5786     xsp = jj_scanpos;
5787     if (jj_3R_96()) {
5788     jj_scanpos = xsp;
5789     if (jj_3R_97()) return true;
5790     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5791     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5792     return false;
5793   }
5794
5795   static final private boolean jj_3R_88() {
5796     if (jj_3R_98()) return true;
5797     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5798     Token xsp;
5799     xsp = jj_scanpos;
5800     if (jj_3R_99()) jj_scanpos = xsp;
5801     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5802     return false;
5803   }
5804
5805   static final private boolean jj_3R_187() {
5806     if (jj_scan_token(NEW)) return true;
5807     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5808     if (jj_3R_182()) return true;
5809     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5810     return false;
5811   }
5812
5813   static final private boolean jj_3R_190() {
5814     if (jj_scan_token(DECR)) return true;
5815     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5816     return false;
5817   }
5818
5819   static final private boolean jj_3R_186() {
5820     if (jj_scan_token(IDENTIFIER)) return true;
5821     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5822     return false;
5823   }
5824
5825   static final private boolean jj_3R_177() {
5826     Token xsp;
5827     xsp = jj_scanpos;
5828     if (jj_3R_186()) {
5829     jj_scanpos = xsp;
5830     if (jj_3R_187()) {
5831     jj_scanpos = xsp;
5832     if (jj_3R_188()) return true;
5833     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5834     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5835     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5836     return false;
5837   }
5838
5839   static final private boolean jj_3R_76() {
5840     if (jj_scan_token(TILDEEQUAL)) return true;
5841     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5842     return false;
5843   }
5844
5845   static final private boolean jj_3_1() {
5846     if (jj_3R_42()) return true;
5847     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5848     return false;
5849   }
5850
5851   static final private boolean jj_3R_75() {
5852     if (jj_scan_token(DOTASSIGN)) return true;
5853     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5854     return false;
5855   }
5856
5857   static final private boolean jj_3R_178() {
5858     if (jj_scan_token(ARRAY)) return true;
5859     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5860     if (jj_3R_194()) return true;
5861     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5862     return false;
5863   }
5864
5865   static final private boolean jj_3R_74() {
5866     if (jj_scan_token(ORASSIGN)) return true;
5867     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5868     return false;
5869   }
5870
5871   static final private boolean jj_3R_73() {
5872     if (jj_scan_token(XORASSIGN)) return true;
5873     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5874     return false;
5875   }
5876
5877   static final private boolean jj_3R_72() {
5878     if (jj_scan_token(ANDASSIGN)) return true;
5879     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5880     return false;
5881   }
5882
5883   static final private boolean jj_3R_52() {
5884     if (jj_3R_63()) return true;
5885     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5886     Token xsp;
5887     while (true) {
5888       xsp = jj_scanpos;
5889       if (jj_3_1()) { jj_scanpos = xsp; break; }
5890       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5891     }
5892     return false;
5893   }
5894
5895   static final private boolean jj_3R_71() {
5896     if (jj_scan_token(RSIGNEDSHIFTASSIGN)) return true;
5897     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5898     return false;
5899   }
5900
5901   static final private boolean jj_3R_189() {
5902     if (jj_scan_token(INCR)) return true;
5903     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5904     return false;
5905   }
5906
5907   static final private boolean jj_3R_181() {
5908     Token xsp;
5909     xsp = jj_scanpos;
5910     if (jj_3R_189()) {
5911     jj_scanpos = xsp;
5912     if (jj_3R_190()) return true;
5913     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5914     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5915     return false;
5916   }
5917
5918   static final private boolean jj_3R_70() {
5919     if (jj_scan_token(LSHIFTASSIGN)) return true;
5920     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5921     return false;
5922   }
5923
5924   static final private boolean jj_3R_171() {
5925     if (jj_3R_178()) return true;
5926     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5927     return false;
5928   }
5929
5930   static final private boolean jj_3R_184() {
5931     if (jj_3R_193()) return true;
5932     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5933     return false;
5934   }
5935
5936   static final private boolean jj_3R_69() {
5937     if (jj_scan_token(MINUSASSIGN)) return true;
5938     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5939     return false;
5940   }
5941
5942   static final private boolean jj_3R_68() {
5943     if (jj_scan_token(PLUSASSIGN)) return true;
5944     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5945     return false;
5946   }
5947
5948   static final private boolean jj_3R_170() {
5949     if (jj_3R_177()) return true;
5950     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5951     Token xsp;
5952     while (true) {
5953       xsp = jj_scanpos;
5954       if (jj_3R_184()) { jj_scanpos = xsp; break; }
5955       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5956     }
5957     return false;
5958   }
5959
5960   static final private boolean jj_3R_67() {
5961     if (jj_scan_token(REMASSIGN)) return true;
5962     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5963     return false;
5964   }
5965
5966   static final private boolean jj_3R_66() {
5967     if (jj_scan_token(SLASHASSIGN)) return true;
5968     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5969     return false;
5970   }
5971
5972   static final private boolean jj_3R_183() {
5973     if (jj_3R_193()) return true;
5974     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5975     return false;
5976   }
5977
5978   static final private boolean jj_3R_65() {
5979     if (jj_scan_token(STARASSIGN)) return true;
5980     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
5981     return false;
5982   }
5983
5984   static final private boolean jj_3R_53() {
5985     Token xsp;
5986     xsp = jj_scanpos;
5987     if (jj_3R_64()) {
5988     jj_scanpos = xsp;
5989     if (jj_3R_65()) {
5990     jj_scanpos = xsp;
5991     if (jj_3R_66()) {
5992     jj_scanpos = xsp;
5993     if (jj_3R_67()) {
5994     jj_scanpos = xsp;
5995     if (jj_3R_68()) {
5996     jj_scanpos = xsp;
5997     if (jj_3R_69()) {
5998     jj_scanpos = xsp;
5999     if (jj_3R_70()) {
6000     jj_scanpos = xsp;
6001     if (jj_3R_71()) {
6002     jj_scanpos = xsp;
6003     if (jj_3R_72()) {
6004     jj_scanpos = xsp;
6005     if (jj_3R_73()) {
6006     jj_scanpos = xsp;
6007     if (jj_3R_74()) {
6008     jj_scanpos = xsp;
6009     if (jj_3R_75()) {
6010     jj_scanpos = xsp;
6011     if (jj_3R_76()) return true;
6012     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6013     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6014     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6015     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6016     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6017     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6018     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6019     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6020     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6021     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6022     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6023     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6024     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6025     return false;
6026   }
6027
6028   static final private boolean jj_3R_64() {
6029     if (jj_scan_token(ASSIGN)) return true;
6030     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6031     return false;
6032   }
6033
6034   static final private boolean jj_3R_180() {
6035     if (jj_scan_token(ARRAY)) return true;
6036     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6037     return false;
6038   }
6039
6040   static final private boolean jj_3_5() {
6041     if (jj_scan_token(IDENTIFIER)) return true;
6042     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6043     if (jj_scan_token(STATICCLASSACCESS)) return true;
6044     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6045     if (jj_3R_182()) return true;
6046     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6047     Token xsp;
6048     while (true) {
6049       xsp = jj_scanpos;
6050       if (jj_3R_183()) { jj_scanpos = xsp; break; }
6051       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6052     }
6053     return false;
6054   }
6055
6056   static final private boolean jj_3R_166() {
6057     Token xsp;
6058     xsp = jj_scanpos;
6059     if (jj_3_5()) {
6060     jj_scanpos = xsp;
6061     if (jj_3R_170()) {
6062     jj_scanpos = xsp;
6063     if (jj_3R_171()) return true;
6064     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6065     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6066     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6067     return false;
6068   }
6069
6070   static final private boolean jj_3R_103() {
6071     if (jj_scan_token(ASSIGN)) return true;
6072     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6073     if (jj_3R_47()) return true;
6074     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6075     return false;
6076   }
6077
6078   static final private boolean jj_3R_179() {
6079     if (jj_3R_54()) return true;
6080     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6081     return false;
6082   }
6083
6084   static final private boolean jj_3R_168() {
6085     if (jj_3R_166()) return true;
6086     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6087     Token xsp;
6088     xsp = jj_scanpos;
6089     if (jj_3R_181()) jj_scanpos = xsp;
6090     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6091     return false;
6092   }
6093
6094   static final private boolean jj_3R_44() {
6095     if (jj_3R_52()) return true;
6096     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6097     if (jj_3R_53()) return true;
6098     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6099     if (jj_3R_47()) return true;
6100     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6101     return false;
6102   }
6103
6104   static final private boolean jj_3R_46() {
6105     if (jj_scan_token(ARRAY)) return true;
6106     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6107     return false;
6108   }
6109
6110   static final private boolean jj_3R_167() {
6111     if (jj_scan_token(LPAREN)) return true;
6112     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6113     Token xsp;
6114     xsp = jj_scanpos;
6115     if (jj_3R_179()) {
6116     jj_scanpos = xsp;
6117     if (jj_3R_180()) return true;
6118     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6119     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6120     if (jj_scan_token(RPAREN)) return true;
6121     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6122     if (jj_3R_141()) return true;
6123     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6124     return false;
6125   }
6126
6127   static final private boolean jj_3_3() {
6128     if (jj_3R_44()) return true;
6129     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6130     return false;
6131   }
6132
6133   static final private boolean jj_3R_45() {
6134     if (jj_3R_54()) return true;
6135     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
6136     return false;
6137   }
6138
6139   static private boolean jj_initialized_once = false;
6140   static public PHPParserTokenManager token_source;
6141   static SimpleCharStream jj_input_stream;
6142   static public Token token, jj_nt;
6143   static private int jj_ntk;
6144   static private Token jj_scanpos, jj_lastpos;
6145   static private int jj_la;
6146   static public boolean lookingAhead = false;
6147   static private boolean jj_semLA;
6148   static private int jj_gen;
6149   static final private int[] jj_la1 = new int[126];
6150   static private int[] jj_la1_0;
6151   static private int[] jj_la1_1;
6152   static private int[] jj_la1_2;
6153   static private int[] jj_la1_3;
6154   static private int[] jj_la1_4;
6155   static {
6156       jj_la1_0();
6157       jj_la1_1();
6158       jj_la1_2();
6159       jj_la1_3();
6160       jj_la1_4();
6161    }
6162    private static void jj_la1_0() {
6163       jj_la1_0 = new int[] {0xfcb0001e,0x6,0x6,0xfcb0001e,0x0,0xfcb00000,0x0,0x600000,0x600000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x34000000,0x0,0x0,0x0,0x0,0x0,0x0,0x30000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x4000000,0x0,0x0,0x4000000,0x4000000,0x0,0x0,0x0,0x0,0x4000000,0x0,0x4000000,0x0,0x0,0x34000000,0x34000000,0x0,0x0,0x0,0x34000000,0x0,0x0,0xc4800000,0xfc800000,0x8,0x6,0x80000000,0x0,0x0,0x0,0x0,0x0,0x0,0xfcb00010,0xfcb00010,0xfcb00000,0xf4b00000,0x0,0x0,0x0,0x0,0x4000000,0x0,0x0,0x0,0xf4b00010,0xf4b00010,0x8000000,0x34000000,0x0,0xfc800010,0xfc800010,0x1000000,0x2000000,0xfc800010,0x1000000,0x2000000,0xfc800010,0xfc800010,0xfc800010,0xfc800010,0xfc800010,0xfc800000,0xfc800000,0x0,0x0,0x4000000,0x34000000,0x4000000,0xfc800000,0xfc800000,0x4000000,0x0,0x34000000,0x34000000,};
6164    }
6165    private static void jj_la1_1() {
6166       jj_la1_1 = new int[] {0x21d7541f,0x0,0x0,0x21d7541f,0x0,0x21d7541f,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc20000,0x80,0xc30000,0x0,0x0,0x0,0x0,0x0,0x80000000,0x0,0xc30000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc30000,0x0,0xc30000,0x0,0x0,0xc30000,0x80000000,0x0,0x0,0x20,0x20,0x10000,0x10000,0x10000,0x0,0x20,0x80c30000,0x80c30000,0x20,0xc20000,0xc00000,0xc30000,0x0,0x0,0x2115541f,0x21d7541f,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x21d7541f,0x21d7541f,0x21d7541f,0x21d7541f,0x0,0x0,0x0,0x0,0x10000,0x0,0x900,0x900,0x21d7541f,0x21d7541f,0x0,0xc30000,0x900,0x21d7541f,0x21d7541f,0x0,0x0,0x21d7541f,0x0,0x0,0x21d7541f,0x21d7541f,0x21d7541f,0x21d7541f,0x21d7541f,0x21d7541f,0x21d7541f,0x20,0x80,0x10000,0xc30000,0x10000,0x21d7541f,0x21d7541f,0x10000,0x0,0xc30000,0xc30000,};
6167    }
6168    private static void jj_la1_2() {
6169       jj_la1_2 = new int[] {0x45114400,0x0,0x0,0x45114400,0x40000000,0x45114400,0x0,0x0,0x0,0x80000000,0x0,0x4000000,0x0,0x4000000,0x4100000,0x4400,0x4400,0x114400,0x0,0x1114400,0x80000000,0x0,0x80000000,0x0,0x0,0xff,0x0,0x1114400,0x0,0x0,0x100,0x100,0x200,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1114400,0x0,0x1114400,0x0,0x0,0x1114400,0xff,0x0,0x0,0x11000000,0x11000000,0x100000,0x100000,0x100000,0x100000,0x11000000,0x11144ff,0x11144ff,0x10000000,0x14400,0x0,0x1114400,0x80000000,0x0,0x44100000,0x45114400,0x0,0x0,0x0,0x0,0x80000000,0x0,0x80000000,0x80000000,0x80000000,0x45114400,0x45114400,0x45114400,0x45114400,0x80000000,0x0,0x0,0x0,0x100000,0x4000000,0x0,0x0,0x45114400,0x45114400,0x0,0x1114400,0x0,0x45114400,0x45114400,0x0,0x0,0x45114400,0x0,0x0,0x45114400,0x45114400,0x45114400,0x45114400,0x45114400,0x45114400,0x45114400,0x10000000,0x0,0x100000,0x1114400,0x100000,0x45114400,0x45114400,0x100000,0x80000000,0x1114400,0x1114400,};
6170    }
6171    private static void jj_la1_3() {
6172       jj_la1_3 = new int[] {0xe0e00000,0x0,0x0,0xe0e00000,0x0,0xe0e00000,0x0,0x0,0x0,0x0,0x400,0x0,0x400000,0x0,0x400000,0x0,0x0,0x80000000,0x0,0xe0e00000,0x0,0x0,0x0,0x400000,0x0,0x0,0x0,0xe0e00000,0x1ffc00,0x2000000,0x8000000,0x8000000,0x10000000,0x10000000,0x1,0x0,0x0,0x0,0x3c8,0x3c8,0x36,0x36,0x0,0x0,0x80000000,0x80000000,0x0,0x0,0x200000,0xe0e00000,0x80000000,0xe0c00000,0x60000000,0x800000,0x400000,0x0,0x60000000,0x60000000,0x0,0x0,0x400000,0x400000,0x400000,0x400000,0x0,0xe0e00000,0xe0e00000,0x0,0x0,0x0,0xe0e00000,0x0,0x200000,0x60600000,0xe0e00000,0x0,0x0,0x0,0x400000,0x0,0x400,0x0,0x0,0x0,0xe0e00000,0xe0e00000,0xe0e00000,0xe0e00000,0x0,0x400,0x601ffc00,0x601ffc00,0x60400000,0x4000000,0x0,0x0,0xe0e00000,0xe0e00000,0x0,0xe0e00000,0x0,0xe0e00000,0xe0e00000,0x0,0x0,0xe0e00000,0x0,0x0,0xe4e00000,0xe0e00000,0xe0e00000,0xe0e00000,0xe0e00000,0xe0e00000,0xe4e00000,0x0,0x0,0x60400000,0xe0e00000,0x60400000,0xe0e00000,0xe4e00000,0x60400000,0x0,0xe0e00000,0xe0e00000,};
6173    }
6174    private static void jj_la1_4() {
6175       jj_la1_4 = new int[] {0x1009,0x0,0x0,0x1009,0x0,0x1009,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x1000,0x0,0x0,0x1,0x0,0x1009,0x0,0x8,0x0,0x1008,0x8,0x0,0x0,0x1009,0xc00,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x8,0x0,0x0,0x0,0x0,0x380,0x380,0x1,0x1,0x46,0x46,0x0,0x1009,0x1,0x1001,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x1000,0x1000,0x1000,0x1000,0x0,0x1009,0x1009,0x0,0x0,0x0,0x1009,0x0,0x0,0x1000,0x1009,0x0,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x1009,0x1009,0x1009,0x1009,0x0,0x0,0xc00,0xc00,0x1000,0x0,0x0,0x0,0x1009,0x1009,0x0,0x1009,0x0,0x1009,0x1009,0x0,0x0,0x1009,0x0,0x0,0x1009,0x1009,0x1009,0x1009,0x1009,0x1009,0x1009,0x0,0x0,0x1000,0x1009,0x1000,0x1009,0x1009,0x1000,0x0,0x1009,0x1009,};
6176    }
6177   static final private JJCalls[] jj_2_rtns = new JJCalls[8];
6178   static private boolean jj_rescan = false;
6179   static private int jj_gc = 0;
6180
6181   public PHPParser(java.io.InputStream stream) {
6182     if (jj_initialized_once) {
6183       System.out.println("ERROR: Second call to constructor of static parser.  You must");
6184       System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
6185       System.out.println("       during parser generation.");
6186       throw new Error();
6187     }
6188     jj_initialized_once = true;
6189     jj_input_stream = new SimpleCharStream(stream, 1, 1);
6190     token_source = new PHPParserTokenManager(jj_input_stream);
6191     token = new Token();
6192     jj_ntk = -1;
6193     jj_gen = 0;
6194     for (int i = 0; i < 126; i++) jj_la1[i] = -1;
6195     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
6196   }
6197
6198   static public void ReInit(java.io.InputStream stream) {
6199     jj_input_stream.ReInit(stream, 1, 1);
6200     token_source.ReInit(jj_input_stream);
6201     token = new Token();
6202     jj_ntk = -1;
6203     jj_gen = 0;
6204     for (int i = 0; i < 126; i++) jj_la1[i] = -1;
6205     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
6206   }
6207
6208   public PHPParser(java.io.Reader stream) {
6209     if (jj_initialized_once) {
6210       System.out.println("ERROR: Second call to constructor of static parser.  You must");
6211       System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
6212       System.out.println("       during parser generation.");
6213       throw new Error();
6214     }
6215     jj_initialized_once = true;
6216     jj_input_stream = new SimpleCharStream(stream, 1, 1);
6217     token_source = new PHPParserTokenManager(jj_input_stream);
6218     token = new Token();
6219     jj_ntk = -1;
6220     jj_gen = 0;
6221     for (int i = 0; i < 126; i++) jj_la1[i] = -1;
6222     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
6223   }
6224
6225   static public void ReInit(java.io.Reader stream) {
6226     jj_input_stream.ReInit(stream, 1, 1);
6227     token_source.ReInit(jj_input_stream);
6228     token = new Token();
6229     jj_ntk = -1;
6230     jj_gen = 0;
6231     for (int i = 0; i < 126; i++) jj_la1[i] = -1;
6232     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
6233   }
6234
6235   public PHPParser(PHPParserTokenManager tm) {
6236     if (jj_initialized_once) {
6237       System.out.println("ERROR: Second call to constructor of static parser.  You must");
6238       System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
6239       System.out.println("       during parser generation.");
6240       throw new Error();
6241     }
6242     jj_initialized_once = true;
6243     token_source = tm;
6244     token = new Token();
6245     jj_ntk = -1;
6246     jj_gen = 0;
6247     for (int i = 0; i < 126; i++) jj_la1[i] = -1;
6248     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
6249   }
6250
6251   public void ReInit(PHPParserTokenManager tm) {
6252     token_source = tm;
6253     token = new Token();
6254     jj_ntk = -1;
6255     jj_gen = 0;
6256     for (int i = 0; i < 126; i++) jj_la1[i] = -1;
6257     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
6258   }
6259
6260   static final private Token jj_consume_token(int kind) throws ParseException {
6261     Token oldToken;
6262     if ((oldToken = token).next != null) token = token.next;
6263     else token = token.next = token_source.getNextToken();
6264     jj_ntk = -1;
6265     if (token.kind == kind) {
6266       jj_gen++;
6267       if (++jj_gc > 100) {
6268         jj_gc = 0;
6269         for (int i = 0; i < jj_2_rtns.length; i++) {
6270           JJCalls c = jj_2_rtns[i];
6271           while (c != null) {
6272             if (c.gen < jj_gen) c.first = null;
6273             c = c.next;
6274           }
6275         }
6276       }
6277       return token;
6278     }
6279     token = oldToken;
6280     jj_kind = kind;
6281     throw generateParseException();
6282   }
6283
6284   static final private boolean jj_scan_token(int kind) {
6285     if (jj_scanpos == jj_lastpos) {
6286       jj_la--;
6287       if (jj_scanpos.next == null) {
6288         jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
6289       } else {
6290         jj_lastpos = jj_scanpos = jj_scanpos.next;
6291       }
6292     } else {
6293       jj_scanpos = jj_scanpos.next;
6294     }
6295     if (jj_rescan) {
6296       int i = 0; Token tok = token;
6297       while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
6298       if (tok != null) jj_add_error_token(kind, i);
6299     }
6300     return (jj_scanpos.kind != kind);
6301   }
6302
6303   static final public Token getNextToken() {
6304     if (token.next != null) token = token.next;
6305     else token = token.next = token_source.getNextToken();
6306     jj_ntk = -1;
6307     jj_gen++;
6308     return token;
6309   }
6310
6311   static final public Token getToken(int index) {
6312     Token t = lookingAhead ? jj_scanpos : token;
6313     for (int i = 0; i < index; i++) {
6314       if (t.next != null) t = t.next;
6315       else t = t.next = token_source.getNextToken();
6316     }
6317     return t;
6318   }
6319
6320   static final private int jj_ntk() {
6321     if ((jj_nt=token.next) == null)
6322       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
6323     else
6324       return (jj_ntk = jj_nt.kind);
6325   }
6326
6327   static private java.util.Vector jj_expentries = new java.util.Vector();
6328   static private int[] jj_expentry;
6329   static private int jj_kind = -1;
6330   static private int[] jj_lasttokens = new int[100];
6331   static private int jj_endpos;
6332
6333   static private void jj_add_error_token(int kind, int pos) {
6334     if (pos >= 100) return;
6335     if (pos == jj_endpos + 1) {
6336       jj_lasttokens[jj_endpos++] = kind;
6337     } else if (jj_endpos != 0) {
6338       jj_expentry = new int[jj_endpos];
6339       for (int i = 0; i < jj_endpos; i++) {
6340         jj_expentry[i] = jj_lasttokens[i];
6341       }
6342       boolean exists = false;
6343       for (java.util.Enumeration enum = jj_expentries.elements(); enum.hasMoreElements();) {
6344         int[] oldentry = (int[])(enum.nextElement());
6345         if (oldentry.length == jj_expentry.length) {
6346           exists = true;
6347           for (int i = 0; i < jj_expentry.length; i++) {
6348             if (oldentry[i] != jj_expentry[i]) {
6349               exists = false;
6350               break;
6351             }
6352           }
6353           if (exists) break;
6354         }
6355       }
6356       if (!exists) jj_expentries.addElement(jj_expentry);
6357       if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
6358     }
6359   }
6360
6361   static public ParseException generateParseException() {
6362     jj_expentries.removeAllElements();
6363     boolean[] la1tokens = new boolean[141];
6364     for (int i = 0; i < 141; i++) {
6365       la1tokens[i] = false;
6366     }
6367     if (jj_kind >= 0) {
6368       la1tokens[jj_kind] = true;
6369       jj_kind = -1;
6370     }
6371     for (int i = 0; i < 126; i++) {
6372       if (jj_la1[i] == jj_gen) {
6373         for (int j = 0; j < 32; j++) {
6374           if ((jj_la1_0[i] & (1<<j)) != 0) {
6375             la1tokens[j] = true;
6376           }
6377           if ((jj_la1_1[i] & (1<<j)) != 0) {
6378             la1tokens[32+j] = true;
6379           }
6380           if ((jj_la1_2[i] & (1<<j)) != 0) {
6381             la1tokens[64+j] = true;
6382           }
6383           if ((jj_la1_3[i] & (1<<j)) != 0) {
6384             la1tokens[96+j] = true;
6385           }
6386           if ((jj_la1_4[i] & (1<<j)) != 0) {
6387             la1tokens[128+j] = true;
6388           }
6389         }
6390       }
6391     }
6392     for (int i = 0; i < 141; i++) {
6393       if (la1tokens[i]) {
6394         jj_expentry = new int[1];
6395         jj_expentry[0] = i;
6396         jj_expentries.addElement(jj_expentry);
6397       }
6398     }
6399     jj_endpos = 0;
6400     jj_rescan_token();
6401     jj_add_error_token(0, 0);
6402     int[][] exptokseq = new int[jj_expentries.size()][];
6403     for (int i = 0; i < jj_expentries.size(); i++) {
6404       exptokseq[i] = (int[])jj_expentries.elementAt(i);
6405     }
6406     return new ParseException(token, exptokseq, tokenImage);
6407   }
6408
6409   static final public void enable_tracing() {
6410   }
6411
6412   static final public void disable_tracing() {
6413   }
6414
6415   static final private void jj_rescan_token() {
6416     jj_rescan = true;
6417     for (int i = 0; i < 8; i++) {
6418       JJCalls p = jj_2_rtns[i];
6419       do {
6420         if (p.gen > jj_gen) {
6421           jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
6422           switch (i) {
6423             case 0: jj_3_1(); break;
6424             case 1: jj_3_2(); break;
6425             case 2: jj_3_3(); break;
6426             case 3: jj_3_4(); break;
6427             case 4: jj_3_5(); break;
6428             case 5: jj_3_6(); break;
6429             case 6: jj_3_7(); break;
6430             case 7: jj_3_8(); break;
6431           }
6432         }
6433         p = p.next;
6434       } while (p != null);
6435     }
6436     jj_rescan = false;
6437   }
6438
6439   static final private void jj_save(int index, int xla) {
6440     JJCalls p = jj_2_rtns[index];
6441     while (p.gen > jj_gen) {
6442       if (p.next == null) { p = p.next = new JJCalls(); break; }
6443       p = p.next;
6444     }
6445     p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
6446   }
6447
6448   static final class JJCalls {
6449     int gen;
6450     Token first;
6451     int arg;
6452     JJCalls next;
6453   }
6454
6455 }