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