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