001/* GoloParser.java */
002/* Generated By:JJTree&JavaCC: Do not edit this line. GoloParser.java */
003package org.eclipse.golo.compiler.parser;
004
005import java.util.List;
006import java.util.LinkedList;
007import java.util.LinkedHashSet;
008import java.util.Collections;
009import java.math.BigDecimal;
010import java.math.BigInteger;
011
012import org.eclipse.golo.compiler.utils.StringUnescaping;
013import org.eclipse.golo.compiler.utils.StringBlockIndenter;
014import org.eclipse.golo.compiler.GoloCompilationException;
015import gololang.ir.ClassReference;
016import gololang.ir.FunctionRef;
017
018public class GoloParser/*@bgen(jjtree)*/implements GoloParserTreeConstants, GoloParserConstants {/*@bgen(jjtree)*/
019  protected JJTGoloParserState jjtree = new JJTGoloParserState();
020  public GoloCompilationException.Builder exceptionBuilder;
021
022  private boolean errorAlreadyReported = false;
023
024  void skipto(int kind, ParseException e, GoloASTNode node) throws ParseException {
025    if (exceptionBuilder == null) {
026      throw e;
027    }
028    if (!errorAlreadyReported) {
029      exceptionBuilder.report(e, node);
030      errorAlreadyReported = true;
031    }
032    if ("<EOF>".equals(e.tokenImage[0])) {
033      return;
034    }
035    Token t;
036    do {
037      t = getNextToken();
038    } while (t.kind != kind);
039  }
040
041  void error() throws ParseException {/*@bgen(jjtree) error */
042ASTerror jjtn000 = new ASTerror(JJTERROR);
043boolean jjtc000 = true;
044jjtree.openNodeScope(jjtn000);
045jjtn000.jjtSetFirstToken(getToken(1));
046try {throw generateParseException();/*@bgen(jjtree)*/
047} finally {
048  if (jjtc000) {
049    jjtree.closeNodeScope(jjtn000, true);
050    jjtn000.jjtSetLastToken(getToken(0));
051  }
052}
053  }
054
055  final public void BlankLine() throws ParseException {
056    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
057    case NEWLINE:{
058      jj_consume_token(NEWLINE);
059      break;
060      }
061    case COMMENT:{
062      jj_consume_token(COMMENT);
063      break;
064      }
065    default:
066      jj_la1[0] = jj_gen;
067      jj_consume_token(-1);
068      throw new ParseException();
069    }
070  }
071
072  final public void BlankLines() throws ParseException {
073    label_1:
074    while (true) {
075      if (jj_2_1(2)) {
076        ;
077      } else {
078        break label_1;
079      }
080      BlankLine();
081    }
082  }
083
084  final public String QualifiedName() throws ParseException {Token rootToken;
085  Token nextToken;
086  StringBuilder nameBuilder;
087    rootToken = jj_consume_token(IDENTIFIER);
088nameBuilder = new StringBuilder(rootToken.image);
089    label_2:
090    while (true) {
091      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
092      case 72:{
093        ;
094        break;
095        }
096      default:
097        jj_la1[1] = jj_gen;
098        break label_2;
099      }
100      jj_consume_token(72);
101      nextToken = jj_consume_token(IDENTIFIER);
102nameBuilder.append(".").append(nextToken.image);
103    }
104{if ("" != null) return nameBuilder.toString();}
105    throw new Error("Missing return statement in function");
106  }
107
108  final public List<String> Parameters() throws ParseException {Token rootToken;
109  Token nextToken;
110  List<String> parameters = new LinkedList<String>();
111    rootToken = jj_consume_token(IDENTIFIER);
112parameters.add(rootToken.image);
113    label_3:
114    while (true) {
115      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
116      case 73:{
117        ;
118        break;
119        }
120      default:
121        jj_la1[2] = jj_gen;
122        break label_3;
123      }
124      jj_consume_token(73);
125      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
126      case NEWLINE:
127      case COMMENT:{
128        BlankLine();
129        break;
130        }
131      default:
132        jj_la1[3] = jj_gen;
133        ;
134      }
135      nextToken = jj_consume_token(IDENTIFIER);
136parameters.add(nextToken.image);
137    }
138{if ("" != null) return parameters;}
139    throw new Error("Missing return statement in function");
140  }
141
142  final public List<String> AugmentationNames() throws ParseException {String rootToken;
143  String nextToken;
144  List<String> names = new LinkedList<String>();
145    rootToken = QualifiedName();
146names.add(rootToken);
147    label_4:
148    while (true) {
149      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
150      case 73:{
151        ;
152        break;
153        }
154      default:
155        jj_la1[4] = jj_gen;
156        break label_4;
157      }
158      jj_consume_token(73);
159      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
160      case NEWLINE:
161      case COMMENT:{
162        BlankLine();
163        break;
164        }
165      default:
166        jj_la1[5] = jj_gen;
167        ;
168      }
169      nextToken = QualifiedName();
170names.add(nextToken);
171    }
172{if ("" != null) return names;}
173    throw new Error("Missing return statement in function");
174  }
175
176  final public String StringLiteral() throws ParseException {Token literal;
177    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
178    case STRING:{
179      literal = jj_consume_token(STRING);
180{if ("" != null) return StringUnescaping.unescape(literal.image.substring(1, literal.image.length() - 1));}
181      break;
182      }
183    case MULTI_STRING:{
184      literal = jj_consume_token(MULTI_STRING);
185{if ("" != null) return literal.image.substring(3, literal.image.length() - 3);}
186      break;
187      }
188    default:
189      jj_la1[6] = jj_gen;
190      jj_consume_token(-1);
191      throw new ParseException();
192    }
193    throw new Error("Missing return statement in function");
194  }
195
196  final public Character CharLiteral() throws ParseException {Token literal;
197    literal = jj_consume_token(CHAR);
198{if ("" != null) return Character.valueOf(StringUnescaping.unescape(literal.image.substring(1, literal.image.length() - 1)).charAt(0));}
199    throw new Error("Missing return statement in function");
200  }
201
202  final public Long LongLiteral() throws ParseException {Token literal;
203    literal = jj_consume_token(LONG_NUMBER);
204String image = literal.image.substring(0, literal.image.length() - 2);
205    {if ("" != null) return Long.valueOf(image.replace("_",""));}
206    throw new Error("Missing return statement in function");
207  }
208
209  final public BigInteger BigIntegerLiteral() throws ParseException {Token literal;
210    literal = jj_consume_token(BIGINTEGER);
211String image = literal.image.substring(0, literal.image.length() - 2);
212    {if ("" != null) return new BigInteger(image.replace("_",""));}
213    throw new Error("Missing return statement in function");
214  }
215
216  final public Integer IntegerLiteral() throws ParseException {Token literal;
217    literal = jj_consume_token(NUMBER);
218String image = literal.image.replace("_","");
219    {if ("" != null) return Integer.valueOf(image);}
220    throw new Error("Missing return statement in function");
221  }
222
223  final public ClassReference ClassLiteral() throws ParseException {Token literal;
224    literal = jj_consume_token(CLASSREF);
225String image = literal.image;
226    int suffixLength = image.endsWith("class") ? 6 : 7;
227    {if ("" != null) return ClassReference.of(image.substring(0, image.length() - suffixLength));}
228    throw new Error("Missing return statement in function");
229  }
230
231  final public Double DoubleLiteral() throws ParseException {Token literal;
232    literal = jj_consume_token(FLOATING_NUMBER);
233{if ("" != null) return Double.valueOf(literal.image.replace("_", ""));}
234    throw new Error("Missing return statement in function");
235  }
236
237  final public Float FloatLiteral() throws ParseException {Token literal;
238    literal = jj_consume_token(FLOAT);
239{if ("" != null) return Float.valueOf(literal.image
240        .substring(0, literal.image.length() - 2)
241        .replace("_", ""));}
242    throw new Error("Missing return statement in function");
243  }
244
245  final public BigDecimal BigDecimalLiteral() throws ParseException {Token literal;
246    literal = jj_consume_token(BIGDECIMAL);
247{if ("" != null) return new BigDecimal(literal.image
248        .substring(0, literal.image.length() - 2)
249        .replace("_", ""));}
250    throw new Error("Missing return statement in function");
251  }
252
253  final public FunctionRef FunctionRef() throws ParseException {Token literal;
254    literal = jj_consume_token(FUNREF);
255String module = null;
256    String name;
257    int arity = -1;
258    boolean varargs = false;
259    String[] parts = literal.image.substring(1).split("::");
260    if (parts.length > 1) {
261      module = parts[0];
262      name = parts[1];
263    } else {
264      name = parts[0];
265    }
266    parts = name.split("\\\\");
267    if (parts.length > 1) {
268      name = parts[0];
269      if (parts[1].endsWith("...")) {
270        arity = Integer.valueOf(parts[1].substring(0, parts[1].length() - 3));
271        varargs = true;
272      } else {
273        arity = Integer.valueOf(parts[1]);
274      }
275    }
276    {if ("" != null) return FunctionRef.of(module, name, arity, varargs);}
277    throw new Error("Missing return statement in function");
278  }
279
280  final public String Documentation() throws ParseException {Token token;
281    token = jj_consume_token(DOCUMENTATION);
282String result = token.image.trim();
283    result = result.substring(4, result.length() - 4);
284    if (token.beginColumn > 1) {
285      result = StringBlockIndenter.unindent(result, token.beginColumn - 1);
286    }
287    {if ("" != null) return result;}
288    throw new Error("Missing return statement in function");
289  }
290
291// ............................................................................................. //
292  final public 
293ASTCompilationUnit CompilationUnit() throws ParseException {/*@bgen(jjtree) CompilationUnit */
294  ASTCompilationUnit jjtn000 = new ASTCompilationUnit(JJTCOMPILATIONUNIT);
295  boolean jjtc000 = true;
296  jjtree.openNodeScope(jjtn000);
297  jjtn000.jjtSetFirstToken(getToken(1));
298    try {
299      try {
300        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
301        case NEWLINE:
302        case MODULE:
303        case COMMENT:
304        case DOCUMENTATION:{
305          BlankLines();
306          ModuleDeclaration();
307          BlankLines();
308          label_5:
309          while (true) {
310            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
311            case IMPORT:{
312              ;
313              break;
314              }
315            default:
316              jj_la1[7] = jj_gen;
317              break label_5;
318            }
319            ImportDeclaration();
320            BlankLines();
321          }
322          label_6:
323          while (true) {
324            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
325            case FUNCTION:
326            case LOCAL:
327            case AUGMENT:
328            case NAMEDAUGMENTATION:
329            case STRUCT:
330            case UNION:
331            case DECORATOR:
332            case VAR:
333            case LET:
334            case DOCUMENTATION:{
335              ;
336              break;
337              }
338            default:
339              jj_la1[8] = jj_gen;
340              break label_6;
341            }
342            try {
343              ToplevelDeclaration();
344              BlankLines();
345            } catch (ParseException e) {
346skipto(NEWLINE, e, jjtn000);
347            }
348          }
349          break;
350          }
351        default:
352          jj_la1[9] = jj_gen;
353          error();
354        }
355        jj_consume_token(0);
356      } catch (ParseException e) {
357skipto(NEWLINE, e, jjtn000);
358      }
359jjtree.closeNodeScope(jjtn000, true);
360    jjtc000 = false;
361    jjtn000.jjtSetLastToken(getToken(0));
362{if ("" != null) return jjtn000;}
363    } catch (Throwable jjte000) {
364if (jjtc000) {
365      jjtree.clearNodeScope(jjtn000);
366      jjtc000 = false;
367    } else {
368      jjtree.popNode();
369    }
370    if (jjte000 instanceof RuntimeException) {
371      {if (true) throw (RuntimeException)jjte000;}
372    }
373    if (jjte000 instanceof ParseException) {
374      {if (true) throw (ParseException)jjte000;}
375    }
376    {if (true) throw (Error)jjte000;}
377    } finally {
378if (jjtc000) {
379      jjtree.closeNodeScope(jjtn000, true);
380      jjtn000.jjtSetLastToken(getToken(0));
381    }
382    }
383    throw new Error("Missing return statement in function");
384  }
385
386  final public void ModuleDeclaration() throws ParseException {/*@bgen(jjtree) ModuleDeclaration */
387  ASTModuleDeclaration jjtn000 = new ASTModuleDeclaration(JJTMODULEDECLARATION);
388  boolean jjtc000 = true;
389  jjtree.openNodeScope(jjtn000);
390  jjtn000.jjtSetFirstToken(getToken(1));String name;
391  String documentation = null;
392    try {
393      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
394      case DOCUMENTATION:{
395        documentation = Documentation();
396        break;
397        }
398      default:
399        jj_la1[10] = jj_gen;
400        ;
401      }
402      jj_consume_token(MODULE);
403      name = QualifiedName();
404jjtree.closeNodeScope(jjtn000, true);
405    jjtc000 = false;
406    jjtn000.jjtSetLastToken(getToken(0));
407jjtn000.setName(name);
408    jjtn000.setDocumentation(documentation);
409    } catch (Throwable jjte000) {
410if (jjtc000) {
411      jjtree.clearNodeScope(jjtn000);
412      jjtc000 = false;
413    } else {
414      jjtree.popNode();
415    }
416    if (jjte000 instanceof RuntimeException) {
417      {if (true) throw (RuntimeException)jjte000;}
418    }
419    if (jjte000 instanceof ParseException) {
420      {if (true) throw (ParseException)jjte000;}
421    }
422    {if (true) throw (Error)jjte000;}
423    } finally {
424if (jjtc000) {
425      jjtree.closeNodeScope(jjtn000, true);
426      jjtn000.jjtSetLastToken(getToken(0));
427    }
428    }
429  }
430
431  final public List<String> MultiImport() throws ParseException {List<String> modules = new LinkedList<String>();
432  String rootName;
433  String nextName;
434    jj_consume_token(74);
435    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
436    case NEWLINE:
437    case COMMENT:{
438      BlankLine();
439      break;
440      }
441    default:
442      jj_la1[11] = jj_gen;
443      ;
444    }
445    rootName = QualifiedName();
446modules.add(rootName);
447    label_7:
448    while (true) {
449      jj_consume_token(73);
450      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
451      case NEWLINE:
452      case COMMENT:{
453        BlankLine();
454        break;
455        }
456      default:
457        jj_la1[12] = jj_gen;
458        ;
459      }
460      nextName = QualifiedName();
461modules.add(nextName);
462      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
463      case 73:{
464        ;
465        break;
466        }
467      default:
468        jj_la1[13] = jj_gen;
469        break label_7;
470      }
471    }
472    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
473    case NEWLINE:
474    case COMMENT:{
475      BlankLine();
476      break;
477      }
478    default:
479      jj_la1[14] = jj_gen;
480      ;
481    }
482    jj_consume_token(75);
483{if ("" != null) return modules;}
484    throw new Error("Missing return statement in function");
485  }
486
487  final public void ImportDeclaration() throws ParseException {/*@bgen(jjtree) ImportDeclaration */
488  ASTImportDeclaration jjtn000 = new ASTImportDeclaration(JJTIMPORTDECLARATION);
489  boolean jjtc000 = true;
490  jjtree.openNodeScope(jjtn000);
491  jjtn000.jjtSetFirstToken(getToken(1));String name;
492  Token relative = null;
493  List<String> multiples = null;
494    try {
495      try {
496        jj_consume_token(IMPORT);
497        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
498        case 72:{
499          relative = jj_consume_token(72);
500          break;
501          }
502        default:
503          jj_la1[15] = jj_gen;
504          ;
505        }
506        name = QualifiedName();
507        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
508        case 74:{
509          multiples = MultiImport();
510          break;
511          }
512        default:
513          jj_la1[16] = jj_gen;
514          ;
515        }
516jjtn000.setName(name);
517      if (relative != null) {
518        jjtn000.setRelative(true);
519      }
520      if (multiples != null) {
521        jjtn000.setMultiple(multiples);
522      }
523      } catch (ParseException e) {
524skipto(NEWLINE, e, jjtn000);
525      }
526    } catch (Throwable jjte000) {
527if (jjtc000) {
528      jjtree.clearNodeScope(jjtn000);
529      jjtc000 = false;
530    } else {
531      jjtree.popNode();
532    }
533    if (jjte000 instanceof RuntimeException) {
534      {if (true) throw (RuntimeException)jjte000;}
535    }
536    if (jjte000 instanceof ParseException) {
537      {if (true) throw (ParseException)jjte000;}
538    }
539    {if (true) throw (Error)jjte000;}
540    } finally {
541if (jjtc000) {
542      jjtree.closeNodeScope(jjtn000, true);
543      jjtn000.jjtSetLastToken(getToken(0));
544    }
545    }
546  }
547
548  final public void ToplevelDeclaration() throws ParseException {/*@bgen(jjtree) ToplevelDeclaration */
549  ASTToplevelDeclaration jjtn000 = new ASTToplevelDeclaration(JJTTOPLEVELDECLARATION);
550  boolean jjtc000 = true;
551  jjtree.openNodeScope(jjtn000);
552  jjtn000.jjtSetFirstToken(getToken(1));ASTFunctionDeclaration functionDecl;
553  ASTAugmentDeclaration augmentDecl;
554  ASTStructDeclaration structDecl;
555  ASTUnionDeclaration unionDecl;
556  ASTNamedAugmentationDeclaration namedAugmentationDecl;
557  ASTLetOrVar state;
558  Token local = null;
559  String documentation = null;
560    try {
561      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
562      case FUNCTION:
563      case LOCAL:
564      case AUGMENT:
565      case NAMEDAUGMENTATION:
566      case STRUCT:
567      case UNION:
568      case DECORATOR:
569      case DOCUMENTATION:{
570        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
571        case DOCUMENTATION:{
572          documentation = Documentation();
573          break;
574          }
575        default:
576          jj_la1[17] = jj_gen;
577          ;
578        }
579        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
580        case AUGMENT:{
581          augmentDecl = AugmentDeclaration();
582jjtree.closeNodeScope(jjtn000, true);
583        jjtc000 = false;
584        jjtn000.jjtSetLastToken(getToken(0));
585augmentDecl.setDocumentation(documentation);
586          break;
587          }
588        case FUNCTION:
589        case LOCAL:
590        case DECORATOR:{
591          label_8:
592          while (true) {
593            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
594            case DECORATOR:{
595              ;
596              break;
597              }
598            default:
599              jj_la1[18] = jj_gen;
600              break label_8;
601            }
602            DecoratorDeclaration();
603          }
604          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
605          case LOCAL:{
606            local = jj_consume_token(LOCAL);
607            break;
608            }
609          default:
610            jj_la1[19] = jj_gen;
611            ;
612          }
613          functionDecl = FunctionDeclaration();
614jjtree.closeNodeScope(jjtn000, true);
615        jjtc000 = false;
616        jjtn000.jjtSetLastToken(getToken(0));
617if (local != null) {
618          functionDecl.setLocal(true);
619        }
620        functionDecl.setDocumentation(documentation);
621          break;
622          }
623        case STRUCT:{
624          structDecl = StructDeclaration();
625jjtree.closeNodeScope(jjtn000, true);
626        jjtc000 = false;
627        jjtn000.jjtSetLastToken(getToken(0));
628structDecl.setDocumentation(documentation);
629          break;
630          }
631        case UNION:{
632          unionDecl = UnionDeclaration();
633jjtree.closeNodeScope(jjtn000, true);
634        jjtc000 = false;
635        jjtn000.jjtSetLastToken(getToken(0));
636unionDecl.setDocumentation(documentation);
637          break;
638          }
639        case NAMEDAUGMENTATION:{
640          namedAugmentationDecl = NamedAugmentationDeclaration();
641jjtree.closeNodeScope(jjtn000, true);
642        jjtc000 = false;
643        jjtn000.jjtSetLastToken(getToken(0));
644namedAugmentationDecl.setDocumentation(documentation);
645          break;
646          }
647        default:
648          jj_la1[20] = jj_gen;
649          jj_consume_token(-1);
650          throw new ParseException();
651        }
652        break;
653        }
654      case VAR:
655      case LET:{
656        state = LetOrVar();
657jjtree.closeNodeScope(jjtn000, true);
658    jjtc000 = false;
659    jjtn000.jjtSetLastToken(getToken(0));
660state.setModuleState(true);
661        break;
662        }
663      default:
664        jj_la1[21] = jj_gen;
665        jj_consume_token(-1);
666        throw new ParseException();
667      }
668    } catch (Throwable jjte000) {
669if (jjtc000) {
670      jjtree.clearNodeScope(jjtn000);
671      jjtc000 = false;
672    } else {
673      jjtree.popNode();
674    }
675    if (jjte000 instanceof RuntimeException) {
676      {if (true) throw (RuntimeException)jjte000;}
677    }
678    if (jjte000 instanceof ParseException) {
679      {if (true) throw (ParseException)jjte000;}
680    }
681    {if (true) throw (Error)jjte000;}
682    } finally {
683if (jjtc000) {
684      jjtree.closeNodeScope(jjtn000, true);
685      jjtn000.jjtSetLastToken(getToken(0));
686    }
687    }
688  }
689
690  final public ASTMemberDeclaration MemberDeclaration() throws ParseException {/*@bgen(jjtree) MemberDeclaration */
691  ASTMemberDeclaration jjtn000 = new ASTMemberDeclaration(JJTMEMBERDECLARATION);
692  boolean jjtc000 = true;
693  jjtree.openNodeScope(jjtn000);
694  jjtn000.jjtSetFirstToken(getToken(1));Token name;
695  String documentation = null;
696    try {
697      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
698      case DOCUMENTATION:{
699        documentation = Documentation();
700        break;
701        }
702      default:
703        jj_la1[22] = jj_gen;
704        ;
705      }
706      name = jj_consume_token(IDENTIFIER);
707jjtree.closeNodeScope(jjtn000, true);
708    jjtc000 = false;
709    jjtn000.jjtSetLastToken(getToken(0));
710jjtn000.setName(name.image);
711    jjtn000.jjtSetFirstToken(name);
712    jjtn000.setDocumentation(documentation);
713    {if ("" != null) return jjtn000;}
714    } catch (Throwable jjte000) {
715if (jjtc000) {
716      jjtree.clearNodeScope(jjtn000);
717      jjtc000 = false;
718    } else {
719      jjtree.popNode();
720    }
721    if (jjte000 instanceof RuntimeException) {
722      {if (true) throw (RuntimeException)jjte000;}
723    }
724    if (jjte000 instanceof ParseException) {
725      {if (true) throw (ParseException)jjte000;}
726    }
727    {if (true) throw (Error)jjte000;}
728    } finally {
729if (jjtc000) {
730      jjtree.closeNodeScope(jjtn000, true);
731      jjtn000.jjtSetLastToken(getToken(0));
732    }
733    }
734    throw new Error("Missing return statement in function");
735  }
736
737  final public ASTStructDeclaration StructDeclaration() throws ParseException {/*@bgen(jjtree) StructDeclaration */
738  ASTStructDeclaration jjtn000 = new ASTStructDeclaration(JJTSTRUCTDECLARATION);
739  boolean jjtc000 = true;
740  jjtree.openNodeScope(jjtn000);
741  jjtn000.jjtSetFirstToken(getToken(1));Token name;
742    try {
743      jj_consume_token(STRUCT);
744      name = jj_consume_token(IDENTIFIER);
745      jj_consume_token(76);
746      jj_consume_token(77);
747      BlankLines();
748      MemberDeclaration();
749      BlankLines();
750      label_9:
751      while (true) {
752        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
753        case 73:{
754          ;
755          break;
756          }
757        default:
758          jj_la1[23] = jj_gen;
759          break label_9;
760        }
761        jj_consume_token(73);
762        BlankLines();
763        MemberDeclaration();
764        BlankLines();
765      }
766      jj_consume_token(75);
767jjtree.closeNodeScope(jjtn000, true);
768    jjtc000 = false;
769    jjtn000.jjtSetLastToken(getToken(0));
770jjtn000.setName(name.image);
771    {if ("" != null) return jjtn000;}
772    } catch (Throwable jjte000) {
773if (jjtc000) {
774      jjtree.clearNodeScope(jjtn000);
775      jjtc000 = false;
776    } else {
777      jjtree.popNode();
778    }
779    if (jjte000 instanceof RuntimeException) {
780      {if (true) throw (RuntimeException)jjte000;}
781    }
782    if (jjte000 instanceof ParseException) {
783      {if (true) throw (ParseException)jjte000;}
784    }
785    {if (true) throw (Error)jjte000;}
786    } finally {
787if (jjtc000) {
788      jjtree.closeNodeScope(jjtn000, true);
789      jjtn000.jjtSetLastToken(getToken(0));
790    }
791    }
792    throw new Error("Missing return statement in function");
793  }
794
795  final public void UnionValue() throws ParseException {/*@bgen(jjtree) UnionValue */
796  ASTUnionValue jjtn000 = new ASTUnionValue(JJTUNIONVALUE);
797  boolean jjtc000 = true;
798  jjtree.openNodeScope(jjtn000);
799  jjtn000.jjtSetFirstToken(getToken(1));Token name;
800  String documentation = null;
801    try {
802      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
803      case DOCUMENTATION:{
804        documentation = Documentation();
805        break;
806        }
807      default:
808        jj_la1[24] = jj_gen;
809        ;
810      }
811      name = jj_consume_token(IDENTIFIER);
812      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
813      case 76:{
814        jj_consume_token(76);
815        jj_consume_token(77);
816        BlankLines();
817        MemberDeclaration();
818        BlankLines();
819        label_10:
820        while (true) {
821          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
822          case 73:{
823            ;
824            break;
825            }
826          default:
827            jj_la1[25] = jj_gen;
828            break label_10;
829          }
830          jj_consume_token(73);
831          BlankLines();
832          MemberDeclaration();
833          BlankLines();
834        }
835        jj_consume_token(75);
836        break;
837        }
838      default:
839        jj_la1[26] = jj_gen;
840        ;
841      }
842jjtree.closeNodeScope(jjtn000, true);
843    jjtc000 = false;
844    jjtn000.jjtSetLastToken(getToken(0));
845jjtn000.setName(name.image);
846    jjtn000.jjtSetFirstToken(name);
847    jjtn000.setDocumentation(documentation);
848    } catch (Throwable jjte000) {
849if (jjtc000) {
850      jjtree.clearNodeScope(jjtn000);
851      jjtc000 = false;
852    } else {
853      jjtree.popNode();
854    }
855    if (jjte000 instanceof RuntimeException) {
856      {if (true) throw (RuntimeException)jjte000;}
857    }
858    if (jjte000 instanceof ParseException) {
859      {if (true) throw (ParseException)jjte000;}
860    }
861    {if (true) throw (Error)jjte000;}
862    } finally {
863if (jjtc000) {
864      jjtree.closeNodeScope(jjtn000, true);
865      jjtn000.jjtSetLastToken(getToken(0));
866    }
867    }
868  }
869
870  final public ASTUnionDeclaration UnionDeclaration() throws ParseException {/*@bgen(jjtree) UnionDeclaration */
871  ASTUnionDeclaration jjtn000 = new ASTUnionDeclaration(JJTUNIONDECLARATION);
872  boolean jjtc000 = true;
873  jjtree.openNodeScope(jjtn000);
874  jjtn000.jjtSetFirstToken(getToken(1));Token name;
875  Token valueName;
876    try {
877      jj_consume_token(UNION);
878      name = jj_consume_token(IDENTIFIER);
879      jj_consume_token(76);
880      jj_consume_token(77);
881      BlankLines();
882      label_11:
883      while (true) {
884        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
885        case IDENTIFIER:
886        case DOCUMENTATION:{
887          ;
888          break;
889          }
890        default:
891          jj_la1[27] = jj_gen;
892          break label_11;
893        }
894        UnionValue();
895        BlankLines();
896      }
897      jj_consume_token(75);
898jjtree.closeNodeScope(jjtn000, true);
899    jjtc000 = false;
900    jjtn000.jjtSetLastToken(getToken(0));
901jjtn000.setName(name.image);
902    {if ("" != null) return jjtn000;}
903    } catch (Throwable jjte000) {
904if (jjtc000) {
905      jjtree.clearNodeScope(jjtn000);
906      jjtc000 = false;
907    } else {
908      jjtree.popNode();
909    }
910    if (jjte000 instanceof RuntimeException) {
911      {if (true) throw (RuntimeException)jjte000;}
912    }
913    if (jjte000 instanceof ParseException) {
914      {if (true) throw (ParseException)jjte000;}
915    }
916    {if (true) throw (Error)jjte000;}
917    } finally {
918if (jjtc000) {
919      jjtree.closeNodeScope(jjtn000, true);
920      jjtn000.jjtSetLastToken(getToken(0));
921    }
922    }
923    throw new Error("Missing return statement in function");
924  }
925
926  final public void AugmentationDeclaration() throws ParseException {String documentation = null;
927  ASTFunctionDeclaration func;
928    jj_consume_token(77);
929    BlankLines();
930    label_12:
931    while (true) {
932      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
933      case FUNCTION:
934      case DECORATOR:
935      case DOCUMENTATION:{
936        ;
937        break;
938        }
939      default:
940        jj_la1[28] = jj_gen;
941        break label_12;
942      }
943      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
944      case DOCUMENTATION:{
945        documentation = Documentation();
946        break;
947        }
948      default:
949        jj_la1[29] = jj_gen;
950        ;
951      }
952      label_13:
953      while (true) {
954        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
955        case DECORATOR:{
956          ;
957          break;
958          }
959        default:
960          jj_la1[30] = jj_gen;
961          break label_13;
962        }
963        DecoratorDeclaration();
964      }
965      func = FunctionDeclaration();
966func.setAugmentation(true);
967        func.setDocumentation(documentation);
968      BlankLines();
969    }
970    jj_consume_token(75);
971  }
972
973  final public ASTNamedAugmentationDeclaration NamedAugmentationDeclaration() throws ParseException {/*@bgen(jjtree) NamedAugmentationDeclaration */
974  ASTNamedAugmentationDeclaration jjtn000 = new ASTNamedAugmentationDeclaration(JJTNAMEDAUGMENTATIONDECLARATION);
975  boolean jjtc000 = true;
976  jjtree.openNodeScope(jjtn000);
977  jjtn000.jjtSetFirstToken(getToken(1));Token name;
978    try {
979      jj_consume_token(NAMEDAUGMENTATION);
980      name = jj_consume_token(IDENTIFIER);
981      jj_consume_token(76);
982      AugmentationDeclaration();
983jjtree.closeNodeScope(jjtn000, true);
984    jjtc000 = false;
985    jjtn000.jjtSetLastToken(getToken(0));
986jjtn000.setName(name.image);
987    {if ("" != null) return jjtn000;}
988    } catch (Throwable jjte000) {
989if (jjtc000) {
990      jjtree.clearNodeScope(jjtn000);
991      jjtc000 = false;
992    } else {
993      jjtree.popNode();
994    }
995    if (jjte000 instanceof RuntimeException) {
996      {if (true) throw (RuntimeException)jjte000;}
997    }
998    if (jjte000 instanceof ParseException) {
999      {if (true) throw (ParseException)jjte000;}
1000    }
1001    {if (true) throw (Error)jjte000;}
1002    } finally {
1003if (jjtc000) {
1004      jjtree.closeNodeScope(jjtn000, true);
1005      jjtn000.jjtSetLastToken(getToken(0));
1006    }
1007    }
1008    throw new Error("Missing return statement in function");
1009  }
1010
1011  final public ASTAugmentDeclaration AugmentDeclaration() throws ParseException {/*@bgen(jjtree) AugmentDeclaration */
1012  ASTAugmentDeclaration jjtn000 = new ASTAugmentDeclaration(JJTAUGMENTDECLARATION);
1013  boolean jjtc000 = true;
1014  jjtree.openNodeScope(jjtn000);
1015  jjtn000.jjtSetFirstToken(getToken(1));String target;
1016  List<String> names = null;
1017    try {
1018      jj_consume_token(AUGMENT);
1019      target = QualifiedName();
1020      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1021      case 77:{
1022        AugmentationDeclaration();
1023        break;
1024        }
1025      case WITH:{
1026        jj_consume_token(WITH);
1027        names = AugmentationNames();
1028        break;
1029        }
1030      default:
1031        jj_la1[31] = jj_gen;
1032        jj_consume_token(-1);
1033        throw new ParseException();
1034      }
1035jjtree.closeNodeScope(jjtn000, true);
1036    jjtc000 = false;
1037    jjtn000.jjtSetLastToken(getToken(0));
1038jjtn000.setTarget(target);
1039    jjtn000.setAugmentationNames(names);
1040    {if ("" != null) return jjtn000;}
1041    } catch (Throwable jjte000) {
1042if (jjtc000) {
1043      jjtree.clearNodeScope(jjtn000);
1044      jjtc000 = false;
1045    } else {
1046      jjtree.popNode();
1047    }
1048    if (jjte000 instanceof RuntimeException) {
1049      {if (true) throw (RuntimeException)jjte000;}
1050    }
1051    if (jjte000 instanceof ParseException) {
1052      {if (true) throw (ParseException)jjte000;}
1053    }
1054    {if (true) throw (Error)jjte000;}
1055    } finally {
1056if (jjtc000) {
1057      jjtree.closeNodeScope(jjtn000, true);
1058      jjtn000.jjtSetLastToken(getToken(0));
1059    }
1060    }
1061    throw new Error("Missing return statement in function");
1062  }
1063
1064  final public ASTFunctionDeclaration FunctionDeclaration() throws ParseException {/*@bgen(jjtree) FunctionDeclaration */
1065  ASTFunctionDeclaration jjtn000 = new ASTFunctionDeclaration(JJTFUNCTIONDECLARATION);
1066  boolean jjtc000 = true;
1067  jjtree.openNodeScope(jjtn000);
1068  jjtn000.jjtSetFirstToken(getToken(1));Token name;
1069    try {
1070      jj_consume_token(FUNCTION);
1071      name = jj_consume_token(IDENTIFIER);
1072      jj_consume_token(76);
1073      Function();
1074jjtree.closeNodeScope(jjtn000, true);
1075    jjtc000 = false;
1076    jjtn000.jjtSetLastToken(getToken(0));
1077jjtn000.setName(name.image);
1078    {if ("" != null) return jjtn000;}
1079    } catch (Throwable jjte000) {
1080if (jjtc000) {
1081      jjtree.clearNodeScope(jjtn000);
1082      jjtc000 = false;
1083    } else {
1084      jjtree.popNode();
1085    }
1086    if (jjte000 instanceof RuntimeException) {
1087      {if (true) throw (RuntimeException)jjte000;}
1088    }
1089    if (jjte000 instanceof ParseException) {
1090      {if (true) throw (ParseException)jjte000;}
1091    }
1092    {if (true) throw (Error)jjte000;}
1093    } finally {
1094if (jjtc000) {
1095      jjtree.closeNodeScope(jjtn000, true);
1096      jjtn000.jjtSetLastToken(getToken(0));
1097    }
1098    }
1099    throw new Error("Missing return statement in function");
1100  }
1101
1102  final public ASTDecoratorDeclaration DecoratorDeclaration() throws ParseException {/*@bgen(jjtree) DecoratorDeclaration */
1103  ASTDecoratorDeclaration jjtn000 = new ASTDecoratorDeclaration(JJTDECORATORDECLARATION);
1104  boolean jjtc000 = true;
1105  jjtree.openNodeScope(jjtn000);
1106  jjtn000.jjtSetFirstToken(getToken(1));Token constant = null;
1107    try {
1108      jj_consume_token(DECORATOR);
1109      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1110      case CONSTANT_INVOCATION:{
1111        constant = jj_consume_token(CONSTANT_INVOCATION);
1112        break;
1113        }
1114      default:
1115        jj_la1[32] = jj_gen;
1116        ;
1117      }
1118      if (jj_2_2(2)) {
1119        InvocationExpression();
1120      } else if (jj_2_3(2)) {
1121        Reference();
1122      } else {
1123        jj_consume_token(-1);
1124        throw new ParseException();
1125      }
1126      BlankLines();
1127jjtree.closeNodeScope(jjtn000, true);
1128    jjtc000 = false;
1129    jjtn000.jjtSetLastToken(getToken(0));
1130if (constant != null) {
1131        jjtn000.setConstant(true);
1132    }
1133    {if ("" != null) return jjtn000;}
1134    } catch (Throwable jjte000) {
1135if (jjtc000) {
1136      jjtree.clearNodeScope(jjtn000);
1137      jjtc000 = false;
1138    } else {
1139      jjtree.popNode();
1140    }
1141    if (jjte000 instanceof RuntimeException) {
1142      {if (true) throw (RuntimeException)jjte000;}
1143    }
1144    if (jjte000 instanceof ParseException) {
1145      {if (true) throw (ParseException)jjte000;}
1146    }
1147    {if (true) throw (Error)jjte000;}
1148    } finally {
1149if (jjtc000) {
1150      jjtree.closeNodeScope(jjtn000, true);
1151      jjtn000.jjtSetLastToken(getToken(0));
1152    }
1153    }
1154    throw new Error("Missing return statement in function");
1155  }
1156
1157// ............................................................................................. //
1158  final public 
1159void Statement() throws ParseException {
1160    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1161    case NEWLINE:
1162    case COMMENT:{
1163      BlankLine();
1164      break;
1165      }
1166    default:
1167      jj_la1[33] = jj_gen;
1168      if (jj_2_4(2)) {
1169        Assignment();
1170      } else if (jj_2_5(3)) {
1171        DestructuringAssignment();
1172      } else if (jj_2_6(2)) {
1173        LetOrVar();
1174      } else {
1175        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1176        case MATCH:
1177        case UNARY_OPERATOR:
1178        case NUMBER:
1179        case LONG_NUMBER:
1180        case BIGINTEGER:
1181        case FLOATING_NUMBER:
1182        case FLOAT:
1183        case BIGDECIMAL:
1184        case STRING:
1185        case CHAR:
1186        case NULL:
1187        case TRUE:
1188        case FALSE:
1189        case CLASSREF:
1190        case FUNREF:
1191        case COLL_START:
1192        case MULTI_STRING:
1193        case IDENTIFIER:
1194        case 77:
1195        case 78:
1196        case 81:
1197        case 82:{
1198          ExpressionStatement();
1199          break;
1200          }
1201        case RETURN:{
1202          Return();
1203          break;
1204          }
1205        case IF:{
1206          ConditionalBranching();
1207          break;
1208          }
1209        case WHILE:{
1210          WhileLoop();
1211          break;
1212          }
1213        case FOR:{
1214          ForLoop();
1215          break;
1216          }
1217        case FOREACH:{
1218          ForEachLoop();
1219          break;
1220          }
1221        case THROW:{
1222          Throw();
1223          break;
1224          }
1225        case TRY:{
1226          TryCatchFinally();
1227          break;
1228          }
1229        case CASE:{
1230          Case();
1231          break;
1232          }
1233        case CONTINUE:{
1234          Continue();
1235          break;
1236          }
1237        case BREAK:{
1238          Break();
1239          break;
1240          }
1241        default:
1242          jj_la1[34] = jj_gen;
1243          jj_consume_token(-1);
1244          throw new ParseException();
1245        }
1246      }
1247    }
1248  }
1249
1250  final public void Continue() throws ParseException {/*@bgen(jjtree) Continue */
1251  ASTContinue jjtn000 = new ASTContinue(JJTCONTINUE);
1252  boolean jjtc000 = true;
1253  jjtree.openNodeScope(jjtn000);
1254  jjtn000.jjtSetFirstToken(getToken(1));
1255    try {
1256      jj_consume_token(CONTINUE);
1257    } finally {
1258if (jjtc000) {
1259      jjtree.closeNodeScope(jjtn000, true);
1260      jjtn000.jjtSetLastToken(getToken(0));
1261    }
1262    }
1263  }
1264
1265  final public void Break() throws ParseException {/*@bgen(jjtree) Break */
1266  ASTBreak jjtn000 = new ASTBreak(JJTBREAK);
1267  boolean jjtc000 = true;
1268  jjtree.openNodeScope(jjtn000);
1269  jjtn000.jjtSetFirstToken(getToken(1));
1270    try {
1271      jj_consume_token(BREAK);
1272    } finally {
1273if (jjtc000) {
1274      jjtree.closeNodeScope(jjtn000, true);
1275      jjtn000.jjtSetLastToken(getToken(0));
1276    }
1277    }
1278  }
1279
1280  final public void Throw() throws ParseException {/*@bgen(jjtree) Throw */
1281  ASTThrow jjtn000 = new ASTThrow(JJTTHROW);
1282  boolean jjtc000 = true;
1283  jjtree.openNodeScope(jjtn000);
1284  jjtn000.jjtSetFirstToken(getToken(1));
1285    try {
1286      jj_consume_token(THROW);
1287      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1288      case NEWLINE:
1289      case COMMENT:{
1290        BlankLine();
1291        break;
1292        }
1293      default:
1294        jj_la1[35] = jj_gen;
1295        ;
1296      }
1297      ExpressionStatement();
1298    } catch (Throwable jjte000) {
1299if (jjtc000) {
1300      jjtree.clearNodeScope(jjtn000);
1301      jjtc000 = false;
1302    } else {
1303      jjtree.popNode();
1304    }
1305    if (jjte000 instanceof RuntimeException) {
1306      {if (true) throw (RuntimeException)jjte000;}
1307    }
1308    if (jjte000 instanceof ParseException) {
1309      {if (true) throw (ParseException)jjte000;}
1310    }
1311    {if (true) throw (Error)jjte000;}
1312    } finally {
1313if (jjtc000) {
1314      jjtree.closeNodeScope(jjtn000, true);
1315      jjtn000.jjtSetLastToken(getToken(0));
1316    }
1317    }
1318  }
1319
1320  final public void WhileLoop() throws ParseException {/*@bgen(jjtree) WhileLoop */
1321  ASTWhileLoop jjtn000 = new ASTWhileLoop(JJTWHILELOOP);
1322  boolean jjtc000 = true;
1323  jjtree.openNodeScope(jjtn000);
1324  jjtn000.jjtSetFirstToken(getToken(1));
1325    try {
1326      jj_consume_token(WHILE);
1327      ExpressionStatement();
1328      Block();
1329    } catch (Throwable jjte000) {
1330if (jjtc000) {
1331      jjtree.clearNodeScope(jjtn000);
1332      jjtc000 = false;
1333    } else {
1334      jjtree.popNode();
1335    }
1336    if (jjte000 instanceof RuntimeException) {
1337      {if (true) throw (RuntimeException)jjte000;}
1338    }
1339    if (jjte000 instanceof ParseException) {
1340      {if (true) throw (ParseException)jjte000;}
1341    }
1342    {if (true) throw (Error)jjte000;}
1343    } finally {
1344if (jjtc000) {
1345      jjtree.closeNodeScope(jjtn000, true);
1346      jjtn000.jjtSetLastToken(getToken(0));
1347    }
1348    }
1349  }
1350
1351  final public void ForLoop() throws ParseException {/*@bgen(jjtree) ForLoop */
1352  ASTForLoop jjtn000 = new ASTForLoop(JJTFORLOOP);
1353  boolean jjtc000 = true;
1354  jjtree.openNodeScope(jjtn000);
1355  jjtn000.jjtSetFirstToken(getToken(1));
1356    try {
1357      jj_consume_token(FOR);
1358      jj_consume_token(78);
1359      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1360      case NEWLINE:
1361      case COMMENT:{
1362        BlankLine();
1363        break;
1364        }
1365      default:
1366        jj_la1[36] = jj_gen;
1367        ;
1368      }
1369      LetOrVar();
1370      jj_consume_token(73);
1371      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1372      case NEWLINE:
1373      case COMMENT:{
1374        BlankLine();
1375        break;
1376        }
1377      default:
1378        jj_la1[37] = jj_gen;
1379        ;
1380      }
1381      ExpressionStatement();
1382      jj_consume_token(73);
1383      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1384      case NEWLINE:
1385      case COMMENT:{
1386        BlankLine();
1387        break;
1388        }
1389      default:
1390        jj_la1[38] = jj_gen;
1391        ;
1392      }
1393      Statement();
1394      jj_consume_token(79);
1395      if (jj_2_7(2)) {
1396        Block();
1397      } else {
1398        ;
1399      }
1400    } catch (Throwable jjte000) {
1401if (jjtc000) {
1402      jjtree.clearNodeScope(jjtn000);
1403      jjtc000 = false;
1404    } else {
1405      jjtree.popNode();
1406    }
1407    if (jjte000 instanceof RuntimeException) {
1408      {if (true) throw (RuntimeException)jjte000;}
1409    }
1410    if (jjte000 instanceof ParseException) {
1411      {if (true) throw (ParseException)jjte000;}
1412    }
1413    {if (true) throw (Error)jjte000;}
1414    } finally {
1415if (jjtc000) {
1416      jjtree.closeNodeScope(jjtn000, true);
1417      jjtn000.jjtSetLastToken(getToken(0));
1418    }
1419    }
1420  }
1421
1422  final public void ForEachLoop() throws ParseException {/*@bgen(jjtree) ForEachLoop */
1423  ASTForEachLoop jjtn000 = new ASTForEachLoop(JJTFOREACHLOOP);
1424  boolean jjtc000 = true;
1425  jjtree.openNodeScope(jjtn000);
1426  jjtn000.jjtSetFirstToken(getToken(1));Token elementId;
1427  List<String> names;
1428  Token varargsToken = null;
1429    try {
1430      jj_consume_token(FOREACH);
1431      if (jj_2_8(2)) {
1432        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1433        case IDENTIFIER:{
1434          elementId = jj_consume_token(IDENTIFIER);
1435          jj_consume_token(IN);
1436          ExpressionStatement();
1437          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1438          case WHEN:{
1439            jj_consume_token(WHEN);
1440            ExpressionStatement();
1441            break;
1442            }
1443          default:
1444            jj_la1[39] = jj_gen;
1445            ;
1446          }
1447          break;
1448          }
1449        case 78:{
1450          jj_consume_token(78);
1451          elementId = jj_consume_token(IDENTIFIER);
1452          jj_consume_token(IN);
1453          ExpressionStatement();
1454          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1455          case WHEN:{
1456            jj_consume_token(WHEN);
1457            ExpressionStatement();
1458            break;
1459            }
1460          default:
1461            jj_la1[40] = jj_gen;
1462            ;
1463          }
1464          jj_consume_token(79);
1465          break;
1466          }
1467        default:
1468          jj_la1[41] = jj_gen;
1469          jj_consume_token(-1);
1470          throw new ParseException();
1471        }
1472jjtn000.setElementIdentifier(elementId.image);
1473      } else if (jj_2_9(2)) {
1474        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1475        case IDENTIFIER:{
1476          names = DestructuredNames();
1477          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1478          case 80:{
1479            varargsToken = jj_consume_token(80);
1480            break;
1481            }
1482          default:
1483            jj_la1[42] = jj_gen;
1484            ;
1485          }
1486          jj_consume_token(IN);
1487          ExpressionStatement();
1488          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1489          case WHEN:{
1490            jj_consume_token(WHEN);
1491            ExpressionStatement();
1492            break;
1493            }
1494          default:
1495            jj_la1[43] = jj_gen;
1496            ;
1497          }
1498          break;
1499          }
1500        case 78:{
1501          jj_consume_token(78);
1502          names = DestructuredNames();
1503          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1504          case 80:{
1505            varargsToken = jj_consume_token(80);
1506            break;
1507            }
1508          default:
1509            jj_la1[44] = jj_gen;
1510            ;
1511          }
1512          jj_consume_token(IN);
1513          ExpressionStatement();
1514          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1515          case WHEN:{
1516            jj_consume_token(WHEN);
1517            ExpressionStatement();
1518            break;
1519            }
1520          default:
1521            jj_la1[45] = jj_gen;
1522            ;
1523          }
1524          jj_consume_token(79);
1525          break;
1526          }
1527        default:
1528          jj_la1[46] = jj_gen;
1529          jj_consume_token(-1);
1530          throw new ParseException();
1531        }
1532jjtn000.setNames(names);
1533      jjtn000.setVarargs(varargsToken != null);
1534      } else {
1535        jj_consume_token(-1);
1536        throw new ParseException();
1537      }
1538      if (jj_2_10(2)) {
1539        Block();
1540      } else {
1541        ;
1542      }
1543    } catch (Throwable jjte000) {
1544if (jjtc000) {
1545      jjtree.clearNodeScope(jjtn000);
1546      jjtc000 = false;
1547    } else {
1548      jjtree.popNode();
1549    }
1550    if (jjte000 instanceof RuntimeException) {
1551      {if (true) throw (RuntimeException)jjte000;}
1552    }
1553    if (jjte000 instanceof ParseException) {
1554      {if (true) throw (ParseException)jjte000;}
1555    }
1556    {if (true) throw (Error)jjte000;}
1557    } finally {
1558if (jjtc000) {
1559      jjtree.closeNodeScope(jjtn000, true);
1560      jjtn000.jjtSetLastToken(getToken(0));
1561    }
1562    }
1563  }
1564
1565  final public void TryCatchFinally() throws ParseException {/*@bgen(jjtree) TryCatchFinally */
1566  ASTTryCatchFinally jjtn000 = new ASTTryCatchFinally(JJTTRYCATCHFINALLY);
1567  boolean jjtc000 = true;
1568  jjtree.openNodeScope(jjtn000);
1569  jjtn000.jjtSetFirstToken(getToken(1));Token exceptionId;
1570    try {
1571      jj_consume_token(TRY);
1572      Block();
1573      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1574      case FINALLY:{
1575        jj_consume_token(FINALLY);
1576        Block();
1577jjtree.closeNodeScope(jjtn000, true);
1578        jjtc000 = false;
1579        jjtn000.jjtSetLastToken(getToken(0));
1580jjtn000.setExceptionId(null);
1581        break;
1582        }
1583      case CATCH:{
1584        jj_consume_token(CATCH);
1585        jj_consume_token(78);
1586        exceptionId = jj_consume_token(IDENTIFIER);
1587        jj_consume_token(79);
1588        Block();
1589        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1590        case FINALLY:{
1591          jj_consume_token(FINALLY);
1592          Block();
1593          break;
1594          }
1595        default:
1596          jj_la1[47] = jj_gen;
1597          ;
1598        }
1599jjtree.closeNodeScope(jjtn000, true);
1600        jjtc000 = false;
1601        jjtn000.jjtSetLastToken(getToken(0));
1602jjtn000.setExceptionId(exceptionId.image);
1603        break;
1604        }
1605      default:
1606        jj_la1[48] = jj_gen;
1607        jj_consume_token(-1);
1608        throw new ParseException();
1609      }
1610    } catch (Throwable jjte000) {
1611if (jjtc000) {
1612      jjtree.clearNodeScope(jjtn000);
1613      jjtc000 = false;
1614    } else {
1615      jjtree.popNode();
1616    }
1617    if (jjte000 instanceof RuntimeException) {
1618      {if (true) throw (RuntimeException)jjte000;}
1619    }
1620    if (jjte000 instanceof ParseException) {
1621      {if (true) throw (ParseException)jjte000;}
1622    }
1623    {if (true) throw (Error)jjte000;}
1624    } finally {
1625if (jjtc000) {
1626      jjtree.closeNodeScope(jjtn000, true);
1627      jjtn000.jjtSetLastToken(getToken(0));
1628    }
1629    }
1630  }
1631
1632  final public void ExpressionStatement() throws ParseException {/*@bgen(jjtree) ExpressionStatement */
1633  ASTExpressionStatement jjtn000 = new ASTExpressionStatement(JJTEXPRESSIONSTATEMENT);
1634  boolean jjtc000 = true;
1635  jjtree.openNodeScope(jjtn000);
1636  jjtn000.jjtSetFirstToken(getToken(1));
1637    try {
1638      OrIfNullExpression();
1639      if (jj_2_11(2)) {
1640        LocalDeclaration();
1641      } else {
1642        ;
1643      }
1644      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1645      case NEWLINE:
1646      case COMMENT:{
1647        BlankLine();
1648        break;
1649        }
1650      default:
1651        jj_la1[49] = jj_gen;
1652        ;
1653      }
1654    } catch (Throwable jjte000) {
1655if (jjtc000) {
1656      jjtree.clearNodeScope(jjtn000);
1657      jjtc000 = false;
1658    } else {
1659      jjtree.popNode();
1660    }
1661    if (jjte000 instanceof RuntimeException) {
1662      {if (true) throw (RuntimeException)jjte000;}
1663    }
1664    if (jjte000 instanceof ParseException) {
1665      {if (true) throw (ParseException)jjte000;}
1666    }
1667    {if (true) throw (Error)jjte000;}
1668    } finally {
1669if (jjtc000) {
1670      jjtree.closeNodeScope(jjtn000, true);
1671      jjtn000.jjtSetLastToken(getToken(0));
1672    }
1673    }
1674  }
1675
1676  final public void LocalDeclaration() throws ParseException {/*@bgen(jjtree) LocalDeclaration */
1677  ASTLocalDeclaration jjtn000 = new ASTLocalDeclaration(JJTLOCALDECLARATION);
1678  boolean jjtc000 = true;
1679  jjtree.openNodeScope(jjtn000);
1680  jjtn000.jjtSetFirstToken(getToken(1));
1681    try {
1682      jj_consume_token(WITH);
1683      jj_consume_token(77);
1684      label_14:
1685      while (true) {
1686        if (jj_2_12(3)) {
1687          Assignment();
1688        } else {
1689          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1690          case VAR:
1691          case LET:
1692          case IDENTIFIER:{
1693            DestructuringAssignment();
1694            break;
1695            }
1696          case NEWLINE:
1697          case COMMENT:{
1698            BlankLine();
1699            break;
1700            }
1701          default:
1702            jj_la1[50] = jj_gen;
1703            jj_consume_token(-1);
1704            throw new ParseException();
1705          }
1706        }
1707        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1708        case NEWLINE:
1709        case VAR:
1710        case LET:
1711        case IDENTIFIER:
1712        case COMMENT:{
1713          ;
1714          break;
1715          }
1716        default:
1717          jj_la1[51] = jj_gen;
1718          break label_14;
1719        }
1720      }
1721      jj_consume_token(75);
1722    } catch (Throwable jjte000) {
1723if (jjtc000) {
1724      jjtree.clearNodeScope(jjtn000);
1725      jjtc000 = false;
1726    } else {
1727      jjtree.popNode();
1728    }
1729    if (jjte000 instanceof RuntimeException) {
1730      {if (true) throw (RuntimeException)jjte000;}
1731    }
1732    if (jjte000 instanceof ParseException) {
1733      {if (true) throw (ParseException)jjte000;}
1734    }
1735    {if (true) throw (Error)jjte000;}
1736    } finally {
1737if (jjtc000) {
1738      jjtree.closeNodeScope(jjtn000, true);
1739      jjtn000.jjtSetLastToken(getToken(0));
1740    }
1741    }
1742  }
1743
1744  final public void Atom() throws ParseException {
1745    if (jj_2_13(2)) {
1746      FunctionInvocation();
1747    } else if (jj_2_14(2)) {
1748      Reference();
1749    } else {
1750      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1751      case MATCH:{
1752        Match();
1753        break;
1754        }
1755      case NUMBER:
1756      case LONG_NUMBER:
1757      case BIGINTEGER:
1758      case FLOATING_NUMBER:
1759      case FLOAT:
1760      case BIGDECIMAL:
1761      case STRING:
1762      case CHAR:
1763      case NULL:
1764      case TRUE:
1765      case FALSE:
1766      case CLASSREF:
1767      case FUNREF:
1768      case MULTI_STRING:{
1769        Literal();
1770        break;
1771        }
1772      case 77:
1773      case 81:
1774      case 82:{
1775        Function();
1776        break;
1777        }
1778      case COLL_START:{
1779        CollectionLiteral();
1780        break;
1781        }
1782      case 78:{
1783        jj_consume_token(78);
1784        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1785        case NEWLINE:
1786        case COMMENT:{
1787          BlankLine();
1788          break;
1789          }
1790        default:
1791          jj_la1[52] = jj_gen;
1792          ;
1793        }
1794        ExpressionStatement();
1795        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1796        case NEWLINE:
1797        case COMMENT:{
1798          BlankLine();
1799          break;
1800          }
1801        default:
1802          jj_la1[53] = jj_gen;
1803          ;
1804        }
1805        jj_consume_token(79);
1806        break;
1807        }
1808      default:
1809        jj_la1[54] = jj_gen;
1810        jj_consume_token(-1);
1811        throw new ParseException();
1812      }
1813    }
1814  }
1815
1816  final public void UnaryExpression() throws ParseException {Token token = null;
1817    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1818    case UNARY_OPERATOR:{
1819      token = jj_consume_token(UNARY_OPERATOR);
1820      break;
1821      }
1822    default:
1823      jj_la1[55] = jj_gen;
1824      ;
1825    }
1826    InvocationExpression();
1827ASTUnaryExpression jjtn001 = new ASTUnaryExpression(JJTUNARYEXPRESSION);
1828                                                     boolean jjtc001 = true;
1829                                                     jjtree.openNodeScope(jjtn001);
1830                                                     jjtn001.jjtSetFirstToken(getToken(1));
1831    try {
1832jjtree.closeNodeScope(jjtn001,  token != null);
1833                                                     jjtc001 = false;
1834                                                     jjtn001.jjtSetLastToken(getToken(0));
1835if (token != null) {
1836      jjtn001.setOperator(token.image);
1837    }
1838    } finally {
1839if (jjtc001) {
1840                                                       jjtree.closeNodeScope(jjtn001,  token != null);
1841                                                       jjtn001.jjtSetLastToken(getToken(0));
1842                                                     }
1843    }
1844  }
1845
1846  final public void InvocationExpression() throws ParseException {Token token = null;
1847  ASTAnonymousFunctionInvocation anon = null;
1848    Atom();
1849ASTInvocationExpression jjtn001 = new ASTInvocationExpression(JJTINVOCATIONEXPRESSION);
1850    boolean jjtc001 = true;
1851    jjtree.openNodeScope(jjtn001);
1852    jjtn001.jjtSetFirstToken(getToken(1));
1853    try {
1854      label_15:
1855      while (true) {
1856        if (jj_2_15(2)) {
1857          ;
1858        } else {
1859          break label_15;
1860        }
1861        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1862        case NEWLINE:
1863        case COMMENT:{
1864          BlankLine();
1865          break;
1866          }
1867        default:
1868          jj_la1[56] = jj_gen;
1869          ;
1870        }
1871        token = jj_consume_token(INVOCATION_OPERATOR);
1872        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1873        case NEWLINE:
1874        case COMMENT:{
1875          BlankLine();
1876          break;
1877          }
1878        default:
1879          jj_la1[57] = jj_gen;
1880          ;
1881        }
1882        MethodInvocation();
1883jjtn001.addOperator(token.image);
1884      }
1885    } catch (Throwable jjte001) {
1886if (jjtc001) {
1887      jjtree.clearNodeScope(jjtn001);
1888      jjtc001 = false;
1889    } else {
1890      jjtree.popNode();
1891    }
1892    if (jjte001 instanceof RuntimeException) {
1893      {if (true) throw (RuntimeException)jjte001;}
1894    }
1895    if (jjte001 instanceof ParseException) {
1896      {if (true) throw (ParseException)jjte001;}
1897    }
1898    {if (true) throw (Error)jjte001;}
1899    } finally {
1900if (jjtc001) {
1901      jjtree.closeNodeScope(jjtn001,  token != null);
1902      jjtn001.jjtSetLastToken(getToken(0));
1903    }
1904    }
1905    label_16:
1906    while (true) {
1907      if (jj_2_16(2)) {
1908        ;
1909      } else {
1910        break label_16;
1911      }
1912      anon = AnonymousFunctionInvocation();
1913anon.setOnExpression(true);
1914    }
1915  }
1916
1917  final public void MultiplicativeExpression() throws ParseException {Token token = null;
1918    UnaryExpression();
1919ASTMultiplicativeExpression jjtn001 = new ASTMultiplicativeExpression(JJTMULTIPLICATIVEEXPRESSION);
1920    boolean jjtc001 = true;
1921    jjtree.openNodeScope(jjtn001);
1922    jjtn001.jjtSetFirstToken(getToken(1));
1923    try {
1924      label_17:
1925      while (true) {
1926        if (jj_2_17(2)) {
1927          ;
1928        } else {
1929          break label_17;
1930        }
1931        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1932        case NEWLINE:
1933        case COMMENT:{
1934          BlankLine();
1935          break;
1936          }
1937        default:
1938          jj_la1[58] = jj_gen;
1939          ;
1940        }
1941        token = jj_consume_token(MULTIPLICATIVE_OPERATOR);
1942        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1943        case NEWLINE:
1944        case COMMENT:{
1945          BlankLine();
1946          break;
1947          }
1948        default:
1949          jj_la1[59] = jj_gen;
1950          ;
1951        }
1952        InvocationExpression();
1953jjtn001.addOperator(token.image);
1954      }
1955    } catch (Throwable jjte001) {
1956if (jjtc001) {
1957      jjtree.clearNodeScope(jjtn001);
1958      jjtc001 = false;
1959    } else {
1960      jjtree.popNode();
1961    }
1962    if (jjte001 instanceof RuntimeException) {
1963      {if (true) throw (RuntimeException)jjte001;}
1964    }
1965    if (jjte001 instanceof ParseException) {
1966      {if (true) throw (ParseException)jjte001;}
1967    }
1968    {if (true) throw (Error)jjte001;}
1969    } finally {
1970if (jjtc001) {
1971      jjtree.closeNodeScope(jjtn001,  token != null);
1972      jjtn001.jjtSetLastToken(getToken(0));
1973    }
1974    }
1975  }
1976
1977  final public void AdditiveExpression() throws ParseException {Token token = null;
1978    MultiplicativeExpression();
1979ASTAdditiveExpression jjtn001 = new ASTAdditiveExpression(JJTADDITIVEEXPRESSION);
1980    boolean jjtc001 = true;
1981    jjtree.openNodeScope(jjtn001);
1982    jjtn001.jjtSetFirstToken(getToken(1));
1983    try {
1984      label_18:
1985      while (true) {
1986        if (jj_2_18(2)) {
1987          ;
1988        } else {
1989          break label_18;
1990        }
1991        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
1992        case NEWLINE:
1993        case COMMENT:{
1994          BlankLine();
1995          break;
1996          }
1997        default:
1998          jj_la1[60] = jj_gen;
1999          ;
2000        }
2001        token = jj_consume_token(ADDITIVE_OPERATOR);
2002        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2003        case NEWLINE:
2004        case COMMENT:{
2005          BlankLine();
2006          break;
2007          }
2008        default:
2009          jj_la1[61] = jj_gen;
2010          ;
2011        }
2012        MultiplicativeExpression();
2013jjtn001.addOperator(token.image);
2014      }
2015    } catch (Throwable jjte001) {
2016if (jjtc001) {
2017      jjtree.clearNodeScope(jjtn001);
2018      jjtc001 = false;
2019    } else {
2020      jjtree.popNode();
2021    }
2022    if (jjte001 instanceof RuntimeException) {
2023      {if (true) throw (RuntimeException)jjte001;}
2024    }
2025    if (jjte001 instanceof ParseException) {
2026      {if (true) throw (ParseException)jjte001;}
2027    }
2028    {if (true) throw (Error)jjte001;}
2029    } finally {
2030if (jjtc001) {
2031      jjtree.closeNodeScope(jjtn001,  token != null);
2032      jjtn001.jjtSetLastToken(getToken(0));
2033    }
2034    }
2035  }
2036
2037  final public void RelationalExpression() throws ParseException {Token token = null;
2038    AdditiveExpression();
2039ASTRelationalExpression jjtn001 = new ASTRelationalExpression(JJTRELATIONALEXPRESSION);
2040    boolean jjtc001 = true;
2041    jjtree.openNodeScope(jjtn001);
2042    jjtn001.jjtSetFirstToken(getToken(1));
2043    try {
2044      if (jj_2_19(2)) {
2045        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2046        case NEWLINE:
2047        case COMMENT:{
2048          BlankLine();
2049          break;
2050          }
2051        default:
2052          jj_la1[62] = jj_gen;
2053          ;
2054        }
2055        token = jj_consume_token(RELATIONAL_OPERATOR);
2056        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2057        case NEWLINE:
2058        case COMMENT:{
2059          BlankLine();
2060          break;
2061          }
2062        default:
2063          jj_la1[63] = jj_gen;
2064          ;
2065        }
2066        AdditiveExpression();
2067jjtn001.setOperator(token.image);
2068      } else {
2069        ;
2070      }
2071    } catch (Throwable jjte001) {
2072if (jjtc001) {
2073      jjtree.clearNodeScope(jjtn001);
2074      jjtc001 = false;
2075    } else {
2076      jjtree.popNode();
2077    }
2078    if (jjte001 instanceof RuntimeException) {
2079      {if (true) throw (RuntimeException)jjte001;}
2080    }
2081    if (jjte001 instanceof ParseException) {
2082      {if (true) throw (ParseException)jjte001;}
2083    }
2084    {if (true) throw (Error)jjte001;}
2085    } finally {
2086if (jjtc001) {
2087      jjtree.closeNodeScope(jjtn001,  token != null);
2088      jjtn001.jjtSetLastToken(getToken(0));
2089    }
2090    }
2091  }
2092
2093  final public void EqualityExpression() throws ParseException {Token token = null;
2094    RelationalExpression();
2095ASTEqualityExpression jjtn001 = new ASTEqualityExpression(JJTEQUALITYEXPRESSION);
2096    boolean jjtc001 = true;
2097    jjtree.openNodeScope(jjtn001);
2098    jjtn001.jjtSetFirstToken(getToken(1));
2099    try {
2100      if (jj_2_20(2)) {
2101        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2102        case NEWLINE:
2103        case COMMENT:{
2104          BlankLine();
2105          break;
2106          }
2107        default:
2108          jj_la1[64] = jj_gen;
2109          ;
2110        }
2111        token = jj_consume_token(EQUALITY_OPERATOR);
2112        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2113        case NEWLINE:
2114        case COMMENT:{
2115          BlankLine();
2116          break;
2117          }
2118        default:
2119          jj_la1[65] = jj_gen;
2120          ;
2121        }
2122        RelationalExpression();
2123jjtn001.setOperator(token.image);
2124      } else {
2125        ;
2126      }
2127    } catch (Throwable jjte001) {
2128if (jjtc001) {
2129      jjtree.clearNodeScope(jjtn001);
2130      jjtc001 = false;
2131    } else {
2132      jjtree.popNode();
2133    }
2134    if (jjte001 instanceof RuntimeException) {
2135      {if (true) throw (RuntimeException)jjte001;}
2136    }
2137    if (jjte001 instanceof ParseException) {
2138      {if (true) throw (ParseException)jjte001;}
2139    }
2140    {if (true) throw (Error)jjte001;}
2141    } finally {
2142if (jjtc001) {
2143      jjtree.closeNodeScope(jjtn001,  token != null);
2144      jjtn001.jjtSetLastToken(getToken(0));
2145    }
2146    }
2147  }
2148
2149  final public void AndExpression() throws ParseException {int count = 0;
2150    EqualityExpression();
2151ASTAndExpression jjtn001 = new ASTAndExpression(JJTANDEXPRESSION);
2152    boolean jjtc001 = true;
2153    jjtree.openNodeScope(jjtn001);
2154    jjtn001.jjtSetFirstToken(getToken(1));
2155    try {
2156      label_19:
2157      while (true) {
2158        if (jj_2_21(2)) {
2159          ;
2160        } else {
2161          break label_19;
2162        }
2163        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2164        case NEWLINE:
2165        case COMMENT:{
2166          BlankLine();
2167          break;
2168          }
2169        default:
2170          jj_la1[66] = jj_gen;
2171          ;
2172        }
2173        jj_consume_token(AND_OPERATOR);
2174        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2175        case NEWLINE:
2176        case COMMENT:{
2177          BlankLine();
2178          break;
2179          }
2180        default:
2181          jj_la1[67] = jj_gen;
2182          ;
2183        }
2184        EqualityExpression();
2185jjtn001.increaseCount();
2186      count++;
2187      }
2188    } catch (Throwable jjte001) {
2189if (jjtc001) {
2190      jjtree.clearNodeScope(jjtn001);
2191      jjtc001 = false;
2192    } else {
2193      jjtree.popNode();
2194    }
2195    if (jjte001 instanceof RuntimeException) {
2196      {if (true) throw (RuntimeException)jjte001;}
2197    }
2198    if (jjte001 instanceof ParseException) {
2199      {if (true) throw (ParseException)jjte001;}
2200    }
2201    {if (true) throw (Error)jjte001;}
2202    } finally {
2203if (jjtc001) {
2204      jjtree.closeNodeScope(jjtn001,  count > 0);
2205      jjtn001.jjtSetLastToken(getToken(0));
2206    }
2207    }
2208  }
2209
2210  final public void OrExpression() throws ParseException {int count = 0;
2211    AndExpression();
2212ASTOrExpression jjtn001 = new ASTOrExpression(JJTOREXPRESSION);
2213    boolean jjtc001 = true;
2214    jjtree.openNodeScope(jjtn001);
2215    jjtn001.jjtSetFirstToken(getToken(1));
2216    try {
2217      label_20:
2218      while (true) {
2219        if (jj_2_22(2)) {
2220          ;
2221        } else {
2222          break label_20;
2223        }
2224        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2225        case NEWLINE:
2226        case COMMENT:{
2227          BlankLine();
2228          break;
2229          }
2230        default:
2231          jj_la1[68] = jj_gen;
2232          ;
2233        }
2234        jj_consume_token(OR_OPERATOR);
2235        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2236        case NEWLINE:
2237        case COMMENT:{
2238          BlankLine();
2239          break;
2240          }
2241        default:
2242          jj_la1[69] = jj_gen;
2243          ;
2244        }
2245        AndExpression();
2246jjtn001.increaseCount();
2247      count++;
2248      }
2249    } catch (Throwable jjte001) {
2250if (jjtc001) {
2251      jjtree.clearNodeScope(jjtn001);
2252      jjtc001 = false;
2253    } else {
2254      jjtree.popNode();
2255    }
2256    if (jjte001 instanceof RuntimeException) {
2257      {if (true) throw (RuntimeException)jjte001;}
2258    }
2259    if (jjte001 instanceof ParseException) {
2260      {if (true) throw (ParseException)jjte001;}
2261    }
2262    {if (true) throw (Error)jjte001;}
2263    } finally {
2264if (jjtc001) {
2265      jjtree.closeNodeScope(jjtn001,  count > 0);
2266      jjtn001.jjtSetLastToken(getToken(0));
2267    }
2268    }
2269  }
2270
2271  final public void OrIfNullExpression() throws ParseException {int count = 0;
2272    OrExpression();
2273ASTOrIfNullExpression jjtn001 = new ASTOrIfNullExpression(JJTORIFNULLEXPRESSION);
2274    boolean jjtc001 = true;
2275    jjtree.openNodeScope(jjtn001);
2276    jjtn001.jjtSetFirstToken(getToken(1));
2277    try {
2278      label_21:
2279      while (true) {
2280        if (jj_2_23(2)) {
2281          ;
2282        } else {
2283          break label_21;
2284        }
2285        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2286        case NEWLINE:
2287        case COMMENT:{
2288          BlankLine();
2289          break;
2290          }
2291        default:
2292          jj_la1[70] = jj_gen;
2293          ;
2294        }
2295        jj_consume_token(OR_IFNULL_OPERATOR);
2296        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2297        case NEWLINE:
2298        case COMMENT:{
2299          BlankLine();
2300          break;
2301          }
2302        default:
2303          jj_la1[71] = jj_gen;
2304          ;
2305        }
2306        OrExpression();
2307jjtn001.increaseCount();
2308      count++;
2309      }
2310    } catch (Throwable jjte001) {
2311if (jjtc001) {
2312      jjtree.clearNodeScope(jjtn001);
2313      jjtc001 = false;
2314    } else {
2315      jjtree.popNode();
2316    }
2317    if (jjte001 instanceof RuntimeException) {
2318      {if (true) throw (RuntimeException)jjte001;}
2319    }
2320    if (jjte001 instanceof ParseException) {
2321      {if (true) throw (ParseException)jjte001;}
2322    }
2323    {if (true) throw (Error)jjte001;}
2324    } finally {
2325if (jjtc001) {
2326      jjtree.closeNodeScope(jjtn001,  count > 0);
2327      jjtn001.jjtSetLastToken(getToken(0));
2328    }
2329    }
2330  }
2331
2332  final public void MethodInvocation() throws ParseException {/*@bgen(jjtree) MethodInvocation */
2333  ASTMethodInvocation jjtn000 = new ASTMethodInvocation(JJTMETHODINVOCATION);
2334  boolean jjtc000 = true;
2335  jjtree.openNodeScope(jjtn000);
2336  jjtn000.jjtSetFirstToken(getToken(1));Token token;
2337    try {
2338      token = jj_consume_token(IDENTIFIER);
2339      Arguments();
2340      label_22:
2341      while (true) {
2342        if (jj_2_24(2)) {
2343          ;
2344        } else {
2345          break label_22;
2346        }
2347        AnonymousFunctionInvocation();
2348      }
2349jjtree.closeNodeScope(jjtn000, true);
2350    jjtc000 = false;
2351    jjtn000.jjtSetLastToken(getToken(0));
2352jjtn000.setName(token.image);
2353    } catch (Throwable jjte000) {
2354if (jjtc000) {
2355      jjtree.clearNodeScope(jjtn000);
2356      jjtc000 = false;
2357    } else {
2358      jjtree.popNode();
2359    }
2360    if (jjte000 instanceof RuntimeException) {
2361      {if (true) throw (RuntimeException)jjte000;}
2362    }
2363    if (jjte000 instanceof ParseException) {
2364      {if (true) throw (ParseException)jjte000;}
2365    }
2366    {if (true) throw (Error)jjte000;}
2367    } finally {
2368if (jjtc000) {
2369      jjtree.closeNodeScope(jjtn000, true);
2370      jjtn000.jjtSetLastToken(getToken(0));
2371    }
2372    }
2373  }
2374
2375  final public void Block() throws ParseException {/*@bgen(jjtree) Block */
2376  ASTBlock jjtn000 = new ASTBlock(JJTBLOCK);
2377  boolean jjtc000 = true;
2378  jjtree.openNodeScope(jjtn000);
2379  jjtn000.jjtSetFirstToken(getToken(1));
2380    try {
2381      try {
2382        jj_consume_token(77);
2383        label_23:
2384        while (true) {
2385          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2386          case NEWLINE:
2387          case RETURN:
2388          case IF:
2389          case WHILE:
2390          case FOR:
2391          case FOREACH:
2392          case THROW:
2393          case TRY:
2394          case CASE:
2395          case MATCH:
2396          case BREAK:
2397          case CONTINUE:
2398          case UNARY_OPERATOR:
2399          case VAR:
2400          case LET:
2401          case NUMBER:
2402          case LONG_NUMBER:
2403          case BIGINTEGER:
2404          case FLOATING_NUMBER:
2405          case FLOAT:
2406          case BIGDECIMAL:
2407          case STRING:
2408          case CHAR:
2409          case NULL:
2410          case TRUE:
2411          case FALSE:
2412          case CLASSREF:
2413          case FUNREF:
2414          case COLL_START:
2415          case MULTI_STRING:
2416          case IDENTIFIER:
2417          case COMMENT:
2418          case 77:
2419          case 78:
2420          case 81:
2421          case 82:{
2422            ;
2423            break;
2424            }
2425          default:
2426            jj_la1[72] = jj_gen;
2427            break label_23;
2428          }
2429          try {
2430            Statement();
2431          } catch (ParseException e) {
2432skipto(NEWLINE, e, jjtn000);
2433          }
2434        }
2435        jj_consume_token(75);
2436      } catch (ParseException e) {
2437skipto(NEWLINE, e, jjtn000);
2438      }
2439    } catch (Throwable jjte000) {
2440if (jjtc000) {
2441      jjtree.clearNodeScope(jjtn000);
2442      jjtc000 = false;
2443    } else {
2444      jjtree.popNode();
2445    }
2446    if (jjte000 instanceof RuntimeException) {
2447      {if (true) throw (RuntimeException)jjte000;}
2448    }
2449    if (jjte000 instanceof ParseException) {
2450      {if (true) throw (ParseException)jjte000;}
2451    }
2452    {if (true) throw (Error)jjte000;}
2453    } finally {
2454if (jjtc000) {
2455      jjtree.closeNodeScope(jjtn000, true);
2456      jjtn000.jjtSetLastToken(getToken(0));
2457    }
2458    }
2459  }
2460
2461  final public void Function() throws ParseException {/*@bgen(jjtree) Function */
2462  ASTFunction jjtn000 = new ASTFunction(JJTFUNCTION);
2463  boolean jjtc000 = true;
2464  jjtree.openNodeScope(jjtn000);
2465  jjtn000.jjtSetFirstToken(getToken(1));List<String> parameters = null;
2466  Token varargsToken = null;
2467  boolean compactForm = false;
2468    try {
2469      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2470      case 81:{
2471        jj_consume_token(81);
2472        parameters = Parameters();
2473        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2474        case 80:{
2475          varargsToken = jj_consume_token(80);
2476          break;
2477          }
2478        default:
2479          jj_la1[73] = jj_gen;
2480          ;
2481        }
2482        jj_consume_token(81);
2483        break;
2484        }
2485      default:
2486        jj_la1[74] = jj_gen;
2487        ;
2488      }
2489      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2490      case 77:{
2491        Block();
2492        break;
2493        }
2494      case 82:{
2495        jj_consume_token(82);
2496        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2497        case NEWLINE:
2498        case COMMENT:{
2499          BlankLine();
2500          break;
2501          }
2502        default:
2503          jj_la1[75] = jj_gen;
2504          ;
2505        }
2506        ExpressionStatement();
2507compactForm = true;
2508        break;
2509        }
2510      default:
2511        jj_la1[76] = jj_gen;
2512        jj_consume_token(-1);
2513        throw new ParseException();
2514      }
2515jjtree.closeNodeScope(jjtn000, true);
2516    jjtc000 = false;
2517    jjtn000.jjtSetLastToken(getToken(0));
2518if (parameters == null) {
2519      parameters = Collections.emptyList();
2520    }
2521    jjtn000.setCompactForm(compactForm);
2522    jjtn000.setParameters(parameters);
2523    jjtn000.setVarargs(varargsToken != null);
2524    } catch (Throwable jjte000) {
2525if (jjtc000) {
2526      jjtree.clearNodeScope(jjtn000);
2527      jjtc000 = false;
2528    } else {
2529      jjtree.popNode();
2530    }
2531    if (jjte000 instanceof RuntimeException) {
2532      {if (true) throw (RuntimeException)jjte000;}
2533    }
2534    if (jjte000 instanceof ParseException) {
2535      {if (true) throw (ParseException)jjte000;}
2536    }
2537    {if (true) throw (Error)jjte000;}
2538    } finally {
2539if (jjtc000) {
2540      jjtree.closeNodeScope(jjtn000, true);
2541      jjtn000.jjtSetLastToken(getToken(0));
2542    }
2543    }
2544  }
2545
2546  final public void Literal() throws ParseException {/*@bgen(jjtree) Literal */
2547  ASTLiteral jjtn000 = new ASTLiteral(JJTLITERAL);
2548  boolean jjtc000 = true;
2549  jjtree.openNodeScope(jjtn000);
2550  jjtn000.jjtSetFirstToken(getToken(1));Object value;
2551    try {
2552      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2553      case CLASSREF:{
2554        value = ClassLiteral();
2555jjtree.closeNodeScope(jjtn000, true);
2556      jjtc000 = false;
2557      jjtn000.jjtSetLastToken(getToken(0));
2558jjtn000.setLiteralValue(value);
2559        break;
2560        }
2561      case STRING:
2562      case MULTI_STRING:{
2563        value = StringLiteral();
2564jjtree.closeNodeScope(jjtn000, true);
2565      jjtc000 = false;
2566      jjtn000.jjtSetLastToken(getToken(0));
2567jjtn000.setLiteralValue(value);
2568        break;
2569        }
2570      case CHAR:{
2571        value = CharLiteral();
2572jjtree.closeNodeScope(jjtn000, true);
2573      jjtc000 = false;
2574      jjtn000.jjtSetLastToken(getToken(0));
2575jjtn000.setLiteralValue(value);
2576        break;
2577        }
2578      case BIGDECIMAL:{
2579        value = BigDecimalLiteral();
2580jjtree.closeNodeScope(jjtn000, true);
2581      jjtc000 = false;
2582      jjtn000.jjtSetLastToken(getToken(0));
2583jjtn000.setLiteralValue(value);
2584        break;
2585        }
2586      case BIGINTEGER:{
2587        value = BigIntegerLiteral();
2588jjtree.closeNodeScope(jjtn000, true);
2589      jjtc000 = false;
2590      jjtn000.jjtSetLastToken(getToken(0));
2591jjtn000.setLiteralValue(value);
2592        break;
2593        }
2594      case FLOAT:{
2595        value = FloatLiteral();
2596jjtree.closeNodeScope(jjtn000, true);
2597      jjtc000 = false;
2598      jjtn000.jjtSetLastToken(getToken(0));
2599jjtn000.setLiteralValue(value);
2600        break;
2601        }
2602      case FLOATING_NUMBER:{
2603        value = DoubleLiteral();
2604jjtree.closeNodeScope(jjtn000, true);
2605      jjtc000 = false;
2606      jjtn000.jjtSetLastToken(getToken(0));
2607jjtn000.setLiteralValue(value);
2608        break;
2609        }
2610      case LONG_NUMBER:{
2611        value = LongLiteral();
2612jjtree.closeNodeScope(jjtn000, true);
2613      jjtc000 = false;
2614      jjtn000.jjtSetLastToken(getToken(0));
2615jjtn000.setLiteralValue(value);
2616        break;
2617        }
2618      case NUMBER:{
2619        value = IntegerLiteral();
2620jjtree.closeNodeScope(jjtn000, true);
2621      jjtc000 = false;
2622      jjtn000.jjtSetLastToken(getToken(0));
2623jjtn000.setLiteralValue(value);
2624        break;
2625        }
2626      case NULL:{
2627        jj_consume_token(NULL);
2628jjtree.closeNodeScope(jjtn000, true);
2629      jjtc000 = false;
2630      jjtn000.jjtSetLastToken(getToken(0));
2631jjtn000.setLiteralValue(null);
2632        break;
2633        }
2634      case TRUE:{
2635        jj_consume_token(TRUE);
2636jjtree.closeNodeScope(jjtn000, true);
2637      jjtc000 = false;
2638      jjtn000.jjtSetLastToken(getToken(0));
2639jjtn000.setLiteralValue(Boolean.TRUE);
2640        break;
2641        }
2642      case FALSE:{
2643        jj_consume_token(FALSE);
2644jjtree.closeNodeScope(jjtn000, true);
2645      jjtc000 = false;
2646      jjtn000.jjtSetLastToken(getToken(0));
2647jjtn000.setLiteralValue(Boolean.FALSE);
2648        break;
2649        }
2650      case FUNREF:{
2651        value = FunctionRef();
2652jjtree.closeNodeScope(jjtn000, true);
2653      jjtc000 = false;
2654      jjtn000.jjtSetLastToken(getToken(0));
2655jjtn000.setLiteralValue(value);
2656        break;
2657        }
2658      default:
2659        jj_la1[77] = jj_gen;
2660        jj_consume_token(-1);
2661        throw new ParseException();
2662      }
2663    } catch (Throwable jjte000) {
2664if (jjtc000) {
2665      jjtree.clearNodeScope(jjtn000);
2666      jjtc000 = false;
2667    } else {
2668      jjtree.popNode();
2669    }
2670    if (jjte000 instanceof RuntimeException) {
2671      {if (true) throw (RuntimeException)jjte000;}
2672    }
2673    if (jjte000 instanceof ParseException) {
2674      {if (true) throw (ParseException)jjte000;}
2675    }
2676    {if (true) throw (Error)jjte000;}
2677    } finally {
2678if (jjtc000) {
2679      jjtree.closeNodeScope(jjtn000, true);
2680      jjtn000.jjtSetLastToken(getToken(0));
2681    }
2682    }
2683  }
2684
2685  final public void CollectionLiteral() throws ParseException {/*@bgen(jjtree) CollectionLiteral */
2686  ASTCollectionLiteral jjtn000 = new ASTCollectionLiteral(JJTCOLLECTIONLITERAL);
2687  boolean jjtc000 = true;
2688  jjtree.openNodeScope(jjtn000);
2689  jjtn000.jjtSetFirstToken(getToken(1));Token token;
2690  boolean isRange = false;
2691  boolean isComprehension = false;
2692    try {
2693      token = jj_consume_token(COLL_START);
2694      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2695      case NEWLINE:
2696      case COMMENT:{
2697        BlankLine();
2698        break;
2699        }
2700      default:
2701        jj_la1[78] = jj_gen;
2702        ;
2703      }
2704      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2705      case MATCH:
2706      case UNARY_OPERATOR:
2707      case NUMBER:
2708      case LONG_NUMBER:
2709      case BIGINTEGER:
2710      case FLOATING_NUMBER:
2711      case FLOAT:
2712      case BIGDECIMAL:
2713      case STRING:
2714      case CHAR:
2715      case NULL:
2716      case TRUE:
2717      case FALSE:
2718      case CLASSREF:
2719      case FUNREF:
2720      case COLL_START:
2721      case MULTI_STRING:
2722      case IDENTIFIER:
2723      case 77:
2724      case 78:
2725      case 81:
2726      case 82:{
2727        ExpressionStatement();
2728        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2729        case FOR:
2730        case FOREACH:
2731        case 73:
2732        case 83:{
2733          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2734          case 73:{
2735            label_24:
2736            while (true) {
2737              jj_consume_token(73);
2738              switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2739              case NEWLINE:
2740              case COMMENT:{
2741                BlankLine();
2742                break;
2743                }
2744              default:
2745                jj_la1[79] = jj_gen;
2746                ;
2747              }
2748              ExpressionStatement();
2749              switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2750              case 73:{
2751                ;
2752                break;
2753                }
2754              default:
2755                jj_la1[80] = jj_gen;
2756                break label_24;
2757              }
2758            }
2759            break;
2760            }
2761          case 83:{
2762            jj_consume_token(83);
2763            ExpressionStatement();
2764isRange = true;
2765            break;
2766            }
2767          case FOR:
2768          case FOREACH:{
2769            label_25:
2770            while (true) {
2771              switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2772              case FOREACH:{
2773                ForEachLoop();
2774                break;
2775                }
2776              case FOR:{
2777                ForLoop();
2778                break;
2779                }
2780              default:
2781                jj_la1[81] = jj_gen;
2782                jj_consume_token(-1);
2783                throw new ParseException();
2784              }
2785              switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2786              case FOR:
2787              case FOREACH:{
2788                ;
2789                break;
2790                }
2791              default:
2792                jj_la1[82] = jj_gen;
2793                break label_25;
2794              }
2795            }
2796isComprehension = true;
2797            break;
2798            }
2799          default:
2800            jj_la1[83] = jj_gen;
2801            jj_consume_token(-1);
2802            throw new ParseException();
2803          }
2804          break;
2805          }
2806        default:
2807          jj_la1[84] = jj_gen;
2808          ;
2809        }
2810        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2811        case NEWLINE:
2812        case COMMENT:{
2813          BlankLine();
2814          break;
2815          }
2816        default:
2817          jj_la1[85] = jj_gen;
2818          ;
2819        }
2820        break;
2821        }
2822      default:
2823        jj_la1[86] = jj_gen;
2824        ;
2825      }
2826      jj_consume_token(84);
2827jjtree.closeNodeScope(jjtn000, true);
2828    jjtc000 = false;
2829    jjtn000.jjtSetLastToken(getToken(0));
2830String image = token.image;
2831    jjtn000.setType(image.substring(0, image.length() - 1));
2832    if (jjtn000.getType().isEmpty()) {
2833      jjtn000.setType("tuple");
2834    }
2835    if (isRange) {
2836      jjtn000.setType("range");
2837    }
2838    jjtn000.setComprehension(isComprehension);
2839    } catch (Throwable jjte000) {
2840if (jjtc000) {
2841      jjtree.clearNodeScope(jjtn000);
2842      jjtc000 = false;
2843    } else {
2844      jjtree.popNode();
2845    }
2846    if (jjte000 instanceof RuntimeException) {
2847      {if (true) throw (RuntimeException)jjte000;}
2848    }
2849    if (jjte000 instanceof ParseException) {
2850      {if (true) throw (ParseException)jjte000;}
2851    }
2852    {if (true) throw (Error)jjte000;}
2853    } finally {
2854if (jjtc000) {
2855      jjtree.closeNodeScope(jjtn000, true);
2856      jjtn000.jjtSetLastToken(getToken(0));
2857    }
2858    }
2859  }
2860
2861  final public void Reference() throws ParseException {/*@bgen(jjtree) Reference */
2862  ASTReference jjtn000 = new ASTReference(JJTREFERENCE);
2863  boolean jjtc000 = true;
2864  jjtree.openNodeScope(jjtn000);
2865  jjtn000.jjtSetFirstToken(getToken(1));
2866    try {
2867      jj_consume_token(IDENTIFIER);
2868jjtree.closeNodeScope(jjtn000, true);
2869    jjtc000 = false;
2870    jjtn000.jjtSetLastToken(getToken(0));
2871jjtn000.setName(jjtn000.jjtGetFirstToken().image);
2872    } finally {
2873if (jjtc000) {
2874      jjtree.closeNodeScope(jjtn000, true);
2875      jjtn000.jjtSetLastToken(getToken(0));
2876    }
2877    }
2878  }
2879
2880  final public ASTDestructuringAssignment DestructuringAssignment() throws ParseException {/*@bgen(jjtree) DestructuringAssignment */
2881  ASTDestructuringAssignment jjtn000 = new ASTDestructuringAssignment(JJTDESTRUCTURINGASSIGNMENT);
2882  boolean jjtc000 = true;
2883  jjtree.openNodeScope(jjtn000);
2884  jjtn000.jjtSetFirstToken(getToken(1));List<String> names;
2885  Token varargsToken = null;
2886    try {
2887      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2888      case LET:{
2889        jj_consume_token(LET);
2890        names = DestructuredNames();
2891        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2892        case 80:{
2893          varargsToken = jj_consume_token(80);
2894          break;
2895          }
2896        default:
2897          jj_la1[87] = jj_gen;
2898          ;
2899        }
2900        jj_consume_token(76);
2901        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2902        case NEWLINE:
2903        case COMMENT:{
2904          BlankLine();
2905          break;
2906          }
2907        default:
2908          jj_la1[88] = jj_gen;
2909          ;
2910        }
2911        ExpressionStatement();
2912jjtree.closeNodeScope(jjtn000, true);
2913    jjtc000 = false;
2914    jjtn000.jjtSetLastToken(getToken(0));
2915jjtn000.setType(ASTLetOrVar.Type.LET);
2916    jjtn000.setNames(names);
2917    jjtn000.setVarargs(varargsToken != null);
2918    {if ("" != null) return jjtn000;}
2919        break;
2920        }
2921      case VAR:{
2922        jj_consume_token(VAR);
2923        names = DestructuredNames();
2924        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2925        case 80:{
2926          varargsToken = jj_consume_token(80);
2927          break;
2928          }
2929        default:
2930          jj_la1[89] = jj_gen;
2931          ;
2932        }
2933        jj_consume_token(76);
2934        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2935        case NEWLINE:
2936        case COMMENT:{
2937          BlankLine();
2938          break;
2939          }
2940        default:
2941          jj_la1[90] = jj_gen;
2942          ;
2943        }
2944        ExpressionStatement();
2945jjtree.closeNodeScope(jjtn000, true);
2946    jjtc000 = false;
2947    jjtn000.jjtSetLastToken(getToken(0));
2948jjtn000.setType(ASTLetOrVar.Type.VAR);
2949    jjtn000.setNames(names);
2950    jjtn000.setVarargs(varargsToken != null);
2951    {if ("" != null) return jjtn000;}
2952        break;
2953        }
2954      case IDENTIFIER:{
2955        names = DestructuredNames();
2956        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2957        case 80:{
2958          varargsToken = jj_consume_token(80);
2959          break;
2960          }
2961        default:
2962          jj_la1[91] = jj_gen;
2963          ;
2964        }
2965        jj_consume_token(76);
2966        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
2967        case NEWLINE:
2968        case COMMENT:{
2969          BlankLine();
2970          break;
2971          }
2972        default:
2973          jj_la1[92] = jj_gen;
2974          ;
2975        }
2976        ExpressionStatement();
2977jjtree.closeNodeScope(jjtn000, true);
2978    jjtc000 = false;
2979    jjtn000.jjtSetLastToken(getToken(0));
2980jjtn000.setType(null);
2981    jjtn000.setNames(names);
2982    jjtn000.setVarargs(varargsToken != null);
2983    {if ("" != null) return jjtn000;}
2984        break;
2985        }
2986      default:
2987        jj_la1[93] = jj_gen;
2988        jj_consume_token(-1);
2989        throw new ParseException();
2990      }
2991    } catch (Throwable jjte000) {
2992if (jjtc000) {
2993      jjtree.clearNodeScope(jjtn000);
2994      jjtc000 = false;
2995    } else {
2996      jjtree.popNode();
2997    }
2998    if (jjte000 instanceof RuntimeException) {
2999      {if (true) throw (RuntimeException)jjte000;}
3000    }
3001    if (jjte000 instanceof ParseException) {
3002      {if (true) throw (ParseException)jjte000;}
3003    }
3004    {if (true) throw (Error)jjte000;}
3005    } finally {
3006if (jjtc000) {
3007      jjtree.closeNodeScope(jjtn000, true);
3008      jjtn000.jjtSetLastToken(getToken(0));
3009    }
3010    }
3011    throw new Error("Missing return statement in function");
3012  }
3013
3014  final public List<String> DestructuredNames() throws ParseException {List<String> names = new LinkedList<String>();
3015  Token rootToken;
3016  Token nextToken;
3017    rootToken = jj_consume_token(IDENTIFIER);
3018names.add(rootToken.image);
3019    label_26:
3020    while (true) {
3021      jj_consume_token(73);
3022      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3023      case NEWLINE:
3024      case COMMENT:{
3025        BlankLine();
3026        break;
3027        }
3028      default:
3029        jj_la1[94] = jj_gen;
3030        ;
3031      }
3032      nextToken = jj_consume_token(IDENTIFIER);
3033names.add(nextToken.image);
3034      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3035      case 73:{
3036        ;
3037        break;
3038        }
3039      default:
3040        jj_la1[95] = jj_gen;
3041        break label_26;
3042      }
3043    }
3044{if ("" != null) return names;}
3045    throw new Error("Missing return statement in function");
3046  }
3047
3048  final public ASTLetOrVar LetOrVar() throws ParseException {/*@bgen(jjtree) LetOrVar */
3049  ASTLetOrVar jjtn000 = new ASTLetOrVar(JJTLETORVAR);
3050  boolean jjtc000 = true;
3051  jjtree.openNodeScope(jjtn000);
3052  jjtn000.jjtSetFirstToken(getToken(1));Token idToken;
3053    try {
3054      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3055      case LET:{
3056        jj_consume_token(LET);
3057        idToken = jj_consume_token(IDENTIFIER);
3058        jj_consume_token(76);
3059        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3060        case NEWLINE:
3061        case COMMENT:{
3062          BlankLine();
3063          break;
3064          }
3065        default:
3066          jj_la1[96] = jj_gen;
3067          ;
3068        }
3069        ExpressionStatement();
3070jjtree.closeNodeScope(jjtn000, true);
3071    jjtc000 = false;
3072    jjtn000.jjtSetLastToken(getToken(0));
3073jjtn000.setType(ASTLetOrVar.Type.LET);
3074    jjtn000.setName(idToken.image);
3075    {if ("" != null) return jjtn000;}
3076        break;
3077        }
3078      case VAR:{
3079        jj_consume_token(VAR);
3080        idToken = jj_consume_token(IDENTIFIER);
3081        jj_consume_token(76);
3082        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3083        case NEWLINE:
3084        case COMMENT:{
3085          BlankLine();
3086          break;
3087          }
3088        default:
3089          jj_la1[97] = jj_gen;
3090          ;
3091        }
3092        ExpressionStatement();
3093jjtree.closeNodeScope(jjtn000, true);
3094    jjtc000 = false;
3095    jjtn000.jjtSetLastToken(getToken(0));
3096jjtn000.setType(ASTLetOrVar.Type.VAR);
3097    jjtn000.setName(idToken.image);
3098    {if ("" != null) return jjtn000;}
3099        break;
3100        }
3101      default:
3102        jj_la1[98] = jj_gen;
3103        jj_consume_token(-1);
3104        throw new ParseException();
3105      }
3106    } catch (Throwable jjte000) {
3107if (jjtc000) {
3108      jjtree.clearNodeScope(jjtn000);
3109      jjtc000 = false;
3110    } else {
3111      jjtree.popNode();
3112    }
3113    if (jjte000 instanceof RuntimeException) {
3114      {if (true) throw (RuntimeException)jjte000;}
3115    }
3116    if (jjte000 instanceof ParseException) {
3117      {if (true) throw (ParseException)jjte000;}
3118    }
3119    {if (true) throw (Error)jjte000;}
3120    } finally {
3121if (jjtc000) {
3122      jjtree.closeNodeScope(jjtn000, true);
3123      jjtn000.jjtSetLastToken(getToken(0));
3124    }
3125    }
3126    throw new Error("Missing return statement in function");
3127  }
3128
3129  final public void Assignment() throws ParseException {/*@bgen(jjtree) Assignment */
3130  ASTAssignment jjtn000 = new ASTAssignment(JJTASSIGNMENT);
3131  boolean jjtc000 = true;
3132  jjtree.openNodeScope(jjtn000);
3133  jjtn000.jjtSetFirstToken(getToken(1));Token idToken;
3134    try {
3135      idToken = jj_consume_token(IDENTIFIER);
3136      jj_consume_token(76);
3137      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3138      case NEWLINE:
3139      case COMMENT:{
3140        BlankLine();
3141        break;
3142        }
3143      default:
3144        jj_la1[99] = jj_gen;
3145        ;
3146      }
3147      ExpressionStatement();
3148jjtree.closeNodeScope(jjtn000, true);
3149    jjtc000 = false;
3150    jjtn000.jjtSetLastToken(getToken(0));
3151jjtn000.setName(idToken.image);
3152    } catch (Throwable jjte000) {
3153if (jjtc000) {
3154      jjtree.clearNodeScope(jjtn000);
3155      jjtc000 = false;
3156    } else {
3157      jjtree.popNode();
3158    }
3159    if (jjte000 instanceof RuntimeException) {
3160      {if (true) throw (RuntimeException)jjte000;}
3161    }
3162    if (jjte000 instanceof ParseException) {
3163      {if (true) throw (ParseException)jjte000;}
3164    }
3165    {if (true) throw (Error)jjte000;}
3166    } finally {
3167if (jjtc000) {
3168      jjtree.closeNodeScope(jjtn000, true);
3169      jjtn000.jjtSetLastToken(getToken(0));
3170    }
3171    }
3172  }
3173
3174  final public void Return() throws ParseException {/*@bgen(jjtree) Return */
3175  ASTReturn jjtn000 = new ASTReturn(JJTRETURN);
3176  boolean jjtc000 = true;
3177  jjtree.openNodeScope(jjtn000);
3178  jjtn000.jjtSetFirstToken(getToken(1));
3179    try {
3180      jj_consume_token(RETURN);
3181      if (jj_2_25(2)) {
3182        BlankLines();
3183        ExpressionStatement();
3184      } else {
3185        ;
3186      }
3187    } catch (Throwable jjte000) {
3188if (jjtc000) {
3189      jjtree.clearNodeScope(jjtn000);
3190      jjtc000 = false;
3191    } else {
3192      jjtree.popNode();
3193    }
3194    if (jjte000 instanceof RuntimeException) {
3195      {if (true) throw (RuntimeException)jjte000;}
3196    }
3197    if (jjte000 instanceof ParseException) {
3198      {if (true) throw (ParseException)jjte000;}
3199    }
3200    {if (true) throw (Error)jjte000;}
3201    } finally {
3202if (jjtc000) {
3203      jjtree.closeNodeScope(jjtn000, true);
3204      jjtn000.jjtSetLastToken(getToken(0));
3205    }
3206    }
3207  }
3208
3209  final public void Argument() throws ParseException {/*@bgen(jjtree) Argument */
3210  ASTArgument jjtn000 = new ASTArgument(JJTARGUMENT);
3211  boolean jjtc000 = true;
3212  jjtree.openNodeScope(jjtn000);
3213  jjtn000.jjtSetFirstToken(getToken(1));Token parameterId = null;
3214  Token expression;
3215    try {
3216      if (jj_2_26(2)) {
3217        parameterId = jj_consume_token(IDENTIFIER);
3218        jj_consume_token(76);
3219      } else {
3220        ;
3221      }
3222      ExpressionStatement();
3223jjtree.closeNodeScope(jjtn000, true);
3224    jjtc000 = false;
3225    jjtn000.jjtSetLastToken(getToken(0));
3226if (parameterId != null) {
3227      jjtn000.setName(parameterId.image);
3228      jjtn000.setNamed(true);
3229    }
3230    } catch (Throwable jjte000) {
3231if (jjtc000) {
3232      jjtree.clearNodeScope(jjtn000);
3233      jjtc000 = false;
3234    } else {
3235      jjtree.popNode();
3236    }
3237    if (jjte000 instanceof RuntimeException) {
3238      {if (true) throw (RuntimeException)jjte000;}
3239    }
3240    if (jjte000 instanceof ParseException) {
3241      {if (true) throw (ParseException)jjte000;}
3242    }
3243    {if (true) throw (Error)jjte000;}
3244    } finally {
3245if (jjtc000) {
3246      jjtree.closeNodeScope(jjtn000, true);
3247      jjtn000.jjtSetLastToken(getToken(0));
3248    }
3249    }
3250  }
3251
3252  final public void Arguments() throws ParseException {
3253    jj_consume_token(78);
3254    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3255    case NEWLINE:
3256    case COMMENT:{
3257      BlankLine();
3258      break;
3259      }
3260    default:
3261      jj_la1[100] = jj_gen;
3262      ;
3263    }
3264    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3265    case MATCH:
3266    case UNARY_OPERATOR:
3267    case NUMBER:
3268    case LONG_NUMBER:
3269    case BIGINTEGER:
3270    case FLOATING_NUMBER:
3271    case FLOAT:
3272    case BIGDECIMAL:
3273    case STRING:
3274    case CHAR:
3275    case NULL:
3276    case TRUE:
3277    case FALSE:
3278    case CLASSREF:
3279    case FUNREF:
3280    case COLL_START:
3281    case MULTI_STRING:
3282    case IDENTIFIER:
3283    case 77:
3284    case 78:
3285    case 81:
3286    case 82:{
3287      Argument();
3288      label_27:
3289      while (true) {
3290        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3291        case 73:{
3292          ;
3293          break;
3294          }
3295        default:
3296          jj_la1[101] = jj_gen;
3297          break label_27;
3298        }
3299        jj_consume_token(73);
3300        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3301        case NEWLINE:
3302        case COMMENT:{
3303          BlankLine();
3304          break;
3305          }
3306        default:
3307          jj_la1[102] = jj_gen;
3308          ;
3309        }
3310        Argument();
3311      }
3312      break;
3313      }
3314    default:
3315      jj_la1[103] = jj_gen;
3316      ;
3317    }
3318    jj_consume_token(79);
3319  }
3320
3321  final public ASTAnonymousFunctionInvocation AnonymousFunctionInvocation() throws ParseException {/*@bgen(jjtree) AnonymousFunctionInvocation */
3322  ASTAnonymousFunctionInvocation jjtn000 = new ASTAnonymousFunctionInvocation(JJTANONYMOUSFUNCTIONINVOCATION);
3323  boolean jjtc000 = true;
3324  jjtree.openNodeScope(jjtn000);
3325  jjtn000.jjtSetFirstToken(getToken(1));Token constant = null;
3326    try {
3327      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3328      case CONSTANT_INVOCATION:{
3329        constant = jj_consume_token(CONSTANT_INVOCATION);
3330        break;
3331        }
3332      default:
3333        jj_la1[104] = jj_gen;
3334        ;
3335      }
3336      Arguments();
3337jjtree.closeNodeScope(jjtn000, true);
3338    jjtc000 = false;
3339    jjtn000.jjtSetLastToken(getToken(0));
3340if (constant != null) {
3341      jjtn000.setConstant(true);
3342    }
3343    {if ("" != null) return jjtn000;}
3344    } catch (Throwable jjte000) {
3345if (jjtc000) {
3346      jjtree.clearNodeScope(jjtn000);
3347      jjtc000 = false;
3348    } else {
3349      jjtree.popNode();
3350    }
3351    if (jjte000 instanceof RuntimeException) {
3352      {if (true) throw (RuntimeException)jjte000;}
3353    }
3354    if (jjte000 instanceof ParseException) {
3355      {if (true) throw (ParseException)jjte000;}
3356    }
3357    {if (true) throw (Error)jjte000;}
3358    } finally {
3359if (jjtc000) {
3360      jjtree.closeNodeScope(jjtn000, true);
3361      jjtn000.jjtSetLastToken(getToken(0));
3362    }
3363    }
3364    throw new Error("Missing return statement in function");
3365  }
3366
3367  final public void FunctionInvocation() throws ParseException {/*@bgen(jjtree) FunctionInvocation */
3368  ASTFunctionInvocation jjtn000 = new ASTFunctionInvocation(JJTFUNCTIONINVOCATION);
3369  boolean jjtc000 = true;
3370  jjtree.openNodeScope(jjtn000);
3371  jjtn000.jjtSetFirstToken(getToken(1));String name;
3372  Token constant = null;
3373    try {
3374      name = QualifiedName();
3375      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3376      case CONSTANT_INVOCATION:{
3377        constant = jj_consume_token(CONSTANT_INVOCATION);
3378        break;
3379        }
3380      default:
3381        jj_la1[105] = jj_gen;
3382        ;
3383      }
3384      Arguments();
3385      label_28:
3386      while (true) {
3387        if (jj_2_27(2)) {
3388          ;
3389        } else {
3390          break label_28;
3391        }
3392        AnonymousFunctionInvocation();
3393      }
3394jjtree.closeNodeScope(jjtn000, true);
3395    jjtc000 = false;
3396    jjtn000.jjtSetLastToken(getToken(0));
3397jjtn000.setName(name);
3398    if (constant != null) {
3399      jjtn000.setConstant(true);
3400    }
3401    } catch (Throwable jjte000) {
3402if (jjtc000) {
3403      jjtree.clearNodeScope(jjtn000);
3404      jjtc000 = false;
3405    } else {
3406      jjtree.popNode();
3407    }
3408    if (jjte000 instanceof RuntimeException) {
3409      {if (true) throw (RuntimeException)jjte000;}
3410    }
3411    if (jjte000 instanceof ParseException) {
3412      {if (true) throw (ParseException)jjte000;}
3413    }
3414    {if (true) throw (Error)jjte000;}
3415    } finally {
3416if (jjtc000) {
3417      jjtree.closeNodeScope(jjtn000, true);
3418      jjtn000.jjtSetLastToken(getToken(0));
3419    }
3420    }
3421  }
3422
3423  final public void ConditionalBranching() throws ParseException {/*@bgen(jjtree) ConditionalBranching */
3424  ASTConditionalBranching jjtn000 = new ASTConditionalBranching(JJTCONDITIONALBRANCHING);
3425  boolean jjtc000 = true;
3426  jjtree.openNodeScope(jjtn000);
3427  jjtn000.jjtSetFirstToken(getToken(1));
3428    try {
3429      jj_consume_token(IF);
3430      ExpressionStatement();
3431      Block();
3432      if (jj_2_28(2147483647)) {
3433        jj_consume_token(ELSE);
3434        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3435        case IF:{
3436          ConditionalBranching();
3437          break;
3438          }
3439        case 77:{
3440          Block();
3441          break;
3442          }
3443        default:
3444          jj_la1[106] = jj_gen;
3445          jj_consume_token(-1);
3446          throw new ParseException();
3447        }
3448      } else {
3449        ;
3450      }
3451    } catch (Throwable jjte000) {
3452if (jjtc000) {
3453      jjtree.clearNodeScope(jjtn000);
3454      jjtc000 = false;
3455    } else {
3456      jjtree.popNode();
3457    }
3458    if (jjte000 instanceof RuntimeException) {
3459      {if (true) throw (RuntimeException)jjte000;}
3460    }
3461    if (jjte000 instanceof ParseException) {
3462      {if (true) throw (ParseException)jjte000;}
3463    }
3464    {if (true) throw (Error)jjte000;}
3465    } finally {
3466if (jjtc000) {
3467      jjtree.closeNodeScope(jjtn000, true);
3468      jjtn000.jjtSetLastToken(getToken(0));
3469    }
3470    }
3471  }
3472
3473  final public void Case() throws ParseException {/*@bgen(jjtree) Case */
3474  ASTCase jjtn000 = new ASTCase(JJTCASE);
3475  boolean jjtc000 = true;
3476  jjtree.openNodeScope(jjtn000);
3477  jjtn000.jjtSetFirstToken(getToken(1));
3478    try {
3479      jj_consume_token(CASE);
3480      jj_consume_token(77);
3481      BlankLines();
3482      label_29:
3483      while (true) {
3484        jj_consume_token(WHEN);
3485        ExpressionStatement();
3486        Block();
3487        BlankLines();
3488        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3489        case WHEN:{
3490          ;
3491          break;
3492          }
3493        default:
3494          jj_la1[107] = jj_gen;
3495          break label_29;
3496        }
3497      }
3498      jj_consume_token(OTHERWISE);
3499      Block();
3500      BlankLines();
3501      jj_consume_token(75);
3502    } catch (Throwable jjte000) {
3503if (jjtc000) {
3504      jjtree.clearNodeScope(jjtn000);
3505      jjtc000 = false;
3506    } else {
3507      jjtree.popNode();
3508    }
3509    if (jjte000 instanceof RuntimeException) {
3510      {if (true) throw (RuntimeException)jjte000;}
3511    }
3512    if (jjte000 instanceof ParseException) {
3513      {if (true) throw (ParseException)jjte000;}
3514    }
3515    {if (true) throw (Error)jjte000;}
3516    } finally {
3517if (jjtc000) {
3518      jjtree.closeNodeScope(jjtn000, true);
3519      jjtn000.jjtSetLastToken(getToken(0));
3520    }
3521    }
3522  }
3523
3524  final public void Match() throws ParseException {/*@bgen(jjtree) Match */
3525  ASTMatch jjtn000 = new ASTMatch(JJTMATCH);
3526  boolean jjtc000 = true;
3527  jjtree.openNodeScope(jjtn000);
3528  jjtn000.jjtSetFirstToken(getToken(1));
3529    try {
3530      jj_consume_token(MATCH);
3531      jj_consume_token(77);
3532      BlankLines();
3533      label_30:
3534      while (true) {
3535        jj_consume_token(WHEN);
3536        BlankLines();
3537        ExpressionStatement();
3538        BlankLines();
3539        jj_consume_token(THEN);
3540        BlankLines();
3541        ExpressionStatement();
3542        BlankLines();
3543        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
3544        case WHEN:{
3545          ;
3546          break;
3547          }
3548        default:
3549          jj_la1[108] = jj_gen;
3550          break label_30;
3551        }
3552      }
3553      jj_consume_token(OTHERWISE);
3554      BlankLines();
3555      ExpressionStatement();
3556      BlankLines();
3557      jj_consume_token(75);
3558    } catch (Throwable jjte000) {
3559if (jjtc000) {
3560      jjtree.clearNodeScope(jjtn000);
3561      jjtc000 = false;
3562    } else {
3563      jjtree.popNode();
3564    }
3565    if (jjte000 instanceof RuntimeException) {
3566      {if (true) throw (RuntimeException)jjte000;}
3567    }
3568    if (jjte000 instanceof ParseException) {
3569      {if (true) throw (ParseException)jjte000;}
3570    }
3571    {if (true) throw (Error)jjte000;}
3572    } finally {
3573if (jjtc000) {
3574      jjtree.closeNodeScope(jjtn000, true);
3575      jjtn000.jjtSetLastToken(getToken(0));
3576    }
3577    }
3578  }
3579
3580  private boolean jj_2_1(int xla)
3581 {
3582    jj_la = xla; jj_lastpos = jj_scanpos = token;
3583    try { return !jj_3_1(); }
3584    catch(LookaheadSuccess ls) { return true; }
3585    finally { jj_save(0, xla); }
3586  }
3587
3588  private boolean jj_2_2(int xla)
3589 {
3590    jj_la = xla; jj_lastpos = jj_scanpos = token;
3591    try { return !jj_3_2(); }
3592    catch(LookaheadSuccess ls) { return true; }
3593    finally { jj_save(1, xla); }
3594  }
3595
3596  private boolean jj_2_3(int xla)
3597 {
3598    jj_la = xla; jj_lastpos = jj_scanpos = token;
3599    try { return !jj_3_3(); }
3600    catch(LookaheadSuccess ls) { return true; }
3601    finally { jj_save(2, xla); }
3602  }
3603
3604  private boolean jj_2_4(int xla)
3605 {
3606    jj_la = xla; jj_lastpos = jj_scanpos = token;
3607    try { return !jj_3_4(); }
3608    catch(LookaheadSuccess ls) { return true; }
3609    finally { jj_save(3, xla); }
3610  }
3611
3612  private boolean jj_2_5(int xla)
3613 {
3614    jj_la = xla; jj_lastpos = jj_scanpos = token;
3615    try { return !jj_3_5(); }
3616    catch(LookaheadSuccess ls) { return true; }
3617    finally { jj_save(4, xla); }
3618  }
3619
3620  private boolean jj_2_6(int xla)
3621 {
3622    jj_la = xla; jj_lastpos = jj_scanpos = token;
3623    try { return !jj_3_6(); }
3624    catch(LookaheadSuccess ls) { return true; }
3625    finally { jj_save(5, xla); }
3626  }
3627
3628  private boolean jj_2_7(int xla)
3629 {
3630    jj_la = xla; jj_lastpos = jj_scanpos = token;
3631    try { return !jj_3_7(); }
3632    catch(LookaheadSuccess ls) { return true; }
3633    finally { jj_save(6, xla); }
3634  }
3635
3636  private boolean jj_2_8(int xla)
3637 {
3638    jj_la = xla; jj_lastpos = jj_scanpos = token;
3639    try { return !jj_3_8(); }
3640    catch(LookaheadSuccess ls) { return true; }
3641    finally { jj_save(7, xla); }
3642  }
3643
3644  private boolean jj_2_9(int xla)
3645 {
3646    jj_la = xla; jj_lastpos = jj_scanpos = token;
3647    try { return !jj_3_9(); }
3648    catch(LookaheadSuccess ls) { return true; }
3649    finally { jj_save(8, xla); }
3650  }
3651
3652  private boolean jj_2_10(int xla)
3653 {
3654    jj_la = xla; jj_lastpos = jj_scanpos = token;
3655    try { return !jj_3_10(); }
3656    catch(LookaheadSuccess ls) { return true; }
3657    finally { jj_save(9, xla); }
3658  }
3659
3660  private boolean jj_2_11(int xla)
3661 {
3662    jj_la = xla; jj_lastpos = jj_scanpos = token;
3663    try { return !jj_3_11(); }
3664    catch(LookaheadSuccess ls) { return true; }
3665    finally { jj_save(10, xla); }
3666  }
3667
3668  private boolean jj_2_12(int xla)
3669 {
3670    jj_la = xla; jj_lastpos = jj_scanpos = token;
3671    try { return !jj_3_12(); }
3672    catch(LookaheadSuccess ls) { return true; }
3673    finally { jj_save(11, xla); }
3674  }
3675
3676  private boolean jj_2_13(int xla)
3677 {
3678    jj_la = xla; jj_lastpos = jj_scanpos = token;
3679    try { return !jj_3_13(); }
3680    catch(LookaheadSuccess ls) { return true; }
3681    finally { jj_save(12, xla); }
3682  }
3683
3684  private boolean jj_2_14(int xla)
3685 {
3686    jj_la = xla; jj_lastpos = jj_scanpos = token;
3687    try { return !jj_3_14(); }
3688    catch(LookaheadSuccess ls) { return true; }
3689    finally { jj_save(13, xla); }
3690  }
3691
3692  private boolean jj_2_15(int xla)
3693 {
3694    jj_la = xla; jj_lastpos = jj_scanpos = token;
3695    try { return !jj_3_15(); }
3696    catch(LookaheadSuccess ls) { return true; }
3697    finally { jj_save(14, xla); }
3698  }
3699
3700  private boolean jj_2_16(int xla)
3701 {
3702    jj_la = xla; jj_lastpos = jj_scanpos = token;
3703    try { return !jj_3_16(); }
3704    catch(LookaheadSuccess ls) { return true; }
3705    finally { jj_save(15, xla); }
3706  }
3707
3708  private boolean jj_2_17(int xla)
3709 {
3710    jj_la = xla; jj_lastpos = jj_scanpos = token;
3711    try { return !jj_3_17(); }
3712    catch(LookaheadSuccess ls) { return true; }
3713    finally { jj_save(16, xla); }
3714  }
3715
3716  private boolean jj_2_18(int xla)
3717 {
3718    jj_la = xla; jj_lastpos = jj_scanpos = token;
3719    try { return !jj_3_18(); }
3720    catch(LookaheadSuccess ls) { return true; }
3721    finally { jj_save(17, xla); }
3722  }
3723
3724  private boolean jj_2_19(int xla)
3725 {
3726    jj_la = xla; jj_lastpos = jj_scanpos = token;
3727    try { return !jj_3_19(); }
3728    catch(LookaheadSuccess ls) { return true; }
3729    finally { jj_save(18, xla); }
3730  }
3731
3732  private boolean jj_2_20(int xla)
3733 {
3734    jj_la = xla; jj_lastpos = jj_scanpos = token;
3735    try { return !jj_3_20(); }
3736    catch(LookaheadSuccess ls) { return true; }
3737    finally { jj_save(19, xla); }
3738  }
3739
3740  private boolean jj_2_21(int xla)
3741 {
3742    jj_la = xla; jj_lastpos = jj_scanpos = token;
3743    try { return !jj_3_21(); }
3744    catch(LookaheadSuccess ls) { return true; }
3745    finally { jj_save(20, xla); }
3746  }
3747
3748  private boolean jj_2_22(int xla)
3749 {
3750    jj_la = xla; jj_lastpos = jj_scanpos = token;
3751    try { return !jj_3_22(); }
3752    catch(LookaheadSuccess ls) { return true; }
3753    finally { jj_save(21, xla); }
3754  }
3755
3756  private boolean jj_2_23(int xla)
3757 {
3758    jj_la = xla; jj_lastpos = jj_scanpos = token;
3759    try { return !jj_3_23(); }
3760    catch(LookaheadSuccess ls) { return true; }
3761    finally { jj_save(22, xla); }
3762  }
3763
3764  private boolean jj_2_24(int xla)
3765 {
3766    jj_la = xla; jj_lastpos = jj_scanpos = token;
3767    try { return !jj_3_24(); }
3768    catch(LookaheadSuccess ls) { return true; }
3769    finally { jj_save(23, xla); }
3770  }
3771
3772  private boolean jj_2_25(int xla)
3773 {
3774    jj_la = xla; jj_lastpos = jj_scanpos = token;
3775    try { return !jj_3_25(); }
3776    catch(LookaheadSuccess ls) { return true; }
3777    finally { jj_save(24, xla); }
3778  }
3779
3780  private boolean jj_2_26(int xla)
3781 {
3782    jj_la = xla; jj_lastpos = jj_scanpos = token;
3783    try { return !jj_3_26(); }
3784    catch(LookaheadSuccess ls) { return true; }
3785    finally { jj_save(25, xla); }
3786  }
3787
3788  private boolean jj_2_27(int xla)
3789 {
3790    jj_la = xla; jj_lastpos = jj_scanpos = token;
3791    try { return !jj_3_27(); }
3792    catch(LookaheadSuccess ls) { return true; }
3793    finally { jj_save(26, xla); }
3794  }
3795
3796  private boolean jj_2_28(int xla)
3797 {
3798    jj_la = xla; jj_lastpos = jj_scanpos = token;
3799    try { return !jj_3_28(); }
3800    catch(LookaheadSuccess ls) { return true; }
3801    finally { jj_save(27, xla); }
3802  }
3803
3804  private boolean jj_3R_130()
3805 {
3806    if (jj_3R_31()) return true;
3807    return false;
3808  }
3809
3810  private boolean jj_3_12()
3811 {
3812    if (jj_3R_34()) return true;
3813    return false;
3814  }
3815
3816  private boolean jj_3R_90()
3817 {
3818    if (jj_scan_token(73)) return true;
3819    Token xsp;
3820    xsp = jj_scanpos;
3821    if (jj_3R_130()) jj_scanpos = xsp;
3822    if (jj_scan_token(IDENTIFIER)) return true;
3823    return false;
3824  }
3825
3826  private boolean jj_3R_42()
3827 {
3828    if (jj_scan_token(WITH)) return true;
3829    if (jj_scan_token(77)) return true;
3830    return false;
3831  }
3832
3833  private boolean jj_3R_69()
3834 {
3835    if (jj_3R_82()) return true;
3836    Token xsp;
3837    xsp = jj_scanpos;
3838    if (jj_3_11()) jj_scanpos = xsp;
3839    xsp = jj_scanpos;
3840    if (jj_3R_83()) jj_scanpos = xsp;
3841    return false;
3842  }
3843
3844  private boolean jj_3R_77()
3845 {
3846    if (jj_scan_token(IDENTIFIER)) return true;
3847    Token xsp;
3848    if (jj_3R_90()) return true;
3849    while (true) {
3850      xsp = jj_scanpos;
3851      if (jj_3R_90()) { jj_scanpos = xsp; break; }
3852    }
3853    return false;
3854  }
3855
3856  private boolean jj_3R_73()
3857 {
3858    if (jj_3R_77()) return true;
3859    return false;
3860  }
3861
3862  private boolean jj_3R_137()
3863 {
3864    if (jj_scan_token(TRY)) return true;
3865    return false;
3866  }
3867
3868  private boolean jj_3R_72()
3869 {
3870    if (jj_scan_token(VAR)) return true;
3871    if (jj_3R_77()) return true;
3872    return false;
3873  }
3874
3875  private boolean jj_3_10()
3876 {
3877    if (jj_3R_37()) return true;
3878    return false;
3879  }
3880
3881  private boolean jj_3R_41()
3882 {
3883    if (jj_scan_token(78)) return true;
3884    if (jj_3R_77()) return true;
3885    return false;
3886  }
3887
3888  private boolean jj_3R_71()
3889 {
3890    if (jj_scan_token(LET)) return true;
3891    if (jj_3R_77()) return true;
3892    return false;
3893  }
3894
3895  private boolean jj_3R_35()
3896 {
3897    Token xsp;
3898    xsp = jj_scanpos;
3899    if (jj_3R_71()) {
3900    jj_scanpos = xsp;
3901    if (jj_3R_72()) {
3902    jj_scanpos = xsp;
3903    if (jj_3R_73()) return true;
3904    }
3905    }
3906    return false;
3907  }
3908
3909  private boolean jj_3R_40()
3910 {
3911    if (jj_3R_77()) return true;
3912    return false;
3913  }
3914
3915  private boolean jj_3_9()
3916 {
3917    Token xsp;
3918    xsp = jj_scanpos;
3919    if (jj_3R_40()) {
3920    jj_scanpos = xsp;
3921    if (jj_3R_41()) return true;
3922    }
3923    return false;
3924  }
3925
3926  private boolean jj_3R_39()
3927 {
3928    if (jj_scan_token(78)) return true;
3929    if (jj_scan_token(IDENTIFIER)) return true;
3930    return false;
3931  }
3932
3933  private boolean jj_3R_38()
3934 {
3935    if (jj_scan_token(IDENTIFIER)) return true;
3936    if (jj_scan_token(IN)) return true;
3937    return false;
3938  }
3939
3940  private boolean jj_3R_33()
3941 {
3942    if (jj_scan_token(IDENTIFIER)) return true;
3943    return false;
3944  }
3945
3946  private boolean jj_3_8()
3947 {
3948    Token xsp;
3949    xsp = jj_scanpos;
3950    if (jj_3R_38()) {
3951    jj_scanpos = xsp;
3952    if (jj_3R_39()) return true;
3953    }
3954    return false;
3955  }
3956
3957  private boolean jj_3R_135()
3958 {
3959    if (jj_scan_token(FOREACH)) return true;
3960    return false;
3961  }
3962
3963  private boolean jj_3_7()
3964 {
3965    if (jj_3R_37()) return true;
3966    return false;
3967  }
3968
3969  private boolean jj_3R_128()
3970 {
3971    if (jj_3R_31()) return true;
3972    return false;
3973  }
3974
3975  private boolean jj_3R_134()
3976 {
3977    if (jj_scan_token(FOR)) return true;
3978    return false;
3979  }
3980
3981  private boolean jj_3R_133()
3982 {
3983    if (jj_scan_token(WHILE)) return true;
3984    return false;
3985  }
3986
3987  private boolean jj_3R_136()
3988 {
3989    if (jj_scan_token(THROW)) return true;
3990    return false;
3991  }
3992
3993  private boolean jj_3R_150()
3994 {
3995    if (jj_scan_token(FUNREF)) return true;
3996    return false;
3997  }
3998
3999  private boolean jj_3R_129()
4000 {
4001    if (jj_3R_69()) return true;
4002    return false;
4003  }
4004
4005  private boolean jj_3R_140()
4006 {
4007    if (jj_scan_token(BREAK)) return true;
4008    return false;
4009  }
4010
4011  private boolean jj_3R_97()
4012 {
4013    if (jj_scan_token(COLL_START)) return true;
4014    Token xsp;
4015    xsp = jj_scanpos;
4016    if (jj_3R_128()) jj_scanpos = xsp;
4017    xsp = jj_scanpos;
4018    if (jj_3R_129()) jj_scanpos = xsp;
4019    if (jj_scan_token(84)) return true;
4020    return false;
4021  }
4022
4023  private boolean jj_3R_139()
4024 {
4025    if (jj_scan_token(CONTINUE)) return true;
4026    return false;
4027  }
4028
4029  private boolean jj_3R_144()
4030 {
4031    if (jj_scan_token(BIGDECIMAL)) return true;
4032    return false;
4033  }
4034
4035  private boolean jj_3R_110()
4036 {
4037    if (jj_3R_140()) return true;
4038    return false;
4039  }
4040
4041  private boolean jj_3R_109()
4042 {
4043    if (jj_3R_139()) return true;
4044    return false;
4045  }
4046
4047  private boolean jj_3R_124()
4048 {
4049    if (jj_3R_150()) return true;
4050    return false;
4051  }
4052
4053  private boolean jj_3R_108()
4054 {
4055    if (jj_3R_138()) return true;
4056    return false;
4057  }
4058
4059  private boolean jj_3R_107()
4060 {
4061    if (jj_3R_137()) return true;
4062    return false;
4063  }
4064
4065  private boolean jj_3R_106()
4066 {
4067    if (jj_3R_136()) return true;
4068    return false;
4069  }
4070
4071  private boolean jj_3R_123()
4072 {
4073    if (jj_scan_token(FALSE)) return true;
4074    return false;
4075  }
4076
4077  private boolean jj_3R_105()
4078 {
4079    if (jj_3R_135()) return true;
4080    return false;
4081  }
4082
4083  private boolean jj_3R_104()
4084 {
4085    if (jj_3R_134()) return true;
4086    return false;
4087  }
4088
4089  private boolean jj_3R_146()
4090 {
4091    if (jj_scan_token(FLOAT)) return true;
4092    return false;
4093  }
4094
4095  private boolean jj_3R_122()
4096 {
4097    if (jj_scan_token(TRUE)) return true;
4098    return false;
4099  }
4100
4101  private boolean jj_3R_103()
4102 {
4103    if (jj_3R_133()) return true;
4104    return false;
4105  }
4106
4107  private boolean jj_3R_102()
4108 {
4109    if (jj_3R_132()) return true;
4110    return false;
4111  }
4112
4113  private boolean jj_3R_101()
4114 {
4115    if (jj_3R_131()) return true;
4116    return false;
4117  }
4118
4119  private boolean jj_3R_121()
4120 {
4121    if (jj_scan_token(NULL)) return true;
4122    return false;
4123  }
4124
4125  private boolean jj_3R_100()
4126 {
4127    if (jj_3R_69()) return true;
4128    return false;
4129  }
4130
4131  private boolean jj_3_6()
4132 {
4133    if (jj_3R_36()) return true;
4134    return false;
4135  }
4136
4137  private boolean jj_3R_120()
4138 {
4139    if (jj_3R_149()) return true;
4140    return false;
4141  }
4142
4143  private boolean jj_3R_147()
4144 {
4145    if (jj_scan_token(FLOATING_NUMBER)) return true;
4146    return false;
4147  }
4148
4149  private boolean jj_3_5()
4150 {
4151    if (jj_3R_35()) return true;
4152    return false;
4153  }
4154
4155  private boolean jj_3_4()
4156 {
4157    if (jj_3R_34()) return true;
4158    return false;
4159  }
4160
4161  private boolean jj_3R_89()
4162 {
4163    Token xsp;
4164    xsp = jj_scanpos;
4165    if (jj_3R_99()) {
4166    jj_scanpos = xsp;
4167    if (jj_3_4()) {
4168    jj_scanpos = xsp;
4169    if (jj_3_5()) {
4170    jj_scanpos = xsp;
4171    if (jj_3_6()) {
4172    jj_scanpos = xsp;
4173    if (jj_3R_100()) {
4174    jj_scanpos = xsp;
4175    if (jj_3R_101()) {
4176    jj_scanpos = xsp;
4177    if (jj_3R_102()) {
4178    jj_scanpos = xsp;
4179    if (jj_3R_103()) {
4180    jj_scanpos = xsp;
4181    if (jj_3R_104()) {
4182    jj_scanpos = xsp;
4183    if (jj_3R_105()) {
4184    jj_scanpos = xsp;
4185    if (jj_3R_106()) {
4186    jj_scanpos = xsp;
4187    if (jj_3R_107()) {
4188    jj_scanpos = xsp;
4189    if (jj_3R_108()) {
4190    jj_scanpos = xsp;
4191    if (jj_3R_109()) {
4192    jj_scanpos = xsp;
4193    if (jj_3R_110()) return true;
4194    }
4195    }
4196    }
4197    }
4198    }
4199    }
4200    }
4201    }
4202    }
4203    }
4204    }
4205    }
4206    }
4207    }
4208    return false;
4209  }
4210
4211  private boolean jj_3R_99()
4212 {
4213    if (jj_3R_31()) return true;
4214    return false;
4215  }
4216
4217  private boolean jj_3R_119()
4218 {
4219    if (jj_3R_148()) return true;
4220    return false;
4221  }
4222
4223  private boolean jj_3R_118()
4224 {
4225    if (jj_3R_147()) return true;
4226    return false;
4227  }
4228
4229  private boolean jj_3R_141()
4230 {
4231    if (jj_scan_token(CLASSREF)) return true;
4232    return false;
4233  }
4234
4235  private boolean jj_3R_117()
4236 {
4237    if (jj_3R_146()) return true;
4238    return false;
4239  }
4240
4241  private boolean jj_3_3()
4242 {
4243    if (jj_3R_33()) return true;
4244    return false;
4245  }
4246
4247  private boolean jj_3_2()
4248 {
4249    if (jj_3R_32()) return true;
4250    return false;
4251  }
4252
4253  private boolean jj_3R_116()
4254 {
4255    if (jj_3R_145()) return true;
4256    return false;
4257  }
4258
4259  private boolean jj_3R_115()
4260 {
4261    if (jj_3R_144()) return true;
4262    return false;
4263  }
4264
4265  private boolean jj_3R_149()
4266 {
4267    if (jj_scan_token(NUMBER)) return true;
4268    return false;
4269  }
4270
4271  private boolean jj_3R_114()
4272 {
4273    if (jj_3R_143()) return true;
4274    return false;
4275  }
4276
4277  private boolean jj_3R_113()
4278 {
4279    if (jj_3R_142()) return true;
4280    return false;
4281  }
4282
4283  private boolean jj_3R_145()
4284 {
4285    if (jj_scan_token(BIGINTEGER)) return true;
4286    return false;
4287  }
4288
4289  private boolean jj_3R_112()
4290 {
4291    if (jj_3R_141()) return true;
4292    return false;
4293  }
4294
4295  private boolean jj_3R_95()
4296 {
4297    Token xsp;
4298    xsp = jj_scanpos;
4299    if (jj_3R_112()) {
4300    jj_scanpos = xsp;
4301    if (jj_3R_113()) {
4302    jj_scanpos = xsp;
4303    if (jj_3R_114()) {
4304    jj_scanpos = xsp;
4305    if (jj_3R_115()) {
4306    jj_scanpos = xsp;
4307    if (jj_3R_116()) {
4308    jj_scanpos = xsp;
4309    if (jj_3R_117()) {
4310    jj_scanpos = xsp;
4311    if (jj_3R_118()) {
4312    jj_scanpos = xsp;
4313    if (jj_3R_119()) {
4314    jj_scanpos = xsp;
4315    if (jj_3R_120()) {
4316    jj_scanpos = xsp;
4317    if (jj_3R_121()) {
4318    jj_scanpos = xsp;
4319    if (jj_3R_122()) {
4320    jj_scanpos = xsp;
4321    if (jj_3R_123()) {
4322    jj_scanpos = xsp;
4323    if (jj_3R_124()) return true;
4324    }
4325    }
4326    }
4327    }
4328    }
4329    }
4330    }
4331    }
4332    }
4333    }
4334    }
4335    }
4336    return false;
4337  }
4338
4339  private boolean jj_3R_148()
4340 {
4341    if (jj_scan_token(LONG_NUMBER)) return true;
4342    return false;
4343  }
4344
4345  private boolean jj_3R_152()
4346 {
4347    if (jj_3R_31()) return true;
4348    return false;
4349  }
4350
4351  private boolean jj_3R_127()
4352 {
4353    if (jj_scan_token(82)) return true;
4354    Token xsp;
4355    xsp = jj_scanpos;
4356    if (jj_3R_152()) jj_scanpos = xsp;
4357    if (jj_3R_69()) return true;
4358    return false;
4359  }
4360
4361  private boolean jj_3R_143()
4362 {
4363    if (jj_scan_token(CHAR)) return true;
4364    return false;
4365  }
4366
4367  private boolean jj_3R_66()
4368 {
4369    if (jj_3R_31()) return true;
4370    return false;
4371  }
4372
4373  private boolean jj_3R_126()
4374 {
4375    if (jj_3R_37()) return true;
4376    return false;
4377  }
4378
4379  private boolean jj_3R_125()
4380 {
4381    if (jj_scan_token(81)) return true;
4382    if (jj_3R_151()) return true;
4383    return false;
4384  }
4385
4386  private boolean jj_3R_96()
4387 {
4388    Token xsp;
4389    xsp = jj_scanpos;
4390    if (jj_3R_125()) jj_scanpos = xsp;
4391    xsp = jj_scanpos;
4392    if (jj_3R_126()) {
4393    jj_scanpos = xsp;
4394    if (jj_3R_127()) return true;
4395    }
4396    return false;
4397  }
4398
4399  private boolean jj_3R_154()
4400 {
4401    if (jj_scan_token(MULTI_STRING)) return true;
4402    return false;
4403  }
4404
4405  private boolean jj_3R_153()
4406 {
4407    if (jj_scan_token(STRING)) return true;
4408    return false;
4409  }
4410
4411  private boolean jj_3R_142()
4412 {
4413    Token xsp;
4414    xsp = jj_scanpos;
4415    if (jj_3R_153()) {
4416    jj_scanpos = xsp;
4417    if (jj_3R_154()) return true;
4418    }
4419    return false;
4420  }
4421
4422  private boolean jj_3R_63()
4423 {
4424    if (jj_3R_31()) return true;
4425    return false;
4426  }
4427
4428  private boolean jj_3R_76()
4429 {
4430    if (jj_3R_89()) return true;
4431    return false;
4432  }
4433
4434  private boolean jj_3R_37()
4435 {
4436    if (jj_scan_token(77)) return true;
4437    Token xsp;
4438    while (true) {
4439      xsp = jj_scanpos;
4440      if (jj_3R_76()) { jj_scanpos = xsp; break; }
4441    }
4442    if (jj_scan_token(75)) return true;
4443    return false;
4444  }
4445
4446  private boolean jj_3R_60()
4447 {
4448    if (jj_3R_31()) return true;
4449    return false;
4450  }
4451
4452  private boolean jj_3R_65()
4453 {
4454    if (jj_3R_31()) return true;
4455    return false;
4456  }
4457
4458  private boolean jj_3_24()
4459 {
4460    if (jj_3R_47()) return true;
4461    return false;
4462  }
4463
4464  private boolean jj_3R_57()
4465 {
4466    if (jj_3R_31()) return true;
4467    return false;
4468  }
4469
4470  private boolean jj_3R_46()
4471 {
4472    if (jj_scan_token(IDENTIFIER)) return true;
4473    return false;
4474  }
4475
4476  private boolean jj_3_23()
4477 {
4478    Token xsp;
4479    xsp = jj_scanpos;
4480    if (jj_3R_65()) jj_scanpos = xsp;
4481    if (jj_scan_token(OR_IFNULL_OPERATOR)) return true;
4482    xsp = jj_scanpos;
4483    if (jj_3R_66()) jj_scanpos = xsp;
4484    if (jj_3R_67()) return true;
4485    return false;
4486  }
4487
4488  private boolean jj_3R_62()
4489 {
4490    if (jj_3R_31()) return true;
4491    return false;
4492  }
4493
4494  private boolean jj_3R_54()
4495 {
4496    if (jj_3R_31()) return true;
4497    return false;
4498  }
4499
4500  private boolean jj_3R_82()
4501 {
4502    if (jj_3R_67()) return true;
4503    Token xsp;
4504    while (true) {
4505      xsp = jj_scanpos;
4506      if (jj_3_23()) { jj_scanpos = xsp; break; }
4507    }
4508    return false;
4509  }
4510
4511  private boolean jj_3R_151()
4512 {
4513    if (jj_scan_token(IDENTIFIER)) return true;
4514    return false;
4515  }
4516
4517  private boolean jj_3_22()
4518 {
4519    Token xsp;
4520    xsp = jj_scanpos;
4521    if (jj_3R_62()) jj_scanpos = xsp;
4522    if (jj_scan_token(OR_OPERATOR)) return true;
4523    xsp = jj_scanpos;
4524    if (jj_3R_63()) jj_scanpos = xsp;
4525    if (jj_3R_64()) return true;
4526    return false;
4527  }
4528
4529  private boolean jj_3R_59()
4530 {
4531    if (jj_3R_31()) return true;
4532    return false;
4533  }
4534
4535  private boolean jj_3R_51()
4536 {
4537    if (jj_3R_31()) return true;
4538    return false;
4539  }
4540
4541  private boolean jj_3R_67()
4542 {
4543    if (jj_3R_64()) return true;
4544    Token xsp;
4545    while (true) {
4546      xsp = jj_scanpos;
4547      if (jj_3_22()) { jj_scanpos = xsp; break; }
4548    }
4549    return false;
4550  }
4551
4552  private boolean jj_3R_49()
4553 {
4554    if (jj_3R_31()) return true;
4555    return false;
4556  }
4557
4558  private boolean jj_3R_91()
4559 {
4560    if (jj_scan_token(72)) return true;
4561    return false;
4562  }
4563
4564  private boolean jj_3R_56()
4565 {
4566    if (jj_3R_31()) return true;
4567    return false;
4568  }
4569
4570  private boolean jj_3_21()
4571 {
4572    Token xsp;
4573    xsp = jj_scanpos;
4574    if (jj_3R_59()) jj_scanpos = xsp;
4575    if (jj_scan_token(AND_OPERATOR)) return true;
4576    xsp = jj_scanpos;
4577    if (jj_3R_60()) jj_scanpos = xsp;
4578    if (jj_3R_61()) return true;
4579    return false;
4580  }
4581
4582  private boolean jj_3R_64()
4583 {
4584    if (jj_3R_61()) return true;
4585    Token xsp;
4586    while (true) {
4587      xsp = jj_scanpos;
4588      if (jj_3_21()) { jj_scanpos = xsp; break; }
4589    }
4590    return false;
4591  }
4592
4593  private boolean jj_3R_79()
4594 {
4595    if (jj_scan_token(IDENTIFIER)) return true;
4596    Token xsp;
4597    while (true) {
4598      xsp = jj_scanpos;
4599      if (jj_3R_91()) { jj_scanpos = xsp; break; }
4600    }
4601    return false;
4602  }
4603
4604  private boolean jj_3R_94()
4605 {
4606    if (jj_scan_token(MATCH)) return true;
4607    if (jj_scan_token(77)) return true;
4608    return false;
4609  }
4610
4611  private boolean jj_3R_53()
4612 {
4613    if (jj_3R_31()) return true;
4614    return false;
4615  }
4616
4617  private boolean jj_3_20()
4618 {
4619    Token xsp;
4620    xsp = jj_scanpos;
4621    if (jj_3R_56()) jj_scanpos = xsp;
4622    if (jj_scan_token(EQUALITY_OPERATOR)) return true;
4623    xsp = jj_scanpos;
4624    if (jj_3R_57()) jj_scanpos = xsp;
4625    if (jj_3R_58()) return true;
4626    return false;
4627  }
4628
4629  private boolean jj_3_1()
4630 {
4631    if (jj_3R_31()) return true;
4632    return false;
4633  }
4634
4635  private boolean jj_3_28()
4636 {
4637    if (jj_scan_token(ELSE)) return true;
4638    return false;
4639  }
4640
4641  private boolean jj_3R_68()
4642 {
4643    Token xsp;
4644    while (true) {
4645      xsp = jj_scanpos;
4646      if (jj_3_1()) { jj_scanpos = xsp; break; }
4647    }
4648    return false;
4649  }
4650
4651  private boolean jj_3R_138()
4652 {
4653    if (jj_scan_token(CASE)) return true;
4654    return false;
4655  }
4656
4657  private boolean jj_3R_61()
4658 {
4659    if (jj_3R_58()) return true;
4660    Token xsp;
4661    xsp = jj_scanpos;
4662    if (jj_3_20()) jj_scanpos = xsp;
4663    return false;
4664  }
4665
4666  private boolean jj_3R_45()
4667 {
4668    if (jj_3R_31()) return true;
4669    return false;
4670  }
4671
4672  private boolean jj_3R_31()
4673 {
4674    Token xsp;
4675    xsp = jj_scanpos;
4676    if (jj_scan_token(5)) {
4677    jj_scanpos = xsp;
4678    if (jj_scan_token(67)) return true;
4679    }
4680    return false;
4681  }
4682
4683  private boolean jj_3R_50()
4684 {
4685    if (jj_3R_31()) return true;
4686    return false;
4687  }
4688
4689  private boolean jj_3_19()
4690 {
4691    Token xsp;
4692    xsp = jj_scanpos;
4693    if (jj_3R_53()) jj_scanpos = xsp;
4694    if (jj_scan_token(RELATIONAL_OPERATOR)) return true;
4695    xsp = jj_scanpos;
4696    if (jj_3R_54()) jj_scanpos = xsp;
4697    if (jj_3R_55()) return true;
4698    return false;
4699  }
4700
4701  private boolean jj_3R_132()
4702 {
4703    if (jj_scan_token(IF)) return true;
4704    return false;
4705  }
4706
4707  private boolean jj_3R_58()
4708 {
4709    if (jj_3R_55()) return true;
4710    Token xsp;
4711    xsp = jj_scanpos;
4712    if (jj_3_19()) jj_scanpos = xsp;
4713    return false;
4714  }
4715
4716  private boolean jj_3_27()
4717 {
4718    if (jj_3R_47()) return true;
4719    return false;
4720  }
4721
4722  private boolean jj_3R_43()
4723 {
4724    if (jj_3R_79()) return true;
4725    Token xsp;
4726    xsp = jj_scanpos;
4727    if (jj_scan_token(43)) jj_scanpos = xsp;
4728    if (jj_3R_80()) return true;
4729    return false;
4730  }
4731
4732  private boolean jj_3R_48()
4733 {
4734    if (jj_3R_31()) return true;
4735    return false;
4736  }
4737
4738  private boolean jj_3_18()
4739 {
4740    Token xsp;
4741    xsp = jj_scanpos;
4742    if (jj_3R_50()) jj_scanpos = xsp;
4743    if (jj_scan_token(ADDITIVE_OPERATOR)) return true;
4744    xsp = jj_scanpos;
4745    if (jj_3R_51()) jj_scanpos = xsp;
4746    if (jj_3R_52()) return true;
4747    return false;
4748  }
4749
4750  private boolean jj_3R_93()
4751 {
4752    if (jj_3R_111()) return true;
4753    return false;
4754  }
4755
4756  private boolean jj_3R_55()
4757 {
4758    if (jj_3R_52()) return true;
4759    Token xsp;
4760    while (true) {
4761      xsp = jj_scanpos;
4762      if (jj_3_18()) { jj_scanpos = xsp; break; }
4763    }
4764    return false;
4765  }
4766
4767  private boolean jj_3_17()
4768 {
4769    Token xsp;
4770    xsp = jj_scanpos;
4771    if (jj_3R_48()) jj_scanpos = xsp;
4772    if (jj_scan_token(MULTIPLICATIVE_OPERATOR)) return true;
4773    xsp = jj_scanpos;
4774    if (jj_3R_49()) jj_scanpos = xsp;
4775    if (jj_3R_32()) return true;
4776    return false;
4777  }
4778
4779  private boolean jj_3R_47()
4780 {
4781    Token xsp;
4782    xsp = jj_scanpos;
4783    if (jj_scan_token(43)) jj_scanpos = xsp;
4784    if (jj_3R_80()) return true;
4785    return false;
4786  }
4787
4788  private boolean jj_3R_92()
4789 {
4790    if (jj_3R_31()) return true;
4791    return false;
4792  }
4793
4794  private boolean jj_3R_52()
4795 {
4796    if (jj_3R_81()) return true;
4797    Token xsp;
4798    while (true) {
4799      xsp = jj_scanpos;
4800      if (jj_3_17()) { jj_scanpos = xsp; break; }
4801    }
4802    return false;
4803  }
4804
4805  private boolean jj_3R_44()
4806 {
4807    if (jj_3R_31()) return true;
4808    return false;
4809  }
4810
4811  private boolean jj_3R_80()
4812 {
4813    if (jj_scan_token(78)) return true;
4814    Token xsp;
4815    xsp = jj_scanpos;
4816    if (jj_3R_92()) jj_scanpos = xsp;
4817    xsp = jj_scanpos;
4818    if (jj_3R_93()) jj_scanpos = xsp;
4819    if (jj_scan_token(79)) return true;
4820    return false;
4821  }
4822
4823  private boolean jj_3R_78()
4824 {
4825    if (jj_3R_31()) return true;
4826    return false;
4827  }
4828
4829  private boolean jj_3_16()
4830 {
4831    if (jj_3R_47()) return true;
4832    return false;
4833  }
4834
4835  private boolean jj_3R_83()
4836 {
4837    if (jj_3R_31()) return true;
4838    return false;
4839  }
4840
4841  private boolean jj_3_25()
4842 {
4843    if (jj_3R_68()) return true;
4844    if (jj_3R_69()) return true;
4845    return false;
4846  }
4847
4848  private boolean jj_3_26()
4849 {
4850    if (jj_scan_token(IDENTIFIER)) return true;
4851    if (jj_scan_token(76)) return true;
4852    return false;
4853  }
4854
4855  private boolean jj_3R_111()
4856 {
4857    Token xsp;
4858    xsp = jj_scanpos;
4859    if (jj_3_26()) jj_scanpos = xsp;
4860    if (jj_3R_69()) return true;
4861    return false;
4862  }
4863
4864  private boolean jj_3_15()
4865 {
4866    Token xsp;
4867    xsp = jj_scanpos;
4868    if (jj_3R_44()) jj_scanpos = xsp;
4869    if (jj_scan_token(INVOCATION_OPERATOR)) return true;
4870    xsp = jj_scanpos;
4871    if (jj_3R_45()) jj_scanpos = xsp;
4872    if (jj_3R_46()) return true;
4873    return false;
4874  }
4875
4876  private boolean jj_3R_32()
4877 {
4878    if (jj_3R_70()) return true;
4879    Token xsp;
4880    while (true) {
4881      xsp = jj_scanpos;
4882      if (jj_3_15()) { jj_scanpos = xsp; break; }
4883    }
4884    while (true) {
4885      xsp = jj_scanpos;
4886      if (jj_3_16()) { jj_scanpos = xsp; break; }
4887    }
4888    return false;
4889  }
4890
4891  private boolean jj_3R_131()
4892 {
4893    if (jj_scan_token(RETURN)) return true;
4894    return false;
4895  }
4896
4897  private boolean jj_3R_34()
4898 {
4899    if (jj_scan_token(IDENTIFIER)) return true;
4900    if (jj_scan_token(76)) return true;
4901    Token xsp;
4902    xsp = jj_scanpos;
4903    if (jj_3R_78()) jj_scanpos = xsp;
4904    if (jj_3R_69()) return true;
4905    return false;
4906  }
4907
4908  private boolean jj_3R_81()
4909 {
4910    Token xsp;
4911    xsp = jj_scanpos;
4912    if (jj_scan_token(41)) jj_scanpos = xsp;
4913    if (jj_3R_32()) return true;
4914    return false;
4915  }
4916
4917  private boolean jj_3R_98()
4918 {
4919    if (jj_3R_31()) return true;
4920    return false;
4921  }
4922
4923  private boolean jj_3R_88()
4924 {
4925    if (jj_scan_token(78)) return true;
4926    Token xsp;
4927    xsp = jj_scanpos;
4928    if (jj_3R_98()) jj_scanpos = xsp;
4929    if (jj_3R_69()) return true;
4930    return false;
4931  }
4932
4933  private boolean jj_3R_87()
4934 {
4935    if (jj_3R_97()) return true;
4936    return false;
4937  }
4938
4939  private boolean jj_3R_86()
4940 {
4941    if (jj_3R_96()) return true;
4942    return false;
4943  }
4944
4945  private boolean jj_3R_75()
4946 {
4947    if (jj_scan_token(VAR)) return true;
4948    if (jj_scan_token(IDENTIFIER)) return true;
4949    return false;
4950  }
4951
4952  private boolean jj_3R_85()
4953 {
4954    if (jj_3R_95()) return true;
4955    return false;
4956  }
4957
4958  private boolean jj_3_11()
4959 {
4960    if (jj_3R_42()) return true;
4961    return false;
4962  }
4963
4964  private boolean jj_3R_84()
4965 {
4966    if (jj_3R_94()) return true;
4967    return false;
4968  }
4969
4970  private boolean jj_3_14()
4971 {
4972    if (jj_3R_33()) return true;
4973    return false;
4974  }
4975
4976  private boolean jj_3R_36()
4977 {
4978    Token xsp;
4979    xsp = jj_scanpos;
4980    if (jj_3R_74()) {
4981    jj_scanpos = xsp;
4982    if (jj_3R_75()) return true;
4983    }
4984    return false;
4985  }
4986
4987  private boolean jj_3R_74()
4988 {
4989    if (jj_scan_token(LET)) return true;
4990    if (jj_scan_token(IDENTIFIER)) return true;
4991    return false;
4992  }
4993
4994  private boolean jj_3R_70()
4995 {
4996    Token xsp;
4997    xsp = jj_scanpos;
4998    if (jj_3_13()) {
4999    jj_scanpos = xsp;
5000    if (jj_3_14()) {
5001    jj_scanpos = xsp;
5002    if (jj_3R_84()) {
5003    jj_scanpos = xsp;
5004    if (jj_3R_85()) {
5005    jj_scanpos = xsp;
5006    if (jj_3R_86()) {
5007    jj_scanpos = xsp;
5008    if (jj_3R_87()) {
5009    jj_scanpos = xsp;
5010    if (jj_3R_88()) return true;
5011    }
5012    }
5013    }
5014    }
5015    }
5016    }
5017    return false;
5018  }
5019
5020  private boolean jj_3_13()
5021 {
5022    if (jj_3R_43()) return true;
5023    return false;
5024  }
5025
5026  /** Generated Token Manager. */
5027  public GoloParserTokenManager token_source;
5028  JavaCharStream jj_input_stream;
5029  /** Current token. */
5030  public Token token;
5031  /** Next token. */
5032  public Token jj_nt;
5033  private int jj_ntk;
5034  private Token jj_scanpos, jj_lastpos;
5035  private int jj_la;
5036  private int jj_gen;
5037  final private int[] jj_la1 = new int[109];
5038  static private int[] jj_la1_0;
5039  static private int[] jj_la1_1;
5040  static private int[] jj_la1_2;
5041  static {
5042      jj_la1_init_0();
5043      jj_la1_init_1();
5044      jj_la1_init_2();
5045   }
5046   private static void jj_la1_init_0() {
5047      jj_la1_0 = new int[] {0x20,0x0,0x0,0x20,0x0,0x20,0x0,0x100,0x18000600,0xa0,0x0,0x20,0x20,0x0,0x20,0x0,0x0,0x0,0x0,0x400,0x18000600,0x18000600,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x20000000,0x0,0x20,0xc14dd800,0x20,0x20,0x20,0x20,0x800000,0x800000,0x0,0x0,0x800000,0x0,0x800000,0x0,0x200000,0x300000,0x20,0x20,0x20,0x20,0x20,0x1000000,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc14dd820,0x0,0x0,0x20,0x0,0x0,0x20,0x20,0x0,0x18000,0x18000,0x18000,0x18000,0x20,0x1000000,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x20,0x0,0x20,0x20,0x0,0x20,0x20,0x0,0x20,0x1000000,0x0,0x0,0x1000,0x800000,0x800000,};
5048   }
5049   private static void jj_la1_init_1() {
5050      jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x80200000,0x0,0x7003,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x1003,0x7003,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x0,0x1000,0x0,0x800,0x0,0x9fff8200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x6000,0x0,0x0,0x9fff8000,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9fffe200,0x0,0x0,0x0,0x0,0x8fff8000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9fff8200,0x0,0x0,0x0,0x0,0x0,0x0,0x6000,0x0,0x0,0x0,0x0,0x6000,0x0,0x0,0x0,0x0,0x9fff8200,0x800,0x800,0x0,0x0,0x0,};
5051   }
5052   private static void jj_la1_init_2() {
5053      jj_la1_2 = new int[] {0x8,0x100,0x200,0x8,0x200,0x8,0x0,0x0,0x40,0x48,0x40,0x8,0x8,0x200,0x8,0x100,0x400,0x40,0x0,0x0,0x0,0x40,0x40,0x200,0x40,0x200,0x1000,0x41,0x40,0x40,0x0,0x2000,0x0,0x8,0x66001,0x8,0x8,0x8,0x8,0x0,0x0,0x4001,0x10000,0x0,0x10000,0x0,0x4001,0x0,0x0,0x8,0x9,0x9,0x8,0x8,0x66000,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x66009,0x10000,0x20000,0x8,0x42000,0x0,0x8,0x8,0x200,0x0,0x0,0x80200,0x80200,0x8,0x66001,0x10000,0x8,0x10000,0x8,0x10000,0x8,0x1,0x8,0x200,0x8,0x8,0x0,0x8,0x8,0x200,0x8,0x66001,0x0,0x0,0x2000,0x0,0x0,};
5054   }
5055  final private JJCalls[] jj_2_rtns = new JJCalls[28];
5056  private boolean jj_rescan = false;
5057  private int jj_gc = 0;
5058
5059  /** Constructor with InputStream. */
5060  public GoloParser(java.io.InputStream stream) {
5061     this(stream, null);
5062  }
5063  /** Constructor with InputStream and supplied encoding */
5064  public GoloParser(java.io.InputStream stream, String encoding) {
5065    try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
5066    token_source = new GoloParserTokenManager(jj_input_stream);
5067    token = new Token();
5068    jj_ntk = -1;
5069    jj_gen = 0;
5070    for (int i = 0; i < 109; i++) jj_la1[i] = -1;
5071    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5072  }
5073
5074  /** Reinitialise. */
5075  public void ReInit(java.io.InputStream stream) {
5076     ReInit(stream, null);
5077  }
5078  /** Reinitialise. */
5079  public void ReInit(java.io.InputStream stream, String encoding) {
5080    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
5081    token_source.ReInit(jj_input_stream);
5082    token = new Token();
5083    jj_ntk = -1;
5084    jjtree.reset();
5085    jj_gen = 0;
5086    for (int i = 0; i < 109; i++) jj_la1[i] = -1;
5087    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5088  }
5089
5090  /** Constructor. */
5091  public GoloParser(java.io.Reader stream) {
5092    jj_input_stream = new JavaCharStream(stream, 1, 1);
5093    token_source = new GoloParserTokenManager(jj_input_stream);
5094    token = new Token();
5095    jj_ntk = -1;
5096    jj_gen = 0;
5097    for (int i = 0; i < 109; i++) jj_la1[i] = -1;
5098    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5099  }
5100
5101  /** Reinitialise. */
5102  public void ReInit(java.io.Reader stream) {
5103        if (jj_input_stream == null) {
5104      jj_input_stream = new JavaCharStream(stream, 1, 1);
5105   } else {
5106      jj_input_stream.ReInit(stream, 1, 1);
5107   }
5108   if (token_source == null) {
5109      token_source = new GoloParserTokenManager(jj_input_stream);
5110   }
5111
5112    token_source.ReInit(jj_input_stream);
5113    token = new Token();
5114    jj_ntk = -1;
5115    jjtree.reset();
5116    jj_gen = 0;
5117    for (int i = 0; i < 109; i++) jj_la1[i] = -1;
5118    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5119  }
5120
5121  /** Constructor with generated Token Manager. */
5122  public GoloParser(GoloParserTokenManager tm) {
5123    token_source = tm;
5124    token = new Token();
5125    jj_ntk = -1;
5126    jj_gen = 0;
5127    for (int i = 0; i < 109; i++) jj_la1[i] = -1;
5128    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5129  }
5130
5131  /** Reinitialise. */
5132  public void ReInit(GoloParserTokenManager tm) {
5133    token_source = tm;
5134    token = new Token();
5135    jj_ntk = -1;
5136    jjtree.reset();
5137    jj_gen = 0;
5138    for (int i = 0; i < 109; i++) jj_la1[i] = -1;
5139    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
5140  }
5141
5142  private Token jj_consume_token(int kind) throws ParseException {
5143    Token oldToken;
5144    if ((oldToken = token).next != null) token = token.next;
5145    else token = token.next = token_source.getNextToken();
5146    jj_ntk = -1;
5147    if (token.kind == kind) {
5148      jj_gen++;
5149      if (++jj_gc > 100) {
5150        jj_gc = 0;
5151        for (int i = 0; i < jj_2_rtns.length; i++) {
5152          JJCalls c = jj_2_rtns[i];
5153          while (c != null) {
5154            if (c.gen < jj_gen) c.first = null;
5155            c = c.next;
5156          }
5157        }
5158      }
5159      return token;
5160    }
5161    token = oldToken;
5162    jj_kind = kind;
5163    throw generateParseException();
5164  }
5165
5166  @SuppressWarnings("serial")
5167  static private final class LookaheadSuccess extends java.lang.Error { }
5168  final private LookaheadSuccess jj_ls = new LookaheadSuccess();
5169  private boolean jj_scan_token(int kind) {
5170    if (jj_scanpos == jj_lastpos) {
5171      jj_la--;
5172      if (jj_scanpos.next == null) {
5173        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
5174      } else {
5175        jj_lastpos = jj_scanpos = jj_scanpos.next;
5176      }
5177    } else {
5178      jj_scanpos = jj_scanpos.next;
5179    }
5180    if (jj_rescan) {
5181      int i = 0; Token tok = token;
5182      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
5183      if (tok != null) jj_add_error_token(kind, i);
5184    }
5185    if (jj_scanpos.kind != kind) return true;
5186    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
5187    return false;
5188  }
5189
5190
5191/** Get the next Token. */
5192  final public Token getNextToken() {
5193    if (token.next != null) token = token.next;
5194    else token = token.next = token_source.getNextToken();
5195    jj_ntk = -1;
5196    jj_gen++;
5197    return token;
5198  }
5199
5200/** Get the specific Token. */
5201  final public Token getToken(int index) {
5202    Token t = token;
5203    for (int i = 0; i < index; i++) {
5204      if (t.next != null) t = t.next;
5205      else t = t.next = token_source.getNextToken();
5206    }
5207    return t;
5208  }
5209
5210  private int jj_ntk_f() {
5211    if ((jj_nt=token.next) == null)
5212      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
5213    else
5214      return (jj_ntk = jj_nt.kind);
5215  }
5216
5217  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
5218  private int[] jj_expentry;
5219  private int jj_kind = -1;
5220  private int[] jj_lasttokens = new int[100];
5221  private int jj_endpos;
5222
5223  private void jj_add_error_token(int kind, int pos) {
5224    if (pos >= 100) {
5225       return;
5226    }
5227
5228    if (pos == jj_endpos + 1) {
5229      jj_lasttokens[jj_endpos++] = kind;
5230    } else if (jj_endpos != 0) {
5231      jj_expentry = new int[jj_endpos];
5232
5233      for (int i = 0; i < jj_endpos; i++) {
5234        jj_expentry[i] = jj_lasttokens[i];
5235      }
5236
5237      for (int[] oldentry : jj_expentries) {
5238        if (oldentry.length == jj_expentry.length) {
5239          boolean isMatched = true;
5240
5241          for (int i = 0; i < jj_expentry.length; i++) {
5242            if (oldentry[i] != jj_expentry[i]) {
5243              isMatched = false;
5244              break;
5245            }
5246
5247          }
5248          if (isMatched) {
5249            jj_expentries.add(jj_expentry);
5250            break;
5251          }
5252        }
5253      }
5254
5255      if (pos != 0) {
5256        jj_lasttokens[(jj_endpos = pos) - 1] = kind;
5257      }
5258    }
5259  }
5260
5261  /** Generate ParseException. */
5262  public ParseException generateParseException() {
5263    jj_expentries.clear();
5264    boolean[] la1tokens = new boolean[85];
5265    if (jj_kind >= 0) {
5266      la1tokens[jj_kind] = true;
5267      jj_kind = -1;
5268    }
5269    for (int i = 0; i < 109; i++) {
5270      if (jj_la1[i] == jj_gen) {
5271        for (int j = 0; j < 32; j++) {
5272          if ((jj_la1_0[i] & (1<<j)) != 0) {
5273            la1tokens[j] = true;
5274          }
5275          if ((jj_la1_1[i] & (1<<j)) != 0) {
5276            la1tokens[32+j] = true;
5277          }
5278          if ((jj_la1_2[i] & (1<<j)) != 0) {
5279            la1tokens[64+j] = true;
5280          }
5281        }
5282      }
5283    }
5284    for (int i = 0; i < 85; i++) {
5285      if (la1tokens[i]) {
5286        jj_expentry = new int[1];
5287        jj_expentry[0] = i;
5288        jj_expentries.add(jj_expentry);
5289      }
5290    }
5291    jj_endpos = 0;
5292    jj_rescan_token();
5293    jj_add_error_token(0, 0);
5294    int[][] exptokseq = new int[jj_expentries.size()][];
5295    for (int i = 0; i < jj_expentries.size(); i++) {
5296      exptokseq[i] = jj_expentries.get(i);
5297    }
5298    return new ParseException(token, exptokseq, tokenImage);
5299  }
5300
5301  /** Enable tracing. */
5302  final public void enable_tracing() {
5303  }
5304
5305  /** Disable tracing. */
5306  final public void disable_tracing() {
5307  }
5308
5309  private void jj_rescan_token() {
5310    jj_rescan = true;
5311    for (int i = 0; i < 28; i++) {
5312      try {
5313        JJCalls p = jj_2_rtns[i];
5314
5315        do {
5316          if (p.gen > jj_gen) {
5317            jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
5318            switch (i) {
5319              case 0: jj_3_1(); break;
5320              case 1: jj_3_2(); break;
5321              case 2: jj_3_3(); break;
5322              case 3: jj_3_4(); break;
5323              case 4: jj_3_5(); break;
5324              case 5: jj_3_6(); break;
5325              case 6: jj_3_7(); break;
5326              case 7: jj_3_8(); break;
5327              case 8: jj_3_9(); break;
5328              case 9: jj_3_10(); break;
5329              case 10: jj_3_11(); break;
5330              case 11: jj_3_12(); break;
5331              case 12: jj_3_13(); break;
5332              case 13: jj_3_14(); break;
5333              case 14: jj_3_15(); break;
5334              case 15: jj_3_16(); break;
5335              case 16: jj_3_17(); break;
5336              case 17: jj_3_18(); break;
5337              case 18: jj_3_19(); break;
5338              case 19: jj_3_20(); break;
5339              case 20: jj_3_21(); break;
5340              case 21: jj_3_22(); break;
5341              case 22: jj_3_23(); break;
5342              case 23: jj_3_24(); break;
5343              case 24: jj_3_25(); break;
5344              case 25: jj_3_26(); break;
5345              case 26: jj_3_27(); break;
5346              case 27: jj_3_28(); break;
5347            }
5348          }
5349          p = p.next;
5350        } while (p != null);
5351
5352        } catch(LookaheadSuccess ls) { }
5353    }
5354    jj_rescan = false;
5355  }
5356
5357  private void jj_save(int index, int xla) {
5358    JJCalls p = jj_2_rtns[index];
5359    while (p.gen > jj_gen) {
5360      if (p.next == null) { p = p.next = new JJCalls(); break; }
5361      p = p.next;
5362    }
5363
5364    p.gen = jj_gen + xla - jj_la; 
5365    p.first = token;
5366    p.arg = xla;
5367  }
5368
5369  static final class JJCalls {
5370    int gen;
5371    Token first;
5372    int arg;
5373    JJCalls next;
5374  }
5375
5376}