/* JTBParser.java */
/* Generated By:JavaCC: Do not edit this line. JTBParser.java */
package EDU.purdue.jtb.parser;

import java.util.List;
import java.util.ArrayList;
import EDU.purdue.jtb.parser.syntaxtree.*;


public class JTBParser extends JavaCCParserInternals implements JTBParserConstants {


  /* --- JTB generated return variables declarations --- */

  /** Return variable for the {@link #LocalLookahead} BNFProduction) */
  Lookahead jtbrt_LocalLookahead;

  /** Return variable for the {@link #IdentifierAsString} BNFProduction) */
  String jtbrt_IdentifierAsString;

  /** Return variable for the {@link #JavaIdentifier} BNFProduction) */
  Token jtbrt_JavaIdentifier;

  /** Return variable for the {@link #Modifiers} BNFProduction) */
  int jtbrt_Modifiers;

  /** Return variable for the {@link #Name} BNFProduction) */
  String jtbrt_Name;

  /** Return variable for the {@link #IntegerLiteral} BNFProduction) */
  int jtbrt_IntegerLiteral;

  /** Return variable for the {@link #BooleanLiteral} BNFProduction) */
  boolean jtbrt_BooleanLiteral;

  /** Return variable for the {@link #StringLiteral} BNFProduction) */
  String jtbrt_StringLiteral;

  /* --- User code --- */

  String parser_class_name;

  public Options opt;

  boolean processing_cu = false;

  int class_nesting = 0;

  int inLocalLA = 0;

  boolean inAction = false;

  boolean jumpPatched = false;

  public String grammarPackage = null;

  private boolean notTailOfExpansionUnit() {
    final Token t = getToken(1);
    if (t.kind == BIT_OR || t.kind == COMMA || t.kind == RPAREN || t.kind == RBRACE || t.kind == RBRACKET)
      return false;
    return true;
  }

  static public final class ModifierSet {
    /* --- User code --- */

    public static final int M_PUBLIC = 0x0001;

    public static final int M_PROTECTED = 0x0002;

    public static final int M_PRIVATE = 0x0004;

    public static final int M_ABSTRACT = 0x0008;

    public static final int M_STATIC = 0x0010;

    public static final int M_FINAL = 0x0020;

    public static final int M_SYNCHRONIZED = 0x0040;

    public static final int M_NATIVE = 0x0080;

    public static final int M_TRANSIENT = 0x0100;

    public static final int M_VOLATILE = 0x0200;

    public static final int M_STRICTFP = 0x1000;

    public boolean isPublic(int modifiers) {
      return (modifiers & M_PUBLIC) != 0;
    }

    public boolean isProtected(int modifiers) {
      return (modifiers & M_PROTECTED) != 0;
    }

    public boolean isPrivate(int modifiers) {
      return (modifiers & M_PRIVATE) != 0;
    }

    public boolean isStatic(int modifiers) {
      return (modifiers & M_STATIC) != 0;
    }

    public boolean isAbstract(int modifiers) {
      return (modifiers & M_ABSTRACT) != 0;
    }

    public boolean isFinal(int modifiers) {
      return (modifiers & M_FINAL) != 0;
    }

    public boolean isNative(int modifiers) {
      return (modifiers & M_NATIVE) != 0;
    }

    public boolean isStrictfp(int modifiers) {
      return (modifiers & M_STRICTFP) != 0;
    }

    public boolean isSynchronized(int modifiers) {
      return (modifiers & M_SYNCHRONIZED) != 0;
    }

    public boolean isTransient(int modifiers) {
      return (modifiers & M_TRANSIENT) != 0;
    }

    public boolean isVolatile(int modifiers) {
      return (modifiers & M_VOLATILE) != 0;
    }

    static int removeModifier(int modifiers, int mod) {
      return modifiers & ~mod;
    }
  }

  final public JavaCCInput JavaCCInput(final Options aOptions) throws ParseException {// --- JTB generated node declarations ---
  JavaCCOptions n0 = null;
  Token n1 = null;
  Token n2 = null;
  IdentifierAsString n3 = null;
  Token n4 = null;
  CompilationUnit n5 = null;
  Token n6 = null;
  Token n7 = null;
  IdentifierAsString n8 = null;
  Token n9 = null;
  NodeList n10 = new NodeList();
  Production n11 = null;
  Token n12 = null;
  JavaCCInput jtbNode = null;
  // --- user BNFProduction java block ---
  opt = aOptions;
  String id1 = null;
  String id2 = null;
  initialize();
    // --- user BNFProduction ExpansionChoices ---
      n0 = JavaCCOptions();
    n1 = jj_consume_token(_PARSER_BEGIN);
    n2 = jj_consume_token(LPAREN);
String oldJtbrt_IdentifierAsString_1 = jtbrt_IdentifierAsString;
    n3 = IdentifierAsString();
id1 = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_1;
addcuname(id1);
    n4 = jj_consume_token(RPAREN);
processing_cu = true;
    parser_class_name = id1;
    n5 = CompilationUnit();
processing_cu = false;
    n6 = jj_consume_token(_PARSER_END);
    n7 = jj_consume_token(LPAREN);
String oldJtbrt_IdentifierAsString_2 = jtbrt_IdentifierAsString;
    n8 = IdentifierAsString();
id2 = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_2;
compare(getToken(0), id1, id2);
    n9 = jj_consume_token(RPAREN);
    label_1:
    while (true) {
      n11 = Production();
n10.addNode(n11);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case DOUBLE:
      case FINAL:
      case FLOAT:
      case INT:
      case LONG:
      case PRIVATE:
      case PROTECTED:
      case PUBLIC:
      case SHORT:
      case VOID:
      case LT:
      case IDENTIFIER:{
        ;
        break;
        }
      default:
        jj_la1[0] = jj_gen;
        break label_1;
      }
    }
n10.nodes.trimToSize();
    n12 = jj_consume_token(0);
n12.beginColumn++;
n12.endColumn++;
jtbNode = new JavaCCInput(n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n12);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public JavaCCOptions JavaCCOptions() throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  NodeSequence n1 = null;
  Token n2 = null;
  Token n3 = null;
  NodeListOptional n4 = null;
  OptionBinding n5 = null;
  Token n6 = null;
  JavaCCOptions jtbNode = null;
    if (getToken(1).image.equals("options")) {
n4 = new NodeListOptional();
n1 = new NodeSequence(4);
      n2 = jj_consume_token(138);
n1.addNode(n2);
      n3 = jj_consume_token(LBRACE);
n1.addNode(n3);
      label_2:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _LOOKAHEAD:
        case _IGNORE_CASE:
        case STATIC:
        case IDENTIFIER:{
          ;
          break;
          }
        default:
          jj_la1[1] = jj_gen;
          break label_2;
        }
        n5 = OptionBinding();
n4.addNode(n5);
      }
n4.nodes.trimToSize();
n1.addNode(n4);
      n6 = jj_consume_token(RBRACE);
n1.addNode(n6);
n0.addNode(n1);
    } else {
      ;
    }
opt.normalize();
jtbNode = new JavaCCOptions(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public OptionBinding OptionBinding() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  Token n5 = null;
  NodeChoice n6 = null;
  IntegerLiteral n7 = null;
  BooleanLiteral n8 = null;
  StringLiteral n9 = null;
  Token n10 = null;
  OptionBinding jtbNode = null;
  // --- user BNFProduction java block ---
  String option_name = null;
  int int_val = 0;
  boolean bool_val = false;
  String string_val = null;
  Token t = getToken(1);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      n1 = jj_consume_token(IDENTIFIER);
n0 = new NodeChoice(n1, 0, 4);
      break;
      }
    case _LOOKAHEAD:{
      n2 = jj_consume_token(_LOOKAHEAD);
n0 = new NodeChoice(n2, 1, 4);
      break;
      }
    case _IGNORE_CASE:{
      n3 = jj_consume_token(_IGNORE_CASE);
n0 = new NodeChoice(n3, 2, 4);
      break;
      }
    case STATIC:{
      n4 = jj_consume_token(STATIC);
n0 = new NodeChoice(n4, 3, 4);
      break;
      }
    default:
      jj_la1[2] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
option_name = t.image;
    n5 = jj_consume_token(ASSIGN);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case INTEGER_LITERAL:{
int oldJtbrt_IntegerLiteral_1 = jtbrt_IntegerLiteral;
      n7 = IntegerLiteral();
int_val = jtbrt_IntegerLiteral;
jtbrt_IntegerLiteral = oldJtbrt_IntegerLiteral_1;
opt.setInputFileOption(t, getToken(0), option_name, int_val);
n6 = new NodeChoice(n7, 0, 3);
      break;
      }
    case FALSE:
    case TRUE:{
boolean oldJtbrt_BooleanLiteral_2 = jtbrt_BooleanLiteral;
      n8 = BooleanLiteral();
bool_val = jtbrt_BooleanLiteral;
jtbrt_BooleanLiteral = oldJtbrt_BooleanLiteral_2;
opt.setInputFileOption(t, getToken(0), option_name, bool_val);
n6 = new NodeChoice(n8, 1, 3);
      break;
      }
    case STRING_LITERAL:{
String oldJtbrt_StringLiteral_3 = jtbrt_StringLiteral;
      n9 = StringLiteral();
string_val = jtbrt_StringLiteral;
jtbrt_StringLiteral = oldJtbrt_StringLiteral_3;
opt.setInputFileOption(t, getToken(0), option_name, string_val);
n6 = new NodeChoice(n9, 2, 3);
      break;
      }
    default:
      jj_la1[3] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    n10 = jj_consume_token(SEMICOLON);
jtbNode = new OptionBinding(n0, n5, n6, n10);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Production Production() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  JavaCodeProduction n1 = null;
  RegularExprProduction n2 = null;
  TokenManagerDecls n3 = null;
  BNFProduction n4 = null;
  Production jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case _JAVACODE:{
      n1 = JavaCodeProduction();
n0 = new NodeChoice(n1, 0, 4);
      break;
      }
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case LT:{
      n2 = RegularExprProduction();
n0 = new NodeChoice(n2, 1, 4);
      break;
      }
    case _TOKEN_MGR_DECLS:{
      n3 = TokenManagerDecls();
n0 = new NodeChoice(n3, 2, 4);
      break;
      }
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FINAL:
    case FLOAT:
    case INT:
    case LONG:
    case PRIVATE:
    case PROTECTED:
    case PUBLIC:
    case SHORT:
    case VOID:
    case IDENTIFIER:{
      n4 = BNFProduction();
n0 = new NodeChoice(n4, 3, 4);
      break;
      }
    default:
      jj_la1[4] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new Production(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public JavaCodeProduction JavaCodeProduction() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  AccessModifier n1 = null;
  ResultType n2 = null;
  IdentifierAsString n3 = null;
  FormalParameters n4 = null;
  NodeOptional n5 = new NodeOptional();
  NodeSequence n6 = null;
  Token n7 = null;
  Name n8 = null;
  NodeListOptional n9 = null;
  NodeSequence n10 = null;
  Token n11 = null;
  Name n12 = null;
  NodeOptional n13 = new NodeOptional();
  Token n14 = null;
  Block n15 = null;
  JavaCodeProduction jtbNode = null;
  // --- user BNFProduction java block ---
  JavaCodeProduction_ p = new JavaCodeProduction_();
  String lhs = null;
  Token t = getToken(1);
  p.setFirstToken(t);
  List<Token> excName = null;
  p.setThrowsList(new ArrayList<List<Token>>());
  p.setLine(t.beginLine);
  p.setColumn(t.beginColumn);
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(_JAVACODE);
    n1 = AccessModifier(p);
    n2 = ResultType(p.getReturnTypeTokens());
String oldJtbrt_IdentifierAsString_1 = jtbrt_IdentifierAsString;
    n3 = IdentifierAsString();
lhs = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_1;
p.setLhs(lhs);
    n4 = FormalParameters(p.getParameterListTokens());
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case THROWS:{
n9 = new NodeListOptional();
n6 = new NodeSequence(3);
      n7 = jj_consume_token(THROWS);
n6.addNode(n7);
excName = new ArrayList<Token>();
      n8 = Name(excName);
n6.addNode(n8);
p.getThrowsList().add(excName);
      label_3:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case COMMA:{
          ;
          break;
          }
        default:
          jj_la1[5] = jj_gen;
          break label_3;
        }
excName = new ArrayList<Token>();
n10 = new NodeSequence(2);
        n11 = jj_consume_token(COMMA);
n10.addNode(n11);
        n12 = Name(excName);
n10.addNode(n12);
p.getThrowsList().add(excName);
n9.addNode(n10);
      }
n9.nodes.trimToSize();
n6.addNode(n9);
n5.addNode(n6);
      break;
      }
    default:
      jj_la1[6] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case REM:{
      n14 = jj_consume_token(REM);
n13.addNode(n14);
      break;
      }
    default:
      jj_la1[7] = jj_gen;
      ;
    }
    n15 = Block(p.getCodeTokens());
p.setLastToken(getToken(0));
    addproduction(p);
jtbNode = new JavaCodeProduction(n0, n1, n2, n3, n4, n5, n13, n15);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public BNFProduction BNFProduction() throws ParseException {// --- JTB generated node declarations ---
  AccessModifier n0 = null;
  ResultType n1 = null;
  IdentifierAsString n2 = null;
  FormalParameters n3 = null;
  NodeOptional n4 = new NodeOptional();
  NodeSequence n5 = null;
  Token n6 = null;
  Name n7 = null;
  NodeListOptional n8 = null;
  NodeSequence n9 = null;
  Token n10 = null;
  Name n11 = null;
  NodeOptional n12 = new NodeOptional();
  Token n13 = null;
  Token n14 = null;
  Block n15 = null;
  Token n16 = null;
  ExpansionChoices n17 = null;
  Token n18 = null;
  BNFProduction jtbNode = null;
  // --- user BNFProduction java block ---
  BNFProduction_ p = new BNFProduction_();
  Container c = new Container();
  Token t = getToken(1);
  p.setFirstToken(t);
  List<Token> excName = null;
  String lhs = null;
  p.setThrowsList(new ArrayList<List<Token>>());
  p.setLine(t.beginLine);
  p.setColumn(t.beginColumn);
  jumpPatched = false;
    // --- user BNFProduction ExpansionChoices ---
      n0 = AccessModifier(p);
    n1 = ResultType(p.getReturnTypeTokens());
String oldJtbrt_IdentifierAsString_1 = jtbrt_IdentifierAsString;
    n2 = IdentifierAsString();
lhs = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_1;
p.setLhs(lhs);
    n3 = FormalParameters(p.getParameterListTokens());
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case THROWS:{
n8 = new NodeListOptional();
n5 = new NodeSequence(3);
      n6 = jj_consume_token(THROWS);
n5.addNode(n6);
excName = new ArrayList<Token>();
      n7 = Name(excName);
n5.addNode(n7);
p.getThrowsList().add(excName);
      label_4:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case COMMA:{
          ;
          break;
          }
        default:
          jj_la1[8] = jj_gen;
          break label_4;
        }
excName = new ArrayList<Token>();
n9 = new NodeSequence(2);
        n10 = jj_consume_token(COMMA);
n9.addNode(n10);
        n11 = Name(excName);
n9.addNode(n11);
p.getThrowsList().add(excName);
n8.addNode(n9);
      }
n8.nodes.trimToSize();
n5.addNode(n8);
n4.addNode(n5);
      break;
      }
    default:
      jj_la1[9] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case BANG:{
      n13 = jj_consume_token(BANG);
n12.addNode(n13);
      break;
      }
    default:
      jj_la1[10] = jj_gen;
      ;
    }
    n14 = jj_consume_token(COLON);
    n15 = Block(p.getDeclarationTokens());
    n16 = jj_consume_token(LBRACE);
    n17 = ExpansionChoices(c);
    n18 = jj_consume_token(RBRACE);
t = n18;
p.setLastToken(t);
    p.setJumpPatched(jumpPatched);
    production_addexpansion(p, (Expansion_)(c.member));
    addproduction(p);
jtbNode = new BNFProduction(n0, n1, n2, n3, n4, n12, n14, n15, n16, n17, n18);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AccessModifier AccessModifier(NormalProduction p) throws ParseException {// --- JTB generated node declarations ---
  NodeListOptional n0 = new NodeListOptional();
  NodeChoice n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  Token n5 = null;
  AccessModifier jtbNode = null;
  // --- user BNFProduction java block ---
  Token t = null;
    label_5:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case FINAL:
      case PRIVATE:
      case PROTECTED:
      case PUBLIC:{
        ;
        break;
        }
      default:
        jj_la1[11] = jj_gen;
        break label_5;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case PUBLIC:{
        n2 = jj_consume_token(PUBLIC);
t = n2;
n1 = new NodeChoice(n2, 0, 4);
        break;
        }
      case PROTECTED:{
        n3 = jj_consume_token(PROTECTED);
t = n3;
n1 = new NodeChoice(n3, 1, 4);
        break;
        }
      case PRIVATE:{
        n4 = jj_consume_token(PRIVATE);
t = n4;
n1 = new NodeChoice(n4, 2, 4);
        break;
        }
      case FINAL:{
        n5 = jj_consume_token(FINAL);
n1 = new NodeChoice(n5, 3, 4);
        break;
        }
      default:
        jj_la1[12] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n0.addNode(n1);
    }
n0.nodes.trimToSize();
if (t != null)
      p.setAccessMod(t.image);
jtbNode = new AccessModifier(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public RegularExprProduction RegularExprProduction() throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  NodeChoice n1 = null;
  NodeSequence n2 = null;
  Token n3 = null;
  Token n4 = null;
  Token n5 = null;
  NodeSequence n6 = null;
  Token n7 = null;
  Token n8 = null;
  NodeListOptional n9 = null;
  NodeSequence n10 = null;
  Token n11 = null;
  Token n12 = null;
  Token n13 = null;
  RegExprKind n14 = null;
  NodeOptional n15 = new NodeOptional();
  NodeSequence n16 = null;
  Token n17 = null;
  Token n18 = null;
  Token n19 = null;
  Token n20 = null;
  Token n21 = null;
  RegExprSpec n22 = null;
  NodeListOptional n23 = new NodeListOptional();
  NodeSequence n24 = null;
  Token n25 = null;
  RegExprSpec n26 = null;
  Token n27 = null;
  RegularExprProduction jtbNode = null;
  // --- user BNFProduction java block ---
  TokenProduction p = new TokenProduction();
  List<String> states = null;
  Token t = p.firstToken = getToken(1);
  p.setLine(t.beginLine);
  p.setColumn(t.beginColumn);
p.lexStates = new String[]{ "DEFAULT" };
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LT:{
n9 = new NodeListOptional();
      if (jj_2_1(2)) {
n2 = new NodeSequence(3);
        n3 = jj_consume_token(LT);
n2.addNode(n3);
        n4 = jj_consume_token(STAR);
n2.addNode(n4);
        n5 = jj_consume_token(GT);
n2.addNode(n5);
p.lexStates = null;
n1 = new NodeChoice(n2, 0, 2);
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case LT:{
n6 = new NodeSequence(4);
          n7 = jj_consume_token(LT);
n6.addNode(n7);
states = new ArrayList<String>();
          n8 = jj_consume_token(IDENTIFIER);
t = n8;
n6.addNode(n8);
states.add(t.image);
          label_6:
          while (true) {
            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
            case COMMA:{
              ;
              break;
              }
            default:
              jj_la1[13] = jj_gen;
              break label_6;
            }
n10 = new NodeSequence(2);
            n11 = jj_consume_token(COMMA);
n10.addNode(n11);
            n12 = jj_consume_token(IDENTIFIER);
t = n12;
n10.addNode(n12);
states.add(t.image);
n9.addNode(n10);
          }
n9.nodes.trimToSize();
n6.addNode(n9);
          n13 = jj_consume_token(GT);
n6.addNode(n13);
p.lexStates = new String[states.size()];
        for (int i = 0; i != states.size(); i++)
          p.lexStates[i] = states.get(i);
n1 = new NodeChoice(n6, 1, 2);
          break;
          }
        default:
          jj_la1[14] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[15] = jj_gen;
      ;
    }
    n14 = RegExprKind(p);
if (p.kind != TokenProduction.TOKEN && opt.getUserTokenManager())
      JavaCCErrors.warning(getToken(0), "Regular expression is being treated as if it were a TOKEN since option USER_TOKEN_MANAGER has been set to true.");
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LBRACKET:{
n16 = new NodeSequence(3);
      n17 = jj_consume_token(LBRACKET);
n16.addNode(n17);
      n18 = jj_consume_token(_IGNORE_CASE);
t = n18;
n16.addNode(n18);
      n19 = jj_consume_token(RBRACKET);
n16.addNode(n19);
p.ignoreCase = true;
      if (opt.getUserTokenManager())
        JavaCCErrors.warning(t, "Ignoring \"IGNORE_CASE\" specification since option USER_TOKEN_MANAGER has been set to true.");
n15.addNode(n16);
      break;
      }
    default:
      jj_la1[16] = jj_gen;
      ;
    }
    n20 = jj_consume_token(COLON);
    n21 = jj_consume_token(LBRACE);
    n22 = RegExprSpec(p);
    label_7:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BIT_OR:{
        ;
        break;
        }
      default:
        jj_la1[17] = jj_gen;
        break label_7;
      }
n24 = new NodeSequence(2);
      n25 = jj_consume_token(BIT_OR);
n24.addNode(n25);
      n26 = RegExprSpec(p);
n24.addNode(n26);
n23.addNode(n24);
    }
n23.nodes.trimToSize();
    n27 = jj_consume_token(RBRACE);
t = n27;
p.lastToken = t;
    addregexpr(p, opt.getUserTokenManager());
jtbNode = new RegularExprProduction(n0, n14, n15, n20, n21, n22, n23, n27);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TokenManagerDecls TokenManagerDecls() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  ClassOrInterfaceBody n2 = null;
  TokenManagerDecls jtbNode = null;
  // --- user BNFProduction java block ---
  List<Token> decls = new ArrayList<Token>();
  Token t = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(_TOKEN_MGR_DECLS);
t = n0;
    n1 = jj_consume_token(COLON);
    n2 = ClassOrInterfaceBody(false, decls);
add_token_manager_decls(t, decls, opt.getUserTokenManager());
jtbNode = new TokenManagerDecls(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public RegExprKind RegExprKind(TokenProduction p) throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  RegExprKind jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case _TOKEN:{
      n1 = jj_consume_token(_TOKEN);
n0 = new NodeChoice(n1, 0, 4);
p.kind = TokenProduction.TOKEN;
      break;
      }
    case _SPECIAL_TOKEN:{
      n2 = jj_consume_token(_SPECIAL_TOKEN);
n0 = new NodeChoice(n2, 1, 4);
p.kind = TokenProduction.SPECIAL;
      break;
      }
    case _SKIP:{
      n3 = jj_consume_token(_SKIP);
n0 = new NodeChoice(n3, 2, 4);
p.kind = TokenProduction.SKIP;
      break;
      }
    case _MORE:{
      n4 = jj_consume_token(_MORE);
n0 = new NodeChoice(n4, 3, 4);
p.kind = TokenProduction.MORE;
      break;
      }
    default:
      jj_la1[18] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new RegExprKind(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public RegExprSpec RegExprSpec(TokenProduction p) throws ParseException {// --- JTB generated node declarations ---
  RegularExpression n0 = null;
  NodeOptional n1 = new NodeOptional();
  Token n2 = null;
  NodeOptional n3 = new NodeOptional();
  Block n4 = null;
  NodeOptional n5 = new NodeOptional();
  NodeSequence n6 = null;
  Token n7 = null;
  Token n8 = null;
  RegExprSpec jtbNode = null;
  // --- user BNFProduction java block ---
  Container c = new Container();
  Action act = new Action();
  Token t = null;
  RegExprSpec_ res = new RegExprSpec_();
    // --- user BNFProduction ExpansionChoices ---
      n0 = RegularExpression(c);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case BANG:{
      n2 = jj_consume_token(BANG);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[19] = jj_gen;
      ;
    }
res.rexp = (RegularExpression_)c.member;
    res.rexp.tpContext = p;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LBRACE:{
t = getToken(1);
      n4 = Block(act.getActionTokens());
if (opt.getUserTokenManager())
        JavaCCErrors.warning(t, "Ignoring action in regular expression specification since option USER_TOKEN_MANAGER has been set to true.");
      if (res.rexp.private_rexp)
        JavaCCErrors.parse_error(t, "Actions are not permitted on private (#) regular expressions.");
n3.addNode(n4);
      break;
      }
    default:
      jj_la1[20] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case COLON:{
n6 = new NodeSequence(2);
      n7 = jj_consume_token(COLON);
n6.addNode(n7);
      n8 = jj_consume_token(IDENTIFIER);
t = n8;
n6.addNode(n8);
res.nextState = t.image;
      if (res.rexp.private_rexp)
        JavaCCErrors.parse_error(t, "Lexical state changes are not permitted after private (#) regular expressions.");
n5.addNode(n6);
      break;
      }
    default:
      jj_la1[21] = jj_gen;
      ;
    }
res.act = act;
    res.nsTok = t;
    p.respecs.add(res);
jtbNode = new RegExprSpec(n0, n1, n3, n5);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ExpansionChoices ExpansionChoices(Container c1) throws ParseException {// --- JTB generated node declarations ---
  Expansion n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  Expansion n4 = null;
  ExpansionChoices jtbNode = null;
  // --- user BNFProduction java block ---
  boolean morethanone = false;
  Choice ch = new Choice();
  Container c2 = new Container();
    // --- user BNFProduction ExpansionChoices ---
      n0 = Expansion(c1);
    label_8:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BIT_OR:{
        ;
        break;
        }
      default:
        jj_la1[22] = jj_gen;
        break label_8;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(BIT_OR);
n2.addNode(n3);
      n4 = Expansion(c2);
n2.addNode(n4);
if (morethanone) {
        ch.getChoices().add((Expansion_)c2.member);
        ((Expansion_)c2.member).parent = ch;
      } else {
        morethanone = true;
        ch = new Choice((Expansion_)c1.member);
        ((Expansion_)c1.member).parent = ch;
        ch.getChoices().add((Expansion_)c2.member);
        ((Expansion_)c2.member).parent = ch;
      }
n1.addNode(n2);
    }
n1.nodes.trimToSize();
if (morethanone)
      c1.member = ch;
jtbNode = new ExpansionChoices(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Expansion Expansion(Container c1) throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  NodeSequence n1 = null;
  Token n2 = null;
  Token n3 = null;
  LocalLookahead n4 = null;
  Token n5 = null;
  NodeList n6 = new NodeList();
  ExpansionUnit n7 = null;
  Expansion jtbNode = null;
  // --- user BNFProduction java block ---
  Sequence seq = new Sequence();
  Container c2 = new Container();
  Lookahead la = new Lookahead();
  Token t = getToken(1);
  seq.setLine(t.beginLine);
  seq.setColumn(t.beginColumn);
  la.setLine(t.beginLine);
  la.setColumn(t.beginColumn);
la.setAmount(opt.getLookahead());
    la.setLaExpansion(null);
    la.setExplicit(false);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case _LOOKAHEAD:{
n1 = new NodeSequence(4);
      n2 = jj_consume_token(_LOOKAHEAD);
t = n2;
n1.addNode(n2);
      n3 = jj_consume_token(LPAREN);
n1.addNode(n3);
Lookahead oldJtbrt_LocalLookahead_1 = jtbrt_LocalLookahead;
      n4 = LocalLookahead();
la = jtbrt_LocalLookahead;
jtbrt_LocalLookahead = oldJtbrt_LocalLookahead_1;
n1.addNode(n4);
      n5 = jj_consume_token(RPAREN);
n1.addNode(n5);
if (inLocalLA != 0 && la.getAmount() != 0)
        JavaCCErrors.warning(t, "Only semantic lookahead specifications within other lookahead specifications is considered.  Syntactic lookahead is ignored.");
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[23] = jj_gen;
      ;
    }
seq.units.add(la);
    label_9:
    while (true) {
      n7 = ExpansionUnit(c2);
seq.units.add((Expansion_)c2.member);
      ((Expansion_)c2.member).parent = seq;
      ((Expansion_)c2.member).ordinal = seq.units.size() - 1;
n6.addNode(n7);
      if (notTailOfExpansionUnit()) {
        ;
      } else {
        break label_9;
      }
    }
n6.nodes.trimToSize();
if (la.getLaExpansion() == null)
      la.setLaExpansion(seq);
    c1.member = seq;
jtbNode = new Expansion(n0, n6);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public LocalLookahead LocalLookahead() throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  IntegerLiteral n1 = null;
  NodeOptional n2 = new NodeOptional();
  Token n3 = null;
  NodeOptional n4 = new NodeOptional();
  ExpansionChoices n5 = null;
  NodeOptional n6 = new NodeOptional();
  Token n7 = null;
  NodeOptional n8 = new NodeOptional();
  NodeSequence n9 = null;
  Token n10 = null;
  NodeOptional n11 = null;
  Expression n12 = null;
  Token n13 = null;
  LocalLookahead jtbNode = null;
  // --- user BNFProduction java block ---
  Lookahead la = new Lookahead();
  la.setExplicit(true);
  Token t = getToken(1);
  la.setLine(t.beginLine);
  la.setColumn(t.beginColumn);
  la.setLaExpansion(null);
  Container c = new Container();
  boolean commaAtEnd = false, emptyLA = true;
  int laAmount = 0;
  inLocalLA++;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case INTEGER_LITERAL:{
int oldJtbrt_IntegerLiteral_1 = jtbrt_IntegerLiteral;
      n1 = IntegerLiteral();
laAmount = jtbrt_IntegerLiteral;
jtbrt_IntegerLiteral = oldJtbrt_IntegerLiteral_1;
emptyLA = false;
      la.setAmount(laAmount);
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[24] = jj_gen;
      ;
    }
    if (!emptyLA && (getToken(1).kind != RPAREN)) {
      n3 = jj_consume_token(COMMA);
commaAtEnd = true;
n2.addNode(n3);
    } else {
      ;
    }
    if (getToken(1).kind != RPAREN && getToken(1).kind != LBRACE) {
      n5 = ExpansionChoices(c);
emptyLA = false;
      commaAtEnd = false;
      la.setLaExpansion((Expansion_)c.member);
n4.addNode(n5);
    } else {
      ;
    }
    if (!emptyLA && !commaAtEnd && (getToken(1).kind != RPAREN)) {
      n7 = jj_consume_token(COMMA);
commaAtEnd = true;
n6.addNode(n7);
    } else {
      ;
    }
    if (emptyLA || commaAtEnd) {
n11 = new NodeOptional();
n9 = new NodeSequence(3);
      n10 = jj_consume_token(LBRACE);
n9.addNode(n10);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case DOUBLE:
      case FALSE:
      case FLOAT:
      case INT:
      case LONG:
      case NEW:
      case NULL:
      case SHORT:
      case SUPER:
      case THIS:
      case TRUE:
      case VOID:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case BANG:
      case TILDE:
      case INCR:
      case DECR:
      case PLUS:
      case MINUS:
      case IDENTIFIER:{
        n12 = Expression(la.getActionTokens());
n11.addNode(n12);
        break;
        }
      default:
        jj_la1[25] = jj_gen;
        ;
      }
n9.addNode(n11);
      n13 = jj_consume_token(RBRACE);
n9.addNode(n13);
if (emptyLA)
        la.setAmount(0);
n8.addNode(n9);
    } else {
      ;
    }
jtbNode = new LocalLookahead(n0, n2, n4, n6, n8);
inLocalLA--;
    jtbrt_LocalLookahead = la;
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ExpansionUnit ExpansionUnit(Container c) throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Token n2 = null;
  Token n3 = null;
  LocalLookahead n4 = null;
  Token n5 = null;
  Block n6 = null;
  NodeSequence n7 = null;
  Token n8 = null;
  ExpansionChoices n9 = null;
  Token n10 = null;
  ExpansionUnitTCF n11 = null;
  NodeSequence n12 = null;
  NodeOptional n13 = new NodeOptional();
  NodeSequence n14 = null;
  PrimaryExpression n15 = null;
  Token n16 = null;
  NodeChoice n17 = null;
  NodeSequence n18 = null;
  IdentifierAsString n19 = null;
  Arguments n20 = null;
  NodeOptional n21 = new NodeOptional();
  Token n22 = null;
  NodeSequence n23 = null;
  RegularExpression n24 = null;
  NodeOptional n25 = new NodeOptional();
  NodeSequence n26 = null;
  Token n27 = null;
  Token n28 = null;
  NodeOptional n29 = new NodeOptional();
  Token n30 = null;
  NodeSequence n31 = null;
  Token n32 = null;
  ExpansionChoices n33 = null;
  Token n34 = null;
  NodeOptional n35 = new NodeOptional();
  NodeChoice n36 = null;
  Token n37 = null;
  Token n38 = null;
  Token n39 = null;
  ExpansionUnit jtbNode = null;
  // --- user BNFProduction java block ---
  String name = null;
  List<Token> lhsTokens = new ArrayList<Token>();
  NonTerminal nt = null;
  Action act = null;
  Token t = null;
  Lookahead la = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case _LOOKAHEAD:{
n1 = new NodeSequence(4);
      n2 = jj_consume_token(_LOOKAHEAD);
t = n2;
n1.addNode(n2);
      n3 = jj_consume_token(LPAREN);
n1.addNode(n3);
Lookahead oldJtbrt_LocalLookahead_1 = jtbrt_LocalLookahead;
      n4 = LocalLookahead();
la = jtbrt_LocalLookahead;
jtbrt_LocalLookahead = oldJtbrt_LocalLookahead_1;
n1.addNode(n4);
      n5 = jj_consume_token(RPAREN);
n1.addNode(n5);
n0 = new NodeChoice(n1, 0, 6);
la.setLaExpansion(new REndOfFile());
      Choice ch = new Choice(t);
      Sequence seq = new Sequence(t, la);
      la.parent = seq;
      la.ordinal = 0;
      act = new Action();
      act.setLine(t.beginLine);
      act.setColumn(t.beginColumn);
      seq.units.add(act);
      act.parent = seq;
      act.ordinal = 1;
      ch.getChoices().add(seq);
      seq.parent = ch;
      seq.ordinal = 0;
      if (la.getAmount() != 0)
        if (la.getActionTokens().size() != 0)
          JavaCCErrors.warning(t, "Encountered LOOKAHEAD(...) at a non-choice location.  Only semantic lookahead will be considered here.");
        else
          JavaCCErrors.warning(t, "Encountered LOOKAHEAD(...) at a non-choice location.  This will be ignored.");
      c.member = ch;
      break;
      }
    case LBRACE:{
act = new Action();
      t = getToken(1);
      act.setLine(t.beginLine);
      act.setColumn(t.beginColumn);
      inAction = true;
      n6 = Block(act.getActionTokens());
n0 = new NodeChoice(n6, 1, 6);
inAction = false;
      if (inLocalLA != 0)
        JavaCCErrors.warning(t, "Action within lookahead specification will be ignored.");
      c.member = act;
      break;
      }
    case LBRACKET:{
n7 = new NodeSequence(3);
      n8 = jj_consume_token(LBRACKET);
t = n8;
n7.addNode(n8);
      n9 = ExpansionChoices(c);
n7.addNode(n9);
      n10 = jj_consume_token(RBRACKET);
n7.addNode(n10);
n0 = new NodeChoice(n7, 2, 6);
c.member = new ZeroOrOne(t, (Expansion_)c.member);
      break;
      }
    case TRY:{
      n11 = ExpansionUnitTCF(c);
n0 = new NodeChoice(n11, 3, 6);
      break;
      }
    default:
      jj_la1[32] = jj_gen;
      if (jj_2_3(2147483647)) {
n12 = new NodeSequence(2);
        if (jj_2_2(2147483647)) {
Token first = getToken(1);
n14 = new NodeSequence(2);
          n15 = PrimaryExpression();
n14.addNode(n15);
Token last = getToken(0);
          n16 = jj_consume_token(ASSIGN);
n14.addNode(n16);
t = first;
        while (true) {
          lhsTokens.add(t);
          if (t == last)
            break;
          t = t.next;
        }
n13.addNode(n14);
        } else {
          ;
        }
n12.addNode(n13);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case IDENTIFIER:{
nt = new NonTerminal();
          t = getToken(1);
          nt.setLine(t.beginLine);
          nt.setColumn(t.beginColumn);
          nt.setLhsTokens(lhsTokens);
n18 = new NodeSequence(3);
String oldJtbrt_IdentifierAsString_2 = jtbrt_IdentifierAsString;
          n19 = IdentifierAsString();
name = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_2;
n18.addNode(n19);
          n20 = Arguments(nt.getArgumentTokens());
n18.addNode(n20);
nt.setName(name);
          c.member = nt;
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case BANG:{
            n22 = jj_consume_token(BANG);
n21.addNode(n22);
            break;
            }
          default:
            jj_la1[26] = jj_gen;
            ;
          }
n18.addNode(n21);
n17 = new NodeChoice(n18, 0, 2);
          break;
          }
        case STRING_LITERAL:
        case LT:{
n23 = new NodeSequence(3);
          n24 = RegularExpression(c);
n23.addNode(n24);
((RegularExpression_)(c.member)).lhsTokens = lhsTokens;
          add_inline_regexpr((RegularExpression_)(c.member));
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case DOT:{
n26 = new NodeSequence(2);
            n27 = jj_consume_token(DOT);
n26.addNode(n27);
            n28 = jj_consume_token(IDENTIFIER);
t = n28;
n26.addNode(n28);
((RegularExpression_)(c.member)).rhsToken = t;
n25.addNode(n26);
            break;
            }
          default:
            jj_la1[27] = jj_gen;
            ;
          }
n23.addNode(n25);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case BANG:{
            n30 = jj_consume_token(BANG);
n29.addNode(n30);
            break;
            }
          default:
            jj_la1[28] = jj_gen;
            ;
          }
n23.addNode(n29);
n17 = new NodeChoice(n23, 1, 2);
          break;
          }
        default:
          jj_la1[29] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
n12.addNode(n17);
n0 = new NodeChoice(n12, 4, 6);
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case LPAREN:{
n31 = new NodeSequence(4);
          n32 = jj_consume_token(LPAREN);
t = n32;
n31.addNode(n32);
          n33 = ExpansionChoices(c);
n31.addNode(n33);
          n34 = jj_consume_token(RPAREN);
n31.addNode(n34);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case HOOK:
          case PLUS:
          case STAR:{
            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
            case PLUS:{
              n37 = jj_consume_token(PLUS);
c.member = new OneOrMore(t, (Expansion_)c.member);
n36 = new NodeChoice(n37, 0, 3);
              break;
              }
            case STAR:{
              n38 = jj_consume_token(STAR);
c.member = new ZeroOrMore(t, (Expansion_)c.member);
n36 = new NodeChoice(n38, 1, 3);
              break;
              }
            case HOOK:{
              n39 = jj_consume_token(HOOK);
c.member = new ZeroOrOne(t, (Expansion_)c.member);
n36 = new NodeChoice(n39, 2, 3);
              break;
              }
            default:
              jj_la1[30] = jj_gen;
              jj_consume_token(-1);
              throw new ParseException();
            }
n35.addNode(n36);
            break;
            }
          default:
            jj_la1[31] = jj_gen;
            ;
          }
n31.addNode(n35);
n0 = new NodeChoice(n31, 5, 6);
          break;
          }
        default:
          jj_la1[33] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
jtbNode = new ExpansionUnit(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ExpansionUnitTCF ExpansionUnitTCF(Container c) throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  ExpansionChoices n2 = null;
  Token n3 = null;
  NodeListOptional n4 = new NodeListOptional();
  NodeSequence n5 = null;
  Token n6 = null;
  Token n7 = null;
  NodeListOptional n8 = null;
  Annotation n9 = null;
  NodeOptional n10 = null;
  Token n11 = null;
  Name n12 = null;
  Token n13 = null;
  Token n14 = null;
  Block n15 = null;
  NodeOptional n16 = new NodeOptional();
  NodeSequence n17 = null;
  Token n18 = null;
  Block n19 = null;
  ExpansionUnitTCF jtbNode = null;
  // --- user BNFProduction java block ---
  Token t = null;
Container expch = new Container();
    List<List<Token>> types = new ArrayList<List<Token>>();
    List<Token> ids = new ArrayList<Token>();
    List<List<Token>> catchblks = new ArrayList<List<Token>>();
    List<Token> finallyblk = null;
    List<Token> vec = new ArrayList<Token>();
    Token t0 = null;
    n0 = jj_consume_token(TRY);
t0 = n0;
    n1 = jj_consume_token(LBRACE);
    n2 = ExpansionChoices(expch);
    n3 = jj_consume_token(RBRACE);
    label_10:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case CATCH:{
        ;
        break;
        }
      default:
        jj_la1[34] = jj_gen;
        break label_10;
      }
n8 = new NodeListOptional();
n10 = new NodeOptional();
n5 = new NodeSequence(8);
      n6 = jj_consume_token(CATCH);
n5.addNode(n6);
      n7 = jj_consume_token(LPAREN);
n5.addNode(n7);
      label_11:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 145:{
          ;
          break;
          }
        default:
          jj_la1[35] = jj_gen;
          break label_11;
        }
        n9 = Annotation();
n8.addNode(n9);
      }
n8.nodes.trimToSize();
n5.addNode(n8);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case FINAL:{
        n11 = jj_consume_token(FINAL);
n10.addNode(n11);
        break;
        }
      default:
        jj_la1[36] = jj_gen;
        ;
      }
n5.addNode(n10);
      n12 = Name(vec);
n5.addNode(n12);
      n13 = jj_consume_token(IDENTIFIER);
t = n13;
n5.addNode(n13);
      n14 = jj_consume_token(RPAREN);
n5.addNode(n14);
types.add(vec);
      ids.add(t);
      vec = new ArrayList<Token>();
      inAction = true;
      n15 = Block(vec);
n5.addNode(n15);
inAction = false;
      catchblks.add(vec);
      vec = new ArrayList<Token>();
n4.addNode(n5);
    }
n4.nodes.trimToSize();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case FINALLY:{
inAction = true;
n17 = new NodeSequence(2);
      n18 = jj_consume_token(FINALLY);
n17.addNode(n18);
      n19 = Block(vec);
n17.addNode(n19);
inAction = false;
      finallyblk = vec;
n16.addNode(n17);
      break;
      }
    default:
      jj_la1[37] = jj_gen;
      ;
    }
makeTryBlock(t0, c, expch, types, ids, catchblks, finallyblk);
jtbNode = new ExpansionUnitTCF(n0, n1, n2, n3, n4, n16);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public RegularExpression RegularExpression(Container c) throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  StringLiteral n1 = null;
  NodeSequence n2 = null;
  Token n3 = null;
  NodeOptional n4 = new NodeOptional();
  NodeSequence n5 = null;
  NodeOptional n6 = null;
  Token n7 = null;
  IdentifierAsString n8 = null;
  Token n9 = null;
  ComplexRegularExpressionChoices n10 = null;
  Token n11 = null;
  NodeSequence n12 = null;
  Token n13 = null;
  IdentifierAsString n14 = null;
  Token n15 = null;
  NodeSequence n16 = null;
  Token n17 = null;
  Token n18 = null;
  Token n19 = null;
  RegularExpression jtbNode = null;
  // --- user BNFProduction java block ---
  REndOfFile ef = null;
  String image = null;
  boolean private_rexp = false;
  Token t = getToken(1);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case STRING_LITERAL:{
String oldJtbrt_StringLiteral_1 = jtbrt_StringLiteral;
      n1 = StringLiteral();
image = jtbrt_StringLiteral;
jtbrt_StringLiteral = oldJtbrt_StringLiteral_1;
n0 = new NodeChoice(n1, 0, 4);
c.member = new RStringLiteral(t, image);
      break;
      }
    default:
      jj_la1[40] = jj_gen;
      if (jj_2_4(3)) {
image = "";
n2 = new NodeSequence(4);
        n3 = jj_consume_token(LT);
n2.addNode(n3);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case 139:
        case IDENTIFIER:{
n6 = new NodeOptional();
n5 = new NodeSequence(3);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case 139:{
            n7 = jj_consume_token(139);
private_rexp = true;
n6.addNode(n7);
            break;
            }
          default:
            jj_la1[38] = jj_gen;
            ;
          }
n5.addNode(n6);
String oldJtbrt_IdentifierAsString_2 = jtbrt_IdentifierAsString;
          n8 = IdentifierAsString();
image = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_2;
n5.addNode(n8);
          n9 = jj_consume_token(COLON);
n5.addNode(n9);
n4.addNode(n5);
          break;
          }
        default:
          jj_la1[39] = jj_gen;
          ;
        }
n2.addNode(n4);
        n10 = ComplexRegularExpressionChoices(c);
n2.addNode(n10);
        n11 = jj_consume_token(GT);
n2.addNode(n11);
n0 = new NodeChoice(n2, 1, 4);
RegularExpression_ re = null;
      if (c.member instanceof RJustName) {
        RSequence seq = new RSequence();
        seq.units.add((RegularExpression_)c.member);
        re = seq;
      } else
        re = (RegularExpression_)c.member;
      re.label = image;
      re.private_rexp = private_rexp;
      re.setLine(t.beginLine);
      re.setColumn(t.beginColumn);
      c.member = re;
      } else if (jj_2_5(2)) {
n12 = new NodeSequence(3);
        n13 = jj_consume_token(LT);
n12.addNode(n13);
String oldJtbrt_IdentifierAsString_3 = jtbrt_IdentifierAsString;
        n14 = IdentifierAsString();
image = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_3;
n12.addNode(n14);
        n15 = jj_consume_token(GT);
n12.addNode(n15);
n0 = new NodeChoice(n12, 2, 4);
c.member = new RJustName(t, image);
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case LT:{
n16 = new NodeSequence(3);
          n17 = jj_consume_token(LT);
n16.addNode(n17);
          n18 = jj_consume_token(_EOF);
n16.addNode(n18);
          n19 = jj_consume_token(GT);
n16.addNode(n19);
n0 = new NodeChoice(n16, 3, 4);
ef = new REndOfFile();
      ef.setLine(t.beginLine);
      ef.setColumn(t.beginColumn);
      ef.ordinal = 0;
      c.member = ef;
          break;
          }
        default:
          jj_la1[41] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
jtbNode = new RegularExpression(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ComplexRegularExpressionChoices ComplexRegularExpressionChoices(Container c1) throws ParseException {// --- JTB generated node declarations ---
  ComplexRegularExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  ComplexRegularExpression n4 = null;
  ComplexRegularExpressionChoices jtbNode = null;
  // --- user BNFProduction java block ---
  boolean morethanone = false;
  RChoice ch = new RChoice();
  Container c2 = new Container();
    // --- user BNFProduction ExpansionChoices ---
      n0 = ComplexRegularExpression(c1);
    label_12:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BIT_OR:{
        ;
        break;
        }
      default:
        jj_la1[42] = jj_gen;
        break label_12;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(BIT_OR);
n2.addNode(n3);
      n4 = ComplexRegularExpression(c2);
n2.addNode(n4);
if (morethanone)
        ch.getChoices().add((RegularExpression_)c2.member);
      else {
        morethanone = true;
        ch = new RChoice();
        ch.setLine(((RegularExpression_)c1.member).getLine());
        ch.setColumn(((RegularExpression_)c1.member).getColumn());
        ch.getChoices().add((RegularExpression_)c1.member);
        ch.getChoices().add((RegularExpression_)c2.member);
      }
n1.addNode(n2);
    }
n1.nodes.trimToSize();
if (morethanone)
      c1.member = ch;
jtbNode = new ComplexRegularExpressionChoices(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ComplexRegularExpression ComplexRegularExpression(Container c1) throws ParseException {// --- JTB generated node declarations ---
  NodeList n0 = new NodeList();
  ComplexRegularExpressionUnit n1 = null;
  ComplexRegularExpression jtbNode = null;
  // --- user BNFProduction java block ---
  int count = 0;
  RSequence seq = new RSequence();
  Container c2 = new Container();
    label_13:
    while (true) {
      n1 = ComplexRegularExpressionUnit(c2);
count++;
      if (count == 1)
        c1.member = c2.member;
      else
        if (count == 2) {
          seq = new RSequence();
          seq.setLine(((RegularExpression_)c1.member).getLine());
          seq.setColumn(((RegularExpression_)c1.member).getColumn());
          seq.units.add((RegularExpression_)c1.member);
          seq.units.add((RegularExpression_)c2.member);
        } else
          seq.units.add((RegularExpression_)c2.member);
n0.addNode(n1);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case STRING_LITERAL:
      case LPAREN:
      case LBRACKET:
      case LT:
      case TILDE:{
        ;
        break;
        }
      default:
        jj_la1[43] = jj_gen;
        break label_13;
      }
    }
n0.nodes.trimToSize();
if (count > 1)
      c1.member = seq;
jtbNode = new ComplexRegularExpression(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ComplexRegularExpressionUnit ComplexRegularExpressionUnit(Container c) throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  StringLiteral n1 = null;
  NodeSequence n2 = null;
  Token n3 = null;
  IdentifierAsString n4 = null;
  Token n5 = null;
  CharacterList n6 = null;
  NodeSequence n7 = null;
  Token n8 = null;
  ComplexRegularExpressionChoices n9 = null;
  Token n10 = null;
  NodeOptional n11 = new NodeOptional();
  NodeChoice n12 = null;
  Token n13 = null;
  Token n14 = null;
  Token n15 = null;
  NodeSequence n16 = null;
  Token n17 = null;
  IntegerLiteral n18 = null;
  NodeOptional n19 = null;
  NodeSequence n20 = null;
  Token n21 = null;
  NodeOptional n22 = null;
  IntegerLiteral n23 = null;
  Token n24 = null;
  ComplexRegularExpressionUnit jtbNode = null;
  // --- user BNFProduction java block ---
  String image = null;
  Token t = getToken(1);
  int r1 = 0, r2 = -1;
  boolean hasMax = false;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case STRING_LITERAL:{
String oldJtbrt_StringLiteral_1 = jtbrt_StringLiteral;
      n1 = StringLiteral();
image = jtbrt_StringLiteral;
jtbrt_StringLiteral = oldJtbrt_StringLiteral_1;
n0 = new NodeChoice(n1, 0, 4);
c.member = new RStringLiteral(t, image);
      break;
      }
    case LT:{
n2 = new NodeSequence(3);
      n3 = jj_consume_token(LT);
n2.addNode(n3);
String oldJtbrt_IdentifierAsString_2 = jtbrt_IdentifierAsString;
      n4 = IdentifierAsString();
image = jtbrt_IdentifierAsString;
jtbrt_IdentifierAsString = oldJtbrt_IdentifierAsString_2;
n2.addNode(n4);
      n5 = jj_consume_token(GT);
n2.addNode(n5);
n0 = new NodeChoice(n2, 1, 4);
c.member = new RJustName(t, image);
      break;
      }
    case LBRACKET:
    case TILDE:{
      n6 = CharacterList(c);
n0 = new NodeChoice(n6, 2, 4);
      break;
      }
    case LPAREN:{
n7 = new NodeSequence(4);
      n8 = jj_consume_token(LPAREN);
n7.addNode(n8);
      n9 = ComplexRegularExpressionChoices(c);
n7.addNode(n9);
      n10 = jj_consume_token(RPAREN);
n7.addNode(n10);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LBRACE:
      case HOOK:
      case PLUS:
      case STAR:{
n19 = new NodeOptional();
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case PLUS:{
          n13 = jj_consume_token(PLUS);
c.member = new ROneOrMore(t, (RegularExpression_)c.member);
n12 = new NodeChoice(n13, 0, 4);
          break;
          }
        case STAR:{
          n14 = jj_consume_token(STAR);
c.member = new RZeroOrMore(t, (RegularExpression_)c.member);
n12 = new NodeChoice(n14, 1, 4);
          break;
          }
        case HOOK:{
          n15 = jj_consume_token(HOOK);
RZeroOrOne zorexp = new RZeroOrOne();
          zorexp.setLine(t.beginLine);
          zorexp.setColumn(t.beginColumn);
          zorexp.regexpr = (RegularExpression_)c.member;
          c.member = zorexp;
n12 = new NodeChoice(n15, 2, 4);
          break;
          }
        case LBRACE:{
n16 = new NodeSequence(4);
          n17 = jj_consume_token(LBRACE);
n16.addNode(n17);
int oldJtbrt_IntegerLiteral_3 = jtbrt_IntegerLiteral;
          n18 = IntegerLiteral();
r1 = jtbrt_IntegerLiteral;
jtbrt_IntegerLiteral = oldJtbrt_IntegerLiteral_3;
n16.addNode(n18);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case COMMA:{
n22 = new NodeOptional();
n20 = new NodeSequence(2);
            n21 = jj_consume_token(COMMA);
n20.addNode(n21);
hasMax = true;
            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
            case INTEGER_LITERAL:{
int oldJtbrt_IntegerLiteral_4 = jtbrt_IntegerLiteral;
              n23 = IntegerLiteral();
r2 = jtbrt_IntegerLiteral;
jtbrt_IntegerLiteral = oldJtbrt_IntegerLiteral_4;
n22.addNode(n23);
              break;
              }
            default:
              jj_la1[44] = jj_gen;
              ;
            }
n20.addNode(n22);
n19.addNode(n20);
            break;
            }
          default:
            jj_la1[45] = jj_gen;
            ;
          }
n16.addNode(n19);
          n24 = jj_consume_token(RBRACE);
n16.addNode(n24);
RRepetitionRange rrrexp = new RRepetitionRange();
          rrrexp.setLine(t.beginLine);
          rrrexp.setColumn(t.beginColumn);
          rrrexp.min = r1;
          rrrexp.max = r2;
          rrrexp.hasMax = hasMax;
          rrrexp.regexpr = (RegularExpression_)c.member;
          c.member = rrrexp;
n12 = new NodeChoice(n16, 3, 4);
          break;
          }
        default:
          jj_la1[46] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
n11.addNode(n12);
        break;
        }
      default:
        jj_la1[47] = jj_gen;
        ;
      }
n7.addNode(n11);
n0 = new NodeChoice(n7, 3, 4);
      break;
      }
    default:
      jj_la1[48] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new ComplexRegularExpressionUnit(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public CharacterList CharacterList(Container c1) throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  Token n1 = null;
  Token n2 = null;
  NodeOptional n3 = new NodeOptional();
  NodeSequence n4 = null;
  CharacterDescriptor n5 = null;
  NodeListOptional n6 = null;
  NodeSequence n7 = null;
  Token n8 = null;
  CharacterDescriptor n9 = null;
  Token n10 = null;
  CharacterList jtbNode = null;
  // --- user BNFProduction java block ---
  RCharacterList chlist = new RCharacterList();
  Token t = getToken(1);
  chlist.setLine(t.beginLine);
  chlist.setColumn(t.beginColumn);
  Container c2 = new Container();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case TILDE:{
      n1 = jj_consume_token(TILDE);
chlist.negated_list = true;
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[49] = jj_gen;
      ;
    }
    n2 = jj_consume_token(LBRACKET);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case STRING_LITERAL:{
n6 = new NodeListOptional();
n4 = new NodeSequence(2);
      n5 = CharacterDescriptor(c2);
n4.addNode(n5);
chlist.descriptors.add(c2.member);
      label_14:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case COMMA:{
          ;
          break;
          }
        default:
          jj_la1[50] = jj_gen;
          break label_14;
        }
n7 = new NodeSequence(2);
        n8 = jj_consume_token(COMMA);
n7.addNode(n8);
        n9 = CharacterDescriptor(c2);
n7.addNode(n9);
chlist.descriptors.add(c2.member);
n6.addNode(n7);
      }
n6.nodes.trimToSize();
n4.addNode(n6);
n3.addNode(n4);
      break;
      }
    default:
      jj_la1[51] = jj_gen;
      ;
    }
    n10 = jj_consume_token(RBRACKET);
c1.member = chlist;
jtbNode = new CharacterList(n0, n2, n3, n10);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public CharacterDescriptor CharacterDescriptor(Container c) throws ParseException {// --- JTB generated node declarations ---
  StringLiteral n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  StringLiteral n4 = null;
  CharacterDescriptor jtbNode = null;
  // --- user BNFProduction java block ---
  char c1 = ' ';
  char c2 = ' ';
  boolean isrange = false;
  String imageL = null;
  String imageR = null;
  Token t = getToken(1);
String oldJtbrt_StringLiteral_1 = jtbrt_StringLiteral;
    n0 = StringLiteral();
imageL = jtbrt_StringLiteral;
jtbrt_StringLiteral = oldJtbrt_StringLiteral_1;
c1 = character_descriptor_assign(getToken(0), imageL);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case MINUS:{
n2 = new NodeSequence(2);
      n3 = jj_consume_token(MINUS);
n2.addNode(n3);
String oldJtbrt_StringLiteral_2 = jtbrt_StringLiteral;
      n4 = StringLiteral();
imageR = jtbrt_StringLiteral;
jtbrt_StringLiteral = oldJtbrt_StringLiteral_2;
n2.addNode(n4);
isrange = true;
      c2 = character_descriptor_assign(getToken(0), imageR, imageL);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[52] = jj_gen;
      ;
    }
if (isrange) {
      CharacterRange cr = new CharacterRange();
      cr.setLine(t.beginLine);
      cr.setColumn(t.beginColumn);
      cr.setLeft(c1);
      cr.setRight(c2);
      c.member = cr;
    } else {
      SingleCharacter sc = new SingleCharacter();
      sc.setLine(t.beginLine);
      sc.setColumn(t.beginColumn);
      sc.ch = c1;
      c.member = sc;
    }
jtbNode = new CharacterDescriptor(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public IdentifierAsString IdentifierAsString() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  IdentifierAsString jtbNode = null;
  // --- user BNFProduction java block ---
  Token t = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IDENTIFIER);
t = n0;
jtbNode = new IdentifierAsString(n0);
jtbrt_IdentifierAsString = t.image;
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public JavaIdentifier JavaIdentifier() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  Token n5 = null;
  Token n6 = null;
  Token n7 = null;
  Token n8 = null;
  Token n9 = null;
  Token n10 = null;
  Token n11 = null;
  Token n12 = null;
  JavaIdentifier jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      n1 = jj_consume_token(IDENTIFIER);
n0 = new NodeChoice(n1, 0, 12);
      break;
      }
    case _LOOKAHEAD:{
      n2 = jj_consume_token(_LOOKAHEAD);
n0 = new NodeChoice(n2, 1, 12);
      break;
      }
    case _IGNORE_CASE:{
      n3 = jj_consume_token(_IGNORE_CASE);
n0 = new NodeChoice(n3, 2, 12);
      break;
      }
    case _PARSER_BEGIN:{
      n4 = jj_consume_token(_PARSER_BEGIN);
n0 = new NodeChoice(n4, 3, 12);
      break;
      }
    case _PARSER_END:{
      n5 = jj_consume_token(_PARSER_END);
n0 = new NodeChoice(n5, 4, 12);
      break;
      }
    case _JAVACODE:{
      n6 = jj_consume_token(_JAVACODE);
n0 = new NodeChoice(n6, 5, 12);
      break;
      }
    case _TOKEN:{
      n7 = jj_consume_token(_TOKEN);
n0 = new NodeChoice(n7, 6, 12);
      break;
      }
    case _SPECIAL_TOKEN:{
      n8 = jj_consume_token(_SPECIAL_TOKEN);
n0 = new NodeChoice(n8, 7, 12);
      break;
      }
    case _MORE:{
      n9 = jj_consume_token(_MORE);
n0 = new NodeChoice(n9, 8, 12);
      break;
      }
    case _SKIP:{
      n10 = jj_consume_token(_SKIP);
n0 = new NodeChoice(n10, 9, 12);
      break;
      }
    case _TOKEN_MGR_DECLS:{
      n11 = jj_consume_token(_TOKEN_MGR_DECLS);
n0 = new NodeChoice(n11, 10, 12);
      break;
      }
    case _EOF:{
      n12 = jj_consume_token(_EOF);
n0 = new NodeChoice(n12, 11, 12);
      break;
      }
    default:
      jj_la1[53] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new JavaIdentifier(n0);
Token retval = getToken(0);
    retval.kind = IDENTIFIER;
    jtbrt_JavaIdentifier = retval;
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public CompilationUnit CompilationUnit() throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  PackageDeclaration n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  ImportDeclaration n3 = null;
  NodeListOptional n4 = new NodeListOptional();
  TypeDeclaration n5 = null;
  CompilationUnit jtbNode = null;
  // --- user BNFProduction java block ---
  set_initial_cu_token(getToken(1));
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case PACKAGE:{
      n1 = PackageDeclaration();
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[54] = jj_gen;
      ;
    }
    label_15:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case IMPORT:{
        ;
        break;
        }
      default:
        jj_la1[55] = jj_gen;
        break label_15;
      }
      n3 = ImportDeclaration();
n2.addNode(n3);
    }
n2.nodes.trimToSize();
    label_16:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ABSTRACT:
      case CLASS:
      case ENUM:
      case FINAL:
      case INTERFACE:
      case NATIVE:
      case PRIVATE:
      case PROTECTED:
      case PUBLIC:
      case STATIC:
      case STRICTFP:
      case SYNCHRONIZED:
      case TRANSIENT:
      case VOLATILE:
      case SEMICOLON:
      case 145:{
        ;
        break;
        }
      default:
        jj_la1[56] = jj_gen;
        break label_16;
      }
      n5 = TypeDeclaration();
n4.addNode(n5);
    }
n4.nodes.trimToSize();
insertionpointerrors(getToken(1));
jtbNode = new CompilationUnit(n0, n2, n4);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PackageDeclaration PackageDeclaration() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Name n1 = null;
  Token n2 = null;
  PackageDeclaration jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(PACKAGE);
String oldJtbrt_Name_1 = jtbrt_Name;
    n1 = Name(null);
grammarPackage = jtbrt_Name;
jtbrt_Name = oldJtbrt_Name_1;
    n2 = jj_consume_token(SEMICOLON);
jtbNode = new PackageDeclaration(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ImportDeclaration ImportDeclaration() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  Token n2 = null;
  Name n3 = null;
  NodeOptional n4 = new NodeOptional();
  NodeSequence n5 = null;
  Token n6 = null;
  Token n7 = null;
  Token n8 = null;
  ImportDeclaration jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IMPORT);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case STATIC:{
      n2 = jj_consume_token(STATIC);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[57] = jj_gen;
      ;
    }
    n3 = Name(null);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case DOT:{
n5 = new NodeSequence(2);
      n6 = jj_consume_token(DOT);
n5.addNode(n6);
      n7 = jj_consume_token(STAR);
n5.addNode(n7);
n4.addNode(n5);
      break;
      }
    default:
      jj_la1[58] = jj_gen;
      ;
    }
    n8 = jj_consume_token(SEMICOLON);
jtbNode = new ImportDeclaration(n0, n1, n3, n4, n8);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Modifiers Modifiers() throws ParseException {// --- JTB generated node declarations ---
  NodeListOptional n0 = new NodeListOptional();
  NodeChoice n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  Token n5 = null;
  Token n6 = null;
  Token n7 = null;
  Token n8 = null;
  Token n9 = null;
  Token n10 = null;
  Token n11 = null;
  Token n12 = null;
  Annotation n13 = null;
  Modifiers jtbNode = null;
  // --- user BNFProduction java block ---
  int modifiers = 0;
    label_17:
    while (true) {
      if (jj_2_6(2)) {
        ;
      } else {
        break label_17;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case PUBLIC:{
        n2 = jj_consume_token(PUBLIC);
modifiers |= ModifierSet.M_PUBLIC;
n1 = new NodeChoice(n2, 0, 12);
        break;
        }
      case STATIC:{
        n3 = jj_consume_token(STATIC);
modifiers |= ModifierSet.M_STATIC;
n1 = new NodeChoice(n3, 1, 12);
        break;
        }
      case PROTECTED:{
        n4 = jj_consume_token(PROTECTED);
modifiers |= ModifierSet.M_PROTECTED;
n1 = new NodeChoice(n4, 2, 12);
        break;
        }
      case PRIVATE:{
        n5 = jj_consume_token(PRIVATE);
modifiers |= ModifierSet.M_PRIVATE;
n1 = new NodeChoice(n5, 3, 12);
        break;
        }
      case FINAL:{
        n6 = jj_consume_token(FINAL);
modifiers |= ModifierSet.M_FINAL;
n1 = new NodeChoice(n6, 4, 12);
        break;
        }
      case ABSTRACT:{
        n7 = jj_consume_token(ABSTRACT);
modifiers |= ModifierSet.M_ABSTRACT;
n1 = new NodeChoice(n7, 5, 12);
        break;
        }
      case SYNCHRONIZED:{
        n8 = jj_consume_token(SYNCHRONIZED);
modifiers |= ModifierSet.M_SYNCHRONIZED;
n1 = new NodeChoice(n8, 6, 12);
        break;
        }
      case NATIVE:{
        n9 = jj_consume_token(NATIVE);
modifiers |= ModifierSet.M_NATIVE;
n1 = new NodeChoice(n9, 7, 12);
        break;
        }
      case TRANSIENT:{
        n10 = jj_consume_token(TRANSIENT);
modifiers |= ModifierSet.M_TRANSIENT;
n1 = new NodeChoice(n10, 8, 12);
        break;
        }
      case VOLATILE:{
        n11 = jj_consume_token(VOLATILE);
modifiers |= ModifierSet.M_VOLATILE;
n1 = new NodeChoice(n11, 9, 12);
        break;
        }
      case STRICTFP:{
        n12 = jj_consume_token(STRICTFP);
modifiers |= ModifierSet.M_STRICTFP;
n1 = new NodeChoice(n12, 10, 12);
        break;
        }
      case 145:{
        n13 = Annotation();
n1 = new NodeChoice(n13, 11, 12);
        break;
        }
      default:
        jj_la1[59] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n0.addNode(n1);
    }
n0.nodes.trimToSize();
jtbrt_Modifiers = modifiers;
jtbNode = new Modifiers(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TypeDeclaration TypeDeclaration() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  NodeSequence n2 = null;
  Modifiers n3 = null;
  NodeChoice n4 = null;
  ClassOrInterfaceDeclaration n5 = null;
  EnumDeclaration n6 = null;
  AnnotationTypeDeclaration n7 = null;
  TypeDeclaration jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case SEMICOLON:{
      n1 = jj_consume_token(SEMICOLON);
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case ABSTRACT:
    case CLASS:
    case ENUM:
    case FINAL:
    case INTERFACE:
    case NATIVE:
    case PRIVATE:
    case PROTECTED:
    case PUBLIC:
    case STATIC:
    case STRICTFP:
    case SYNCHRONIZED:
    case TRANSIENT:
    case VOLATILE:
    case 145:{
n2 = new NodeSequence(2);
      n3 = Modifiers();
n2.addNode(n3);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case CLASS:
      case INTERFACE:{
        n5 = ClassOrInterfaceDeclaration();
n4 = new NodeChoice(n5, 0, 3);
        break;
        }
      case ENUM:{
        n6 = EnumDeclaration();
n4 = new NodeChoice(n6, 1, 3);
        break;
        }
      case 145:{
        n7 = AnnotationTypeDeclaration();
n4 = new NodeChoice(n7, 2, 3);
        break;
        }
      default:
        jj_la1[60] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n2.addNode(n4);
n0 = new NodeChoice(n2, 1, 2);
      break;
      }
    default:
      jj_la1[61] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new TypeDeclaration(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ClassOrInterfaceDeclaration ClassOrInterfaceDeclaration() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  Token n3 = null;
  NodeOptional n4 = new NodeOptional();
  TypeParameters n5 = null;
  NodeOptional n6 = new NodeOptional();
  ExtendsList n7 = null;
  NodeOptional n8 = new NodeOptional();
  ImplementsList n9 = null;
  ClassOrInterfaceBody n10 = null;
  ClassOrInterfaceDeclaration jtbNode = null;
  // --- user BNFProduction java block ---
  boolean isInterface = false;
  class_nesting++;
  Token t = null;
  boolean is_parser_class = false;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case CLASS:{
      n1 = jj_consume_token(CLASS);
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case INTERFACE:{
      n2 = jj_consume_token(INTERFACE);
isInterface = true;
n0 = new NodeChoice(n2, 1, 2);
      break;
      }
    default:
      jj_la1[62] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    n3 = jj_consume_token(IDENTIFIER);
t = n3;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LT:{
      n5 = TypeParameters();
n4.addNode(n5);
      break;
      }
    default:
      jj_la1[63] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case EXTENDS:{
      n7 = ExtendsList(isInterface);
n6.addNode(n7);
      break;
      }
    default:
      jj_la1[64] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IMPLEMENTS:{
      n9 = ImplementsList(isInterface);
n8.addNode(n9);
      break;
      }
    default:
      jj_la1[65] = jj_gen;
      ;
    }
if (t.image.equals(parser_class_name) && class_nesting == 1 && processing_cu) {
      is_parser_class = true;
      setinsertionpoint(getToken(1), 1);
    }
    n10 = ClassOrInterfaceBody(isInterface, null);
if (is_parser_class)
      setinsertionpoint(getToken(0), 2);
    class_nesting--;
jtbNode = new ClassOrInterfaceDeclaration(n0, n3, n4, n6, n8, n10);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ExtendsList ExtendsList(boolean isInterface) throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  ClassOrInterfaceType n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  ClassOrInterfaceType n5 = null;
  ExtendsList jtbNode = null;
  // --- user BNFProduction java block ---
  boolean extendsMoreThanOne = false;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(EXTENDS);
    n1 = ClassOrInterfaceType();
    label_18:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[66] = jj_gen;
        break label_18;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(COMMA);
n3.addNode(n4);
      n5 = ClassOrInterfaceType();
n3.addNode(n5);
extendsMoreThanOne = true;
n2.addNode(n3);
    }
n2.nodes.trimToSize();
if (extendsMoreThanOne && !isInterface)
      {if (true) throw new ParseException("A class cannot extend more than one other class");}
jtbNode = new ExtendsList(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ImplementsList ImplementsList(boolean isInterface) throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  ClassOrInterfaceType n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  ClassOrInterfaceType n5 = null;
  ImplementsList jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IMPLEMENTS);
    n1 = ClassOrInterfaceType();
    label_19:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[67] = jj_gen;
        break label_19;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(COMMA);
n3.addNode(n4);
      n5 = ClassOrInterfaceType();
n3.addNode(n5);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
if (isInterface)
      {if (true) throw new ParseException("An interface cannot implement other interfaces");}
jtbNode = new ImplementsList(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public EnumDeclaration EnumDeclaration() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  NodeOptional n2 = new NodeOptional();
  ImplementsList n3 = null;
  EnumBody n4 = null;
  EnumDeclaration jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(ENUM);
    n1 = jj_consume_token(IDENTIFIER);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IMPLEMENTS:{
      n3 = ImplementsList(false);
n2.addNode(n3);
      break;
      }
    default:
      jj_la1[68] = jj_gen;
      ;
    }
    n4 = EnumBody();
jtbNode = new EnumDeclaration(n0, n1, n2, n4);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public EnumBody EnumBody() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  EnumConstant n3 = null;
  NodeListOptional n4 = null;
  NodeSequence n5 = null;
  Token n6 = null;
  EnumConstant n7 = null;
  NodeOptional n8 = new NodeOptional();
  Token n9 = null;
  NodeOptional n10 = new NodeOptional();
  NodeSequence n11 = null;
  Token n12 = null;
  NodeListOptional n13 = null;
  ClassOrInterfaceBodyDeclaration n14 = null;
  Token n15 = null;
  EnumBody jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LBRACE);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case ABSTRACT:
    case FINAL:
    case NATIVE:
    case PRIVATE:
    case PROTECTED:
    case PUBLIC:
    case STATIC:
    case STRICTFP:
    case SYNCHRONIZED:
    case TRANSIENT:
    case VOLATILE:
    case 145:
    case IDENTIFIER:{
n4 = new NodeListOptional();
n2 = new NodeSequence(2);
      n3 = EnumConstant();
n2.addNode(n3);
      label_20:
      while (true) {
        if (jj_2_7(2)) {
          ;
        } else {
          break label_20;
        }
n5 = new NodeSequence(2);
        n6 = jj_consume_token(COMMA);
n5.addNode(n6);
        n7 = EnumConstant();
n5.addNode(n7);
n4.addNode(n5);
      }
n4.nodes.trimToSize();
n2.addNode(n4);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[69] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case COMMA:{
      n9 = jj_consume_token(COMMA);
n8.addNode(n9);
      break;
      }
    default:
      jj_la1[70] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case SEMICOLON:{
n13 = new NodeListOptional();
n11 = new NodeSequence(2);
      n12 = jj_consume_token(SEMICOLON);
n11.addNode(n12);
      label_21:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case ABSTRACT:
        case BOOLEAN:
        case BYTE:
        case CHAR:
        case CLASS:
        case DOUBLE:
        case ENUM:
        case FINAL:
        case FLOAT:
        case INT:
        case INTERFACE:
        case LONG:
        case NATIVE:
        case PRIVATE:
        case PROTECTED:
        case PUBLIC:
        case SHORT:
        case STATIC:
        case STRICTFP:
        case SYNCHRONIZED:
        case TRANSIENT:
        case VOID:
        case VOLATILE:
        case LBRACE:
        case SEMICOLON:
        case LT:
        case 145:
        case IDENTIFIER:{
          ;
          break;
          }
        default:
          jj_la1[71] = jj_gen;
          break label_21;
        }
        n14 = ClassOrInterfaceBodyDeclaration(false);
n13.addNode(n14);
      }
n13.nodes.trimToSize();
n11.addNode(n13);
n10.addNode(n11);
      break;
      }
    default:
      jj_la1[72] = jj_gen;
      ;
    }
    n15 = jj_consume_token(RBRACE);
jtbNode = new EnumBody(n0, n1, n8, n10, n15);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public EnumConstant EnumConstant() throws ParseException {// --- JTB generated node declarations ---
  Modifiers n0 = null;
  Token n1 = null;
  NodeOptional n2 = new NodeOptional();
  Arguments n3 = null;
  NodeOptional n4 = new NodeOptional();
  ClassOrInterfaceBody n5 = null;
  EnumConstant jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = Modifiers();
    n1 = jj_consume_token(IDENTIFIER);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LPAREN:{
      n3 = Arguments(null);
n2.addNode(n3);
      break;
      }
    default:
      jj_la1[73] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LBRACE:{
      n5 = ClassOrInterfaceBody(false, null);
n4.addNode(n5);
      break;
      }
    default:
      jj_la1[74] = jj_gen;
      ;
    }
jtbNode = new EnumConstant(n0, n1, n2, n4);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TypeParameters TypeParameters() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  TypeParameter n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  TypeParameter n5 = null;
  Token n6 = null;
  TypeParameters jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LT);
    n1 = TypeParameter();
    label_22:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[75] = jj_gen;
        break label_22;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(COMMA);
n3.addNode(n4);
      n5 = TypeParameter();
n3.addNode(n5);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
    n6 = jj_consume_token(GT);
jtbNode = new TypeParameters(n0, n1, n2, n6);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TypeParameter TypeParameter() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  TypeBound n2 = null;
  TypeParameter jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IDENTIFIER);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case EXTENDS:{
      n2 = TypeBound();
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[76] = jj_gen;
      ;
    }
jtbNode = new TypeParameter(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TypeBound TypeBound() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  ClassOrInterfaceType n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  ClassOrInterfaceType n5 = null;
  TypeBound jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(EXTENDS);
    n1 = ClassOrInterfaceType();
    label_23:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BIT_AND:{
        ;
        break;
        }
      default:
        jj_la1[77] = jj_gen;
        break label_23;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(BIT_AND);
n3.addNode(n4);
      n5 = ClassOrInterfaceType();
n3.addNode(n5);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
jtbNode = new TypeBound(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ClassOrInterfaceBody ClassOrInterfaceBody(boolean isInterface, List<Token> tokens) throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  ClassOrInterfaceBodyDeclaration n2 = null;
  Token n3 = null;
  ClassOrInterfaceBody jtbNode = null;
  // --- user BNFProduction java block ---
  Token first = null;
  Token last = null;
  if (tokens == null)
    tokens = new ArrayList<Token>();
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LBRACE);
first = getToken(1);
    label_24:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ABSTRACT:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case CLASS:
      case DOUBLE:
      case ENUM:
      case FINAL:
      case FLOAT:
      case INT:
      case INTERFACE:
      case LONG:
      case NATIVE:
      case PRIVATE:
      case PROTECTED:
      case PUBLIC:
      case SHORT:
      case STATIC:
      case STRICTFP:
      case SYNCHRONIZED:
      case TRANSIENT:
      case VOID:
      case VOLATILE:
      case LBRACE:
      case SEMICOLON:
      case LT:
      case 145:
      case IDENTIFIER:{
        ;
        break;
        }
      default:
        jj_la1[78] = jj_gen;
        break label_24;
      }
      n2 = ClassOrInterfaceBodyDeclaration(isInterface);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
last = getToken(0);
    n3 = jj_consume_token(RBRACE);
if (last.next != first) {
      Token t = first;
      while (true) {
        tokens.add(t);
        if (t == last)
          break;
        t = t.next;
      }
    }
jtbNode = new ClassOrInterfaceBody(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ClassOrInterfaceBodyDeclaration ClassOrInterfaceBodyDeclaration(boolean isInterface) throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Initializer n1 = null;
  NodeSequence n2 = null;
  Modifiers n3 = null;
  NodeChoice n4 = null;
  ClassOrInterfaceDeclaration n5 = null;
  EnumDeclaration n6 = null;
  AnnotationTypeDeclaration n7 = null;
  ConstructorDeclaration n8 = null;
  FieldDeclaration n9 = null;
  MethodDeclaration n10 = null;
  Token n11 = null;
  ClassOrInterfaceBodyDeclaration jtbNode = null;
    if (jj_2_10(2)) {
      n1 = Initializer();
n0 = new NodeChoice(n1, 0, 3);
if (isInterface)
        {if (true) throw new ParseException("An interface cannot have initializers");}
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ABSTRACT:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case CLASS:
      case DOUBLE:
      case ENUM:
      case FINAL:
      case FLOAT:
      case INT:
      case INTERFACE:
      case LONG:
      case NATIVE:
      case PRIVATE:
      case PROTECTED:
      case PUBLIC:
      case SHORT:
      case STATIC:
      case STRICTFP:
      case SYNCHRONIZED:
      case TRANSIENT:
      case VOID:
      case VOLATILE:
      case LT:
      case 145:
      case IDENTIFIER:{
n2 = new NodeSequence(2);
        n3 = Modifiers();
n2.addNode(n3);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case CLASS:
        case INTERFACE:{
          n5 = ClassOrInterfaceDeclaration();
n4 = new NodeChoice(n5, 0, 6);
          break;
          }
        case ENUM:{
          n6 = EnumDeclaration();
n4 = new NodeChoice(n6, 1, 6);
          break;
          }
        case 145:{
          n7 = AnnotationTypeDeclaration();
n4 = new NodeChoice(n7, 2, 6);
          break;
          }
        default:
          jj_la1[79] = jj_gen;
          if (jj_2_8(2147483647)) {
            n8 = ConstructorDeclaration();
n4 = new NodeChoice(n8, 3, 6);
          } else if (jj_2_9(2147483647)) {
            n9 = FieldDeclaration();
n4 = new NodeChoice(n9, 4, 6);
          } else {
            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
            case BOOLEAN:
            case BYTE:
            case CHAR:
            case DOUBLE:
            case FLOAT:
            case INT:
            case LONG:
            case SHORT:
            case VOID:
            case LT:
            case IDENTIFIER:{
              n10 = MethodDeclaration();
n4 = new NodeChoice(n10, 5, 6);
              break;
              }
            default:
              jj_la1[80] = jj_gen;
              jj_consume_token(-1);
              throw new ParseException();
            }
          }
        }
n2.addNode(n4);
n0 = new NodeChoice(n2, 1, 3);
        break;
        }
      case SEMICOLON:{
        n11 = jj_consume_token(SEMICOLON);
n0 = new NodeChoice(n11, 2, 3);
        break;
        }
      default:
        jj_la1[81] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new ClassOrInterfaceBodyDeclaration(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public FieldDeclaration FieldDeclaration() throws ParseException {// --- JTB generated node declarations ---
  Type n0 = null;
  VariableDeclarator n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  VariableDeclarator n5 = null;
  Token n6 = null;
  FieldDeclaration jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = Type();
    n1 = VariableDeclarator();
    label_25:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[82] = jj_gen;
        break label_25;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(COMMA);
n3.addNode(n4);
      n5 = VariableDeclarator();
n3.addNode(n5);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
    n6 = jj_consume_token(SEMICOLON);
jtbNode = new FieldDeclaration(n0, n1, n2, n6);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public VariableDeclarator VariableDeclarator() throws ParseException {// --- JTB generated node declarations ---
  VariableDeclaratorId n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  VariableInitializer n4 = null;
  VariableDeclarator jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = VariableDeclaratorId();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case ASSIGN:{
n2 = new NodeSequence(2);
      n3 = jj_consume_token(ASSIGN);
n2.addNode(n3);
      n4 = VariableInitializer();
n2.addNode(n4);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[83] = jj_gen;
      ;
    }
jtbNode = new VariableDeclarator(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public VariableDeclaratorId VariableDeclaratorId() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  Token n4 = null;
  VariableDeclaratorId jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IDENTIFIER);
    label_26:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LBRACKET:{
        ;
        break;
        }
      default:
        jj_la1[84] = jj_gen;
        break label_26;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(LBRACKET);
n2.addNode(n3);
      n4 = jj_consume_token(RBRACKET);
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new VariableDeclaratorId(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public VariableInitializer VariableInitializer() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  ArrayInitializer n1 = null;
  Expression n2 = null;
  VariableInitializer jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LBRACE:{
      n1 = ArrayInitializer();
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case _LOOKAHEAD:
    case _IGNORE_CASE:
    case _PARSER_BEGIN:
    case _PARSER_END:
    case _JAVACODE:
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case _TOKEN_MGR_DECLS:
    case _EOF:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FALSE:
    case FLOAT:
    case INT:
    case LONG:
    case NEW:
    case NULL:
    case SHORT:
    case SUPER:
    case THIS:
    case TRUE:
    case VOID:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case LPAREN:
    case BANG:
    case TILDE:
    case INCR:
    case DECR:
    case PLUS:
    case MINUS:
    case IDENTIFIER:{
      n2 = Expression(null);
n0 = new NodeChoice(n2, 1, 2);
      break;
      }
    default:
      jj_la1[85] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new VariableInitializer(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ArrayInitializer ArrayInitializer() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  VariableInitializer n3 = null;
  NodeListOptional n4 = null;
  NodeSequence n5 = null;
  Token n6 = null;
  VariableInitializer n7 = null;
  NodeOptional n8 = new NodeOptional();
  Token n9 = null;
  Token n10 = null;
  ArrayInitializer jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LBRACE);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case _LOOKAHEAD:
    case _IGNORE_CASE:
    case _PARSER_BEGIN:
    case _PARSER_END:
    case _JAVACODE:
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case _TOKEN_MGR_DECLS:
    case _EOF:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FALSE:
    case FLOAT:
    case INT:
    case LONG:
    case NEW:
    case NULL:
    case SHORT:
    case SUPER:
    case THIS:
    case TRUE:
    case VOID:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case LPAREN:
    case LBRACE:
    case BANG:
    case TILDE:
    case INCR:
    case DECR:
    case PLUS:
    case MINUS:
    case IDENTIFIER:{
n4 = new NodeListOptional();
n2 = new NodeSequence(2);
      n3 = VariableInitializer();
n2.addNode(n3);
      label_27:
      while (true) {
        if (jj_2_11(2)) {
          ;
        } else {
          break label_27;
        }
n5 = new NodeSequence(2);
        n6 = jj_consume_token(COMMA);
n5.addNode(n6);
        n7 = VariableInitializer();
n5.addNode(n7);
n4.addNode(n5);
      }
n4.nodes.trimToSize();
n2.addNode(n4);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[86] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case COMMA:{
      n9 = jj_consume_token(COMMA);
n8.addNode(n9);
      break;
      }
    default:
      jj_la1[87] = jj_gen;
      ;
    }
    n10 = jj_consume_token(RBRACE);
jtbNode = new ArrayInitializer(n0, n1, n8, n10);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MethodDeclaration MethodDeclaration() throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  TypeParameters n1 = null;
  ResultType n2 = null;
  MethodDeclarator n3 = null;
  NodeOptional n4 = new NodeOptional();
  NodeSequence n5 = null;
  Token n6 = null;
  NameList n7 = null;
  NodeChoice n8 = null;
  Block n9 = null;
  Token n10 = null;
  MethodDeclaration jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LT:{
      n1 = TypeParameters();
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[88] = jj_gen;
      ;
    }
    n2 = ResultType(null);
    n3 = MethodDeclarator();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case THROWS:{
n5 = new NodeSequence(2);
      n6 = jj_consume_token(THROWS);
n5.addNode(n6);
      n7 = NameList();
n5.addNode(n7);
n4.addNode(n5);
      break;
      }
    default:
      jj_la1[89] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LBRACE:{
      n9 = Block(null);
n8 = new NodeChoice(n9, 0, 2);
      break;
      }
    case SEMICOLON:{
      n10 = jj_consume_token(SEMICOLON);
n8 = new NodeChoice(n10, 1, 2);
      break;
      }
    default:
      jj_la1[90] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new MethodDeclaration(n0, n2, n3, n4, n8);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MethodDeclarator MethodDeclarator() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  FormalParameters n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  Token n5 = null;
  MethodDeclarator jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IDENTIFIER);
    n1 = FormalParameters(null);
    label_28:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LBRACKET:{
        ;
        break;
        }
      default:
        jj_la1[91] = jj_gen;
        break label_28;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(LBRACKET);
n3.addNode(n4);
      n5 = jj_consume_token(RBRACKET);
n3.addNode(n5);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
jtbNode = new MethodDeclarator(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public FormalParameters FormalParameters(List<Token> tokens) throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  FormalParameter n3 = null;
  NodeListOptional n4 = null;
  NodeSequence n5 = null;
  Token n6 = null;
  FormalParameter n7 = null;
  Token n8 = null;
  FormalParameters jtbNode = null;
  // --- user BNFProduction java block ---
  Token first = null;
  Token last = null;
  if (tokens == null)
    tokens = new ArrayList<Token>();
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LPAREN);
first = getToken(1);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case ABSTRACT:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FINAL:
    case FLOAT:
    case INT:
    case LONG:
    case NATIVE:
    case PRIVATE:
    case PROTECTED:
    case PUBLIC:
    case SHORT:
    case STATIC:
    case STRICTFP:
    case SYNCHRONIZED:
    case TRANSIENT:
    case VOLATILE:
    case 145:
    case IDENTIFIER:{
n4 = new NodeListOptional();
n2 = new NodeSequence(2);
      n3 = FormalParameter();
n2.addNode(n3);
      label_29:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case COMMA:{
          ;
          break;
          }
        default:
          jj_la1[92] = jj_gen;
          break label_29;
        }
n5 = new NodeSequence(2);
        n6 = jj_consume_token(COMMA);
n5.addNode(n6);
        n7 = FormalParameter();
n5.addNode(n7);
n4.addNode(n5);
      }
n4.nodes.trimToSize();
n2.addNode(n4);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[93] = jj_gen;
      ;
    }
last = getToken(0);
    n8 = jj_consume_token(RPAREN);
if (last.next != first) {
      Token t = first;
      while (true) {
        tokens.add(t);
        if (t == last)
          break;
        t = t.next;
      }
    }
jtbNode = new FormalParameters(n0, n1, n8);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public FormalParameter FormalParameter() throws ParseException {// --- JTB generated node declarations ---
  Modifiers n0 = null;
  Type n1 = null;
  NodeOptional n2 = new NodeOptional();
  Token n3 = null;
  VariableDeclaratorId n4 = null;
  FormalParameter jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = Modifiers();
    n1 = Type();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case 140:{
      n3 = jj_consume_token(140);
n2.addNode(n3);
      break;
      }
    default:
      jj_la1[94] = jj_gen;
      ;
    }
    n4 = VariableDeclaratorId();
jtbNode = new FormalParameter(n0, n1, n2, n4);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ConstructorDeclaration ConstructorDeclaration() throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  TypeParameters n1 = null;
  Token n2 = null;
  FormalParameters n3 = null;
  NodeOptional n4 = new NodeOptional();
  NodeSequence n5 = null;
  Token n6 = null;
  NameList n7 = null;
  Token n8 = null;
  NodeOptional n9 = new NodeOptional();
  ExplicitConstructorInvocation n10 = null;
  NodeListOptional n11 = new NodeListOptional();
  BlockStatement n12 = null;
  Token n13 = null;
  ConstructorDeclaration jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case LT:{
      n1 = TypeParameters();
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[95] = jj_gen;
      ;
    }
    n2 = jj_consume_token(IDENTIFIER);
    n3 = FormalParameters(null);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case THROWS:{
n5 = new NodeSequence(2);
      n6 = jj_consume_token(THROWS);
n5.addNode(n6);
      n7 = NameList();
n5.addNode(n7);
n4.addNode(n5);
      break;
      }
    default:
      jj_la1[96] = jj_gen;
      ;
    }
    n8 = jj_consume_token(LBRACE);
    if (jj_2_12(2147483647)) {
      n10 = ExplicitConstructorInvocation();
n9.addNode(n10);
    } else {
      ;
    }
    label_30:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case ASSERT:
      case BOOLEAN:
      case BREAK:
      case BYTE:
      case CHAR:
      case CLASS:
      case CONTINUE:
      case DO:
      case DOUBLE:
      case FALSE:
      case FINAL:
      case FLOAT:
      case FOR:
      case IF:
      case INT:
      case INTERFACE:
      case LONG:
      case NEW:
      case NULL:
      case RETURN:
      case SHORT:
      case SUPER:
      case SWITCH:
      case SYNCHRONIZED:
      case THIS:
      case THROW:
      case TRUE:
      case TRY:
      case VOID:
      case WHILE:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case LBRACE:
      case SEMICOLON:
      case INCR:
      case DECR:
      case 145:
      case IDENTIFIER:{
        ;
        break;
        }
      default:
        jj_la1[97] = jj_gen;
        break label_30;
      }
      n12 = BlockStatement();
n11.addNode(n12);
    }
n11.nodes.trimToSize();
    n13 = jj_consume_token(RBRACE);
jtbNode = new ConstructorDeclaration(n0, n2, n3, n4, n8, n9, n11, n13);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ExplicitConstructorInvocation ExplicitConstructorInvocation() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  NodeOptional n2 = new NodeOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  ReferenceType n5 = null;
  NodeListOptional n6 = null;
  NodeSequence n7 = null;
  Token n8 = null;
  ReferenceType n9 = null;
  Token n10 = null;
  NodeChoice n11 = null;
  NodeSequence n12 = null;
  Token n13 = null;
  Arguments n14 = null;
  Token n15 = null;
  NodeSequence n16 = null;
  Token n17 = null;
  Arguments n18 = null;
  Token n19 = null;
  NodeSequence n20 = null;
  PrimaryExpression n21 = null;
  Token n22 = null;
  Token n23 = null;
  Arguments n24 = null;
  Token n25 = null;
  ExplicitConstructorInvocation jtbNode = null;
    if (jj_2_13(3)) {
n1 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LT:{
n6 = new NodeListOptional();
n3 = new NodeSequence(4);
        n4 = jj_consume_token(LT);
n3.addNode(n4);
        n5 = ReferenceType();
n3.addNode(n5);
        label_31:
        while (true) {
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case COMMA:{
            ;
            break;
            }
          default:
            jj_la1[98] = jj_gen;
            break label_31;
          }
n7 = new NodeSequence(2);
          n8 = jj_consume_token(COMMA);
n7.addNode(n8);
          n9 = ReferenceType();
n7.addNode(n9);
n6.addNode(n7);
        }
n6.nodes.trimToSize();
n3.addNode(n6);
        n10 = jj_consume_token(GT);
n3.addNode(n10);
n2.addNode(n3);
        break;
        }
      default:
        jj_la1[99] = jj_gen;
        ;
      }
n1.addNode(n2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case THIS:{
n12 = new NodeSequence(3);
        n13 = jj_consume_token(THIS);
n12.addNode(n13);
        n14 = Arguments(null);
n12.addNode(n14);
        n15 = jj_consume_token(SEMICOLON);
n12.addNode(n15);
n11 = new NodeChoice(n12, 0, 2);
        break;
        }
      case SUPER:{
n16 = new NodeSequence(3);
        n17 = jj_consume_token(SUPER);
n16.addNode(n17);
        n18 = Arguments(null);
n16.addNode(n18);
        n19 = jj_consume_token(SEMICOLON);
n16.addNode(n19);
n11 = new NodeChoice(n16, 1, 2);
        break;
        }
      default:
        jj_la1[100] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n1.addNode(n11);
n0 = new NodeChoice(n1, 0, 2);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case DOUBLE:
      case FALSE:
      case FLOAT:
      case INT:
      case LONG:
      case NEW:
      case NULL:
      case SHORT:
      case SUPER:
      case THIS:
      case TRUE:
      case VOID:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case IDENTIFIER:{
n20 = new NodeSequence(5);
        n21 = PrimaryExpression();
n20.addNode(n21);
        n22 = jj_consume_token(DOT);
n20.addNode(n22);
        n23 = jj_consume_token(SUPER);
n20.addNode(n23);
        n24 = Arguments(null);
n20.addNode(n24);
        n25 = jj_consume_token(SEMICOLON);
n20.addNode(n25);
n0 = new NodeChoice(n20, 1, 2);
        break;
        }
      default:
        jj_la1[101] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new ExplicitConstructorInvocation(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Initializer Initializer() throws ParseException {// --- JTB generated node declarations ---
  NodeOptional n0 = new NodeOptional();
  Token n1 = null;
  Block n2 = null;
  Initializer jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case STATIC:{
      n1 = jj_consume_token(STATIC);
n0.addNode(n1);
      break;
      }
    default:
      jj_la1[102] = jj_gen;
      ;
    }
    n2 = Block(null);
jtbNode = new Initializer(n0, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Type Type() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  ReferenceType n1 = null;
  PrimitiveType n2 = null;
  Type jtbNode = null;
    if (jj_2_14(2)) {
      n1 = ReferenceType();
n0 = new NodeChoice(n1, 0, 2);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case DOUBLE:
      case FLOAT:
      case INT:
      case LONG:
      case SHORT:{
        n2 = PrimitiveType();
n0 = new NodeChoice(n2, 1, 2);
        break;
        }
      default:
        jj_la1[103] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new Type(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ReferenceType ReferenceType() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  PrimitiveType n2 = null;
  NodeList n3 = new NodeList();
  NodeSequence n4 = null;
  Token n5 = null;
  Token n6 = null;
  NodeSequence n7 = null;
  ClassOrInterfaceType n8 = null;
  NodeListOptional n9 = new NodeListOptional();
  NodeSequence n10 = null;
  Token n11 = null;
  Token n12 = null;
  ReferenceType jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FLOAT:
    case INT:
    case LONG:
    case SHORT:{
n1 = new NodeSequence(2);
      n2 = PrimitiveType();
n1.addNode(n2);
      label_32:
      while (true) {
n4 = new NodeSequence(2);
        n5 = jj_consume_token(LBRACKET);
n4.addNode(n5);
        n6 = jj_consume_token(RBRACKET);
n4.addNode(n6);
n3.addNode(n4);
        if (jj_2_15(2)) {
          ;
        } else {
          break label_32;
        }
      }
n3.nodes.trimToSize();
n1.addNode(n3);
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case IDENTIFIER:{
n7 = new NodeSequence(2);
      n8 = ClassOrInterfaceType();
n7.addNode(n8);
      label_33:
      while (true) {
        if (jj_2_16(2)) {
          ;
        } else {
          break label_33;
        }
n10 = new NodeSequence(2);
        n11 = jj_consume_token(LBRACKET);
n10.addNode(n11);
        n12 = jj_consume_token(RBRACKET);
n10.addNode(n12);
n9.addNode(n10);
      }
n9.nodes.trimToSize();
n7.addNode(n9);
n0 = new NodeChoice(n7, 1, 2);
      break;
      }
    default:
      jj_la1[104] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new ReferenceType(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ClassOrInterfaceType ClassOrInterfaceType() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  TypeArguments n2 = null;
  NodeListOptional n3 = new NodeListOptional();
  NodeSequence n4 = null;
  Token n5 = null;
  Token n6 = null;
  NodeOptional n7 = null;
  TypeArguments n8 = null;
  ClassOrInterfaceType jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IDENTIFIER);
    if (jj_2_17(2)) {
      n2 = TypeArguments();
n1.addNode(n2);
    } else {
      ;
    }
    label_34:
    while (true) {
      if (jj_2_18(2)) {
        ;
      } else {
        break label_34;
      }
n7 = new NodeOptional();
n4 = new NodeSequence(3);
      n5 = jj_consume_token(DOT);
n4.addNode(n5);
      n6 = jj_consume_token(IDENTIFIER);
n4.addNode(n6);
      if (jj_2_19(2)) {
        n8 = TypeArguments();
n7.addNode(n8);
      } else {
        ;
      }
n4.addNode(n7);
n3.addNode(n4);
    }
n3.nodes.trimToSize();
jtbNode = new ClassOrInterfaceType(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TypeArguments TypeArguments() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  TypeArgument n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  TypeArgument n5 = null;
  Token n6 = null;
  TypeArguments jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LT);
    n1 = TypeArgument();
    label_35:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[105] = jj_gen;
        break label_35;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(COMMA);
n3.addNode(n4);
      n5 = TypeArgument();
n3.addNode(n5);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
    n6 = jj_consume_token(GT);
jtbNode = new TypeArguments(n0, n1, n2, n6);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public EmptyTypeArguments EmptyTypeArguments() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  EmptyTypeArguments jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LT);
    n1 = jj_consume_token(GT);
jtbNode = new EmptyTypeArguments(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TypeArgument TypeArgument() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  ReferenceType n1 = null;
  NodeSequence n2 = null;
  Token n3 = null;
  NodeOptional n4 = new NodeOptional();
  WildcardBounds n5 = null;
  TypeArgument jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FLOAT:
    case INT:
    case LONG:
    case SHORT:
    case IDENTIFIER:{
      n1 = ReferenceType();
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case HOOK:{
n2 = new NodeSequence(2);
      n3 = jj_consume_token(HOOK);
n2.addNode(n3);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case EXTENDS:
      case SUPER:{
        n5 = WildcardBounds();
n4.addNode(n5);
        break;
        }
      default:
        jj_la1[106] = jj_gen;
        ;
      }
n2.addNode(n4);
n0 = new NodeChoice(n2, 1, 2);
      break;
      }
    default:
      jj_la1[107] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new TypeArgument(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public WildcardBounds WildcardBounds() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Token n2 = null;
  ReferenceType n3 = null;
  NodeSequence n4 = null;
  Token n5 = null;
  ReferenceType n6 = null;
  WildcardBounds jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case EXTENDS:{
n1 = new NodeSequence(2);
      n2 = jj_consume_token(EXTENDS);
n1.addNode(n2);
      n3 = ReferenceType();
n1.addNode(n3);
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case SUPER:{
n4 = new NodeSequence(2);
      n5 = jj_consume_token(SUPER);
n4.addNode(n5);
      n6 = ReferenceType();
n4.addNode(n6);
n0 = new NodeChoice(n4, 1, 2);
      break;
      }
    default:
      jj_la1[108] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new WildcardBounds(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PrimitiveType PrimitiveType() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  Token n5 = null;
  Token n6 = null;
  Token n7 = null;
  Token n8 = null;
  PrimitiveType jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case BOOLEAN:{
      n1 = jj_consume_token(BOOLEAN);
n0 = new NodeChoice(n1, 0, 8);
      break;
      }
    case CHAR:{
      n2 = jj_consume_token(CHAR);
n0 = new NodeChoice(n2, 1, 8);
      break;
      }
    case BYTE:{
      n3 = jj_consume_token(BYTE);
n0 = new NodeChoice(n3, 2, 8);
      break;
      }
    case SHORT:{
      n4 = jj_consume_token(SHORT);
n0 = new NodeChoice(n4, 3, 8);
      break;
      }
    case INT:{
      n5 = jj_consume_token(INT);
n0 = new NodeChoice(n5, 4, 8);
      break;
      }
    case LONG:{
      n6 = jj_consume_token(LONG);
n0 = new NodeChoice(n6, 5, 8);
      break;
      }
    case FLOAT:{
      n7 = jj_consume_token(FLOAT);
n0 = new NodeChoice(n7, 6, 8);
      break;
      }
    case DOUBLE:{
      n8 = jj_consume_token(DOUBLE);
n0 = new NodeChoice(n8, 7, 8);
      break;
      }
    default:
      jj_la1[109] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new PrimitiveType(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ResultType ResultType(List<Token> tokens) throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Type n2 = null;
  ResultType jtbNode = null;
  // --- user BNFProduction java block ---
  Token first = getToken(1);
  if (tokens == null)
    tokens = new ArrayList<Token>();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case VOID:{
      n1 = jj_consume_token(VOID);
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FLOAT:
    case INT:
    case LONG:
    case SHORT:
    case IDENTIFIER:{
      n2 = Type();
n0 = new NodeChoice(n2, 1, 2);
      break;
      }
    default:
      jj_la1[110] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
Token last = getToken(0);
    Token t = first;
    while (true) {
      tokens.add(t);
      if (t == last)
        break;
      t = t.next;
    }
jtbNode = new ResultType(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Name Name(List<Token> tokens) throws ParseException {// --- JTB generated node declarations ---
  JavaIdentifier n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  JavaIdentifier n4 = null;
  Name jtbNode = null;
  // --- user BNFProduction java block ---
  if (tokens == null)
    tokens = new ArrayList<Token>();
  Token first = getToken(1);
  String name = "";
    // --- user BNFProduction ExpansionChoices ---
      n0 = JavaIdentifier();
    label_36:
    while (true) {
      if (jj_2_20(2)) {
        ;
      } else {
        break label_36;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(DOT);
n2.addNode(n3);
      n4 = JavaIdentifier();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new Name(n0, n1);
Token last = getToken(0);
    Token t = first;
    while (true) {
      tokens.add(t);
      name += t.image;
      if (t == last)
        break;
      t = t.next;
    }
    jtbrt_Name = name;
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public NameList NameList() throws ParseException {// --- JTB generated node declarations ---
  Name n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  Name n4 = null;
  NameList jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = Name(null);
    label_37:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[111] = jj_gen;
        break label_37;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(COMMA);
n2.addNode(n3);
      n4 = Name(null);
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new NameList(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Expression Expression(List<Token> tokens) throws ParseException {// --- JTB generated node declarations ---
  ConditionalExpression n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  AssignmentOperator n3 = null;
  Expression n4 = null;
  Expression jtbNode = null;
  // --- user BNFProduction java block ---
  Token first = getToken(1);
  if (tokens == null)
    tokens = new ArrayList<Token>();
    // --- user BNFProduction ExpansionChoices ---
      n0 = ConditionalExpression();
    if (jj_2_21(2)) {
n2 = new NodeSequence(2);
      n3 = AssignmentOperator();
n2.addNode(n3);
      n4 = Expression(null);
n2.addNode(n4);
n1.addNode(n2);
    } else {
      ;
    }
Token last = getToken(0);
    Token t = first;
    while (true) {
      tokens.add(t);
      if (t == last)
        break;
      t = t.next;
    }
jtbNode = new Expression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AssignmentOperator AssignmentOperator() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  Token n5 = null;
  Token n6 = null;
  Token n7 = null;
  Token n8 = null;
  Token n9 = null;
  Token n10 = null;
  Token n11 = null;
  Token n12 = null;
  AssignmentOperator jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case ASSIGN:{
      n1 = jj_consume_token(ASSIGN);
n0 = new NodeChoice(n1, 0, 12);
      break;
      }
    case STARASSIGN:{
      n2 = jj_consume_token(STARASSIGN);
n0 = new NodeChoice(n2, 1, 12);
      break;
      }
    case SLASHASSIGN:{
      n3 = jj_consume_token(SLASHASSIGN);
n0 = new NodeChoice(n3, 2, 12);
      break;
      }
    case REMASSIGN:{
      n4 = jj_consume_token(REMASSIGN);
n0 = new NodeChoice(n4, 3, 12);
      break;
      }
    case PLUSASSIGN:{
      n5 = jj_consume_token(PLUSASSIGN);
n0 = new NodeChoice(n5, 4, 12);
      break;
      }
    case MINUSASSIGN:{
      n6 = jj_consume_token(MINUSASSIGN);
n0 = new NodeChoice(n6, 5, 12);
      break;
      }
    case 141:{
      n7 = jj_consume_token(141);
n0 = new NodeChoice(n7, 6, 12);
      break;
      }
    case 142:{
      n8 = jj_consume_token(142);
n0 = new NodeChoice(n8, 7, 12);
      break;
      }
    case 143:{
      n9 = jj_consume_token(143);
n0 = new NodeChoice(n9, 8, 12);
      break;
      }
    case ANDASSIGN:{
      n10 = jj_consume_token(ANDASSIGN);
n0 = new NodeChoice(n10, 9, 12);
      break;
      }
    case XORASSIGN:{
      n11 = jj_consume_token(XORASSIGN);
n0 = new NodeChoice(n11, 10, 12);
      break;
      }
    case ORASSIGN:{
      n12 = jj_consume_token(ORASSIGN);
n0 = new NodeChoice(n12, 11, 12);
      break;
      }
    default:
      jj_la1[112] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new AssignmentOperator(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ConditionalExpression ConditionalExpression() throws ParseException {// --- JTB generated node declarations ---
  ConditionalOrExpression n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  Expression n4 = null;
  Token n5 = null;
  Expression n6 = null;
  ConditionalExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = ConditionalOrExpression();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case HOOK:{
n2 = new NodeSequence(4);
      n3 = jj_consume_token(HOOK);
n2.addNode(n3);
      n4 = Expression(null);
n2.addNode(n4);
      n5 = jj_consume_token(COLON);
n2.addNode(n5);
      n6 = Expression(null);
n2.addNode(n6);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[113] = jj_gen;
      ;
    }
jtbNode = new ConditionalExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ConditionalOrExpression ConditionalOrExpression() throws ParseException {// --- JTB generated node declarations ---
  ConditionalAndExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  ConditionalAndExpression n4 = null;
  ConditionalOrExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = ConditionalAndExpression();
    label_38:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case SC_OR:{
        ;
        break;
        }
      default:
        jj_la1[114] = jj_gen;
        break label_38;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(SC_OR);
n2.addNode(n3);
      n4 = ConditionalAndExpression();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new ConditionalOrExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ConditionalAndExpression ConditionalAndExpression() throws ParseException {// --- JTB generated node declarations ---
  InclusiveOrExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  InclusiveOrExpression n4 = null;
  ConditionalAndExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = InclusiveOrExpression();
    label_39:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case SC_AND:{
        ;
        break;
        }
      default:
        jj_la1[115] = jj_gen;
        break label_39;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(SC_AND);
n2.addNode(n3);
      n4 = InclusiveOrExpression();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new ConditionalAndExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public InclusiveOrExpression InclusiveOrExpression() throws ParseException {// --- JTB generated node declarations ---
  ExclusiveOrExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  ExclusiveOrExpression n4 = null;
  InclusiveOrExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = ExclusiveOrExpression();
    label_40:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BIT_OR:{
        ;
        break;
        }
      default:
        jj_la1[116] = jj_gen;
        break label_40;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(BIT_OR);
n2.addNode(n3);
      n4 = ExclusiveOrExpression();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new InclusiveOrExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ExclusiveOrExpression ExclusiveOrExpression() throws ParseException {// --- JTB generated node declarations ---
  AndExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  AndExpression n4 = null;
  ExclusiveOrExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = AndExpression();
    label_41:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case XOR:{
        ;
        break;
        }
      default:
        jj_la1[117] = jj_gen;
        break label_41;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(XOR);
n2.addNode(n3);
      n4 = AndExpression();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new ExclusiveOrExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AndExpression AndExpression() throws ParseException {// --- JTB generated node declarations ---
  EqualityExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  EqualityExpression n4 = null;
  AndExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = EqualityExpression();
    label_42:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case BIT_AND:{
        ;
        break;
        }
      default:
        jj_la1[118] = jj_gen;
        break label_42;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(BIT_AND);
n2.addNode(n3);
      n4 = EqualityExpression();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new AndExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public EqualityExpression EqualityExpression() throws ParseException {// --- JTB generated node declarations ---
  InstanceOfExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  NodeChoice n3 = null;
  Token n4 = null;
  Token n5 = null;
  InstanceOfExpression n6 = null;
  EqualityExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = InstanceOfExpression();
    label_43:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case EQ:
      case NE:{
        ;
        break;
        }
      default:
        jj_la1[119] = jj_gen;
        break label_43;
      }
n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case EQ:{
        n4 = jj_consume_token(EQ);
n3 = new NodeChoice(n4, 0, 2);
        break;
        }
      case NE:{
        n5 = jj_consume_token(NE);
n3 = new NodeChoice(n5, 1, 2);
        break;
        }
      default:
        jj_la1[120] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n2.addNode(n3);
      n6 = InstanceOfExpression();
n2.addNode(n6);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new EqualityExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public InstanceOfExpression InstanceOfExpression() throws ParseException {// --- JTB generated node declarations ---
  RelationalExpression n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  Type n4 = null;
  InstanceOfExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = RelationalExpression();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case INSTANCEOF:{
n2 = new NodeSequence(2);
      n3 = jj_consume_token(INSTANCEOF);
n2.addNode(n3);
      n4 = Type();
n2.addNode(n4);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[121] = jj_gen;
      ;
    }
jtbNode = new InstanceOfExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public RelationalExpression RelationalExpression() throws ParseException {// --- JTB generated node declarations ---
  ShiftExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  NodeChoice n3 = null;
  Token n4 = null;
  Token n5 = null;
  Token n6 = null;
  Token n7 = null;
  ShiftExpression n8 = null;
  RelationalExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = ShiftExpression();
    label_44:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LT:
      case LE:
      case GE:
      case GT:{
        ;
        break;
        }
      default:
        jj_la1[122] = jj_gen;
        break label_44;
      }
n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LT:{
        n4 = jj_consume_token(LT);
n3 = new NodeChoice(n4, 0, 4);
        break;
        }
      case GT:{
        n5 = jj_consume_token(GT);
n3 = new NodeChoice(n5, 1, 4);
        break;
        }
      case LE:{
        n6 = jj_consume_token(LE);
n3 = new NodeChoice(n6, 2, 4);
        break;
        }
      case GE:{
        n7 = jj_consume_token(GE);
n3 = new NodeChoice(n7, 3, 4);
        break;
        }
      default:
        jj_la1[123] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n2.addNode(n3);
      n8 = ShiftExpression();
n2.addNode(n8);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new RelationalExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ShiftExpression ShiftExpression() throws ParseException {// --- JTB generated node declarations ---
  AdditiveExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  NodeChoice n3 = null;
  Token n4 = null;
  RUnsignedShift n5 = null;
  RSignedShift n6 = null;
  AdditiveExpression n7 = null;
  ShiftExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = AdditiveExpression();
    label_45:
    while (true) {
      if (jj_2_22(1)) {
        ;
      } else {
        break label_45;
      }
n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 144:{
        n4 = jj_consume_token(144);
n3 = new NodeChoice(n4, 0, 3);
        break;
        }
      default:
        jj_la1[124] = jj_gen;
        if (jj_2_23(1)) {
          n5 = RUnsignedShift();
n3 = new NodeChoice(n5, 1, 3);
        } else if (jj_2_24(1)) {
          n6 = RSignedShift();
n3 = new NodeChoice(n6, 2, 3);
        } else {
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
n2.addNode(n3);
      n7 = AdditiveExpression();
n2.addNode(n7);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new ShiftExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public RSignedShift RSignedShift() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  RSignedShift jtbNode = null;
    if (getToken(1).kind == GT && getToken(2).kind == GT && (getToken(2).beginColumn == 1 + getToken(1).beginColumn)) {

    } else {
      jj_consume_token(-1);
      throw new ParseException();
    }
    n0 = jj_consume_token(GT);
    n1 = jj_consume_token(GT);
jtbNode = new RSignedShift(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public RUnsignedShift RUnsignedShift() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  Token n2 = null;
  RUnsignedShift jtbNode = null;
    if (getToken(1).kind == GT && getToken(2).kind == GT && getToken(3).kind == GT && (getToken(2).beginColumn == 1 + getToken(1).beginColumn) && (getToken(3).beginColumn == 1 + getToken(2).beginColumn)) {

    } else {
      jj_consume_token(-1);
      throw new ParseException();
    }
    n0 = jj_consume_token(GT);
    n1 = jj_consume_token(GT);
    n2 = jj_consume_token(GT);
jtbNode = new RUnsignedShift(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AdditiveExpression AdditiveExpression() throws ParseException {// --- JTB generated node declarations ---
  MultiplicativeExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  NodeChoice n3 = null;
  Token n4 = null;
  Token n5 = null;
  MultiplicativeExpression n6 = null;
  AdditiveExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = MultiplicativeExpression();
    label_46:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case PLUS:
      case MINUS:{
        ;
        break;
        }
      default:
        jj_la1[125] = jj_gen;
        break label_46;
      }
n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case PLUS:{
        n4 = jj_consume_token(PLUS);
n3 = new NodeChoice(n4, 0, 2);
        break;
        }
      case MINUS:{
        n5 = jj_consume_token(MINUS);
n3 = new NodeChoice(n5, 1, 2);
        break;
        }
      default:
        jj_la1[126] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n2.addNode(n3);
      n6 = MultiplicativeExpression();
n2.addNode(n6);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new AdditiveExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MultiplicativeExpression MultiplicativeExpression() throws ParseException {// --- JTB generated node declarations ---
  UnaryExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  NodeChoice n3 = null;
  Token n4 = null;
  Token n5 = null;
  Token n6 = null;
  UnaryExpression n7 = null;
  MultiplicativeExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = UnaryExpression();
    label_47:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case STAR:
      case SLASH:
      case REM:{
        ;
        break;
        }
      default:
        jj_la1[127] = jj_gen;
        break label_47;
      }
n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case STAR:{
        n4 = jj_consume_token(STAR);
n3 = new NodeChoice(n4, 0, 3);
        break;
        }
      case SLASH:{
        n5 = jj_consume_token(SLASH);
n3 = new NodeChoice(n5, 1, 3);
        break;
        }
      case REM:{
        n6 = jj_consume_token(REM);
n3 = new NodeChoice(n6, 2, 3);
        break;
        }
      default:
        jj_la1[128] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n2.addNode(n3);
      n7 = UnaryExpression();
n2.addNode(n7);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new MultiplicativeExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public UnaryExpression UnaryExpression() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  NodeChoice n2 = null;
  Token n3 = null;
  Token n4 = null;
  UnaryExpression n5 = null;
  PreIncrementExpression n6 = null;
  PreDecrementExpression n7 = null;
  UnaryExpressionNotPlusMinus n8 = null;
  UnaryExpression jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case PLUS:
    case MINUS:{
n1 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case PLUS:{
        n3 = jj_consume_token(PLUS);
n2 = new NodeChoice(n3, 0, 2);
        break;
        }
      case MINUS:{
        n4 = jj_consume_token(MINUS);
n2 = new NodeChoice(n4, 1, 2);
        break;
        }
      default:
        jj_la1[129] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n1.addNode(n2);
      n5 = UnaryExpression();
n1.addNode(n5);
n0 = new NodeChoice(n1, 0, 4);
      break;
      }
    case INCR:{
      n6 = PreIncrementExpression();
n0 = new NodeChoice(n6, 1, 4);
      break;
      }
    case DECR:{
      n7 = PreDecrementExpression();
n0 = new NodeChoice(n7, 2, 4);
      break;
      }
    case _LOOKAHEAD:
    case _IGNORE_CASE:
    case _PARSER_BEGIN:
    case _PARSER_END:
    case _JAVACODE:
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case _TOKEN_MGR_DECLS:
    case _EOF:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FALSE:
    case FLOAT:
    case INT:
    case LONG:
    case NEW:
    case NULL:
    case SHORT:
    case SUPER:
    case THIS:
    case TRUE:
    case VOID:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case LPAREN:
    case BANG:
    case TILDE:
    case IDENTIFIER:{
      n8 = UnaryExpressionNotPlusMinus();
n0 = new NodeChoice(n8, 3, 4);
      break;
      }
    default:
      jj_la1[130] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new UnaryExpression(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PreIncrementExpression PreIncrementExpression() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  PrimaryExpression n1 = null;
  PreIncrementExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(INCR);
    n1 = PrimaryExpression();
jtbNode = new PreIncrementExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PreDecrementExpression PreDecrementExpression() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  PrimaryExpression n1 = null;
  PreDecrementExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(DECR);
    n1 = PrimaryExpression();
jtbNode = new PreDecrementExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public UnaryExpressionNotPlusMinus UnaryExpressionNotPlusMinus() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  NodeChoice n2 = null;
  Token n3 = null;
  Token n4 = null;
  UnaryExpression n5 = null;
  CastExpression n6 = null;
  PostfixExpression n7 = null;
  UnaryExpressionNotPlusMinus jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case BANG:
    case TILDE:{
n1 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case TILDE:{
        n3 = jj_consume_token(TILDE);
n2 = new NodeChoice(n3, 0, 2);
        break;
        }
      case BANG:{
        n4 = jj_consume_token(BANG);
n2 = new NodeChoice(n4, 1, 2);
        break;
        }
      default:
        jj_la1[131] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n1.addNode(n2);
      n5 = UnaryExpression();
n1.addNode(n5);
n0 = new NodeChoice(n1, 0, 3);
      break;
      }
    default:
      jj_la1[132] = jj_gen;
      if (jj_2_25(2147483647)) {
        n6 = CastExpression();
n0 = new NodeChoice(n6, 1, 3);
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _LOOKAHEAD:
        case _IGNORE_CASE:
        case _PARSER_BEGIN:
        case _PARSER_END:
        case _JAVACODE:
        case _TOKEN:
        case _SPECIAL_TOKEN:
        case _MORE:
        case _SKIP:
        case _TOKEN_MGR_DECLS:
        case _EOF:
        case BOOLEAN:
        case BYTE:
        case CHAR:
        case DOUBLE:
        case FALSE:
        case FLOAT:
        case INT:
        case LONG:
        case NEW:
        case NULL:
        case SHORT:
        case SUPER:
        case THIS:
        case TRUE:
        case VOID:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case LPAREN:
        case IDENTIFIER:{
          n7 = PostfixExpression();
n0 = new NodeChoice(n7, 2, 3);
          break;
          }
        default:
          jj_la1[133] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
jtbNode = new UnaryExpressionNotPlusMinus(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public CastLookahead CastLookahead() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Token n2 = null;
  PrimitiveType n3 = null;
  NodeSequence n4 = null;
  Token n5 = null;
  Type n6 = null;
  Token n7 = null;
  Token n8 = null;
  NodeSequence n9 = null;
  Token n10 = null;
  Type n11 = null;
  Token n12 = null;
  NodeChoice n13 = null;
  Token n14 = null;
  Token n15 = null;
  Token n16 = null;
  Token n17 = null;
  Token n18 = null;
  Token n19 = null;
  Token n20 = null;
  Literal n21 = null;
  CastLookahead jtbNode = null;
    if (jj_2_26(2)) {
n1 = new NodeSequence(2);
      n2 = jj_consume_token(LPAREN);
n1.addNode(n2);
      n3 = PrimitiveType();
n1.addNode(n3);
n0 = new NodeChoice(n1, 0, 3);
    } else if (jj_2_27(2147483647)) {
n4 = new NodeSequence(4);
      n5 = jj_consume_token(LPAREN);
n4.addNode(n5);
      n6 = Type();
n4.addNode(n6);
      n7 = jj_consume_token(LBRACKET);
n4.addNode(n7);
      n8 = jj_consume_token(RBRACKET);
n4.addNode(n8);
n0 = new NodeChoice(n4, 1, 3);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LPAREN:{
n9 = new NodeSequence(4);
        n10 = jj_consume_token(LPAREN);
n9.addNode(n10);
        n11 = Type();
n9.addNode(n11);
        n12 = jj_consume_token(RPAREN);
n9.addNode(n12);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case TILDE:{
          n14 = jj_consume_token(TILDE);
n13 = new NodeChoice(n14, 0, 8);
          break;
          }
        case BANG:{
          n15 = jj_consume_token(BANG);
n13 = new NodeChoice(n15, 1, 8);
          break;
          }
        case LPAREN:{
          n16 = jj_consume_token(LPAREN);
n13 = new NodeChoice(n16, 2, 8);
          break;
          }
        case IDENTIFIER:{
          n17 = jj_consume_token(IDENTIFIER);
n13 = new NodeChoice(n17, 3, 8);
          break;
          }
        case THIS:{
          n18 = jj_consume_token(THIS);
n13 = new NodeChoice(n18, 4, 8);
          break;
          }
        case SUPER:{
          n19 = jj_consume_token(SUPER);
n13 = new NodeChoice(n19, 5, 8);
          break;
          }
        case NEW:{
          n20 = jj_consume_token(NEW);
n13 = new NodeChoice(n20, 6, 8);
          break;
          }
        case FALSE:
        case NULL:
        case TRUE:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:{
          n21 = Literal();
n13 = new NodeChoice(n21, 7, 8);
          break;
          }
        default:
          jj_la1[134] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
n9.addNode(n13);
n0 = new NodeChoice(n9, 2, 3);
        break;
        }
      default:
        jj_la1[135] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new CastLookahead(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PostfixExpression PostfixExpression() throws ParseException {// --- JTB generated node declarations ---
  PrimaryExpression n0 = null;
  NodeOptional n1 = new NodeOptional();
  NodeChoice n2 = null;
  Token n3 = null;
  Token n4 = null;
  PostfixExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = PrimaryExpression();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case INCR:
    case DECR:{
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case INCR:{
        n3 = jj_consume_token(INCR);
n2 = new NodeChoice(n3, 0, 2);
        break;
        }
      case DECR:{
        n4 = jj_consume_token(DECR);
n2 = new NodeChoice(n4, 1, 2);
        break;
        }
      default:
        jj_la1[136] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[137] = jj_gen;
      ;
    }
jtbNode = new PostfixExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public CastExpression CastExpression() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Token n2 = null;
  Type n3 = null;
  Token n4 = null;
  UnaryExpression n5 = null;
  NodeSequence n6 = null;
  Token n7 = null;
  Type n8 = null;
  Token n9 = null;
  UnaryExpressionNotPlusMinus n10 = null;
  CastExpression jtbNode = null;
    if (jj_2_28(2147483647)) {
n1 = new NodeSequence(4);
      n2 = jj_consume_token(LPAREN);
n1.addNode(n2);
      n3 = Type();
n1.addNode(n3);
      n4 = jj_consume_token(RPAREN);
n1.addNode(n4);
      n5 = UnaryExpression();
n1.addNode(n5);
n0 = new NodeChoice(n1, 0, 2);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LPAREN:{
n6 = new NodeSequence(4);
        n7 = jj_consume_token(LPAREN);
n6.addNode(n7);
        n8 = Type();
n6.addNode(n8);
        n9 = jj_consume_token(RPAREN);
n6.addNode(n9);
        n10 = UnaryExpressionNotPlusMinus();
n6.addNode(n10);
n0 = new NodeChoice(n6, 1, 2);
        break;
        }
      default:
        jj_la1[138] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new CastExpression(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PrimaryExpression PrimaryExpression() throws ParseException {// --- JTB generated node declarations ---
  PrimaryPrefix n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  PrimarySuffix n2 = null;
  PrimaryExpression jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = PrimaryPrefix();
    label_48:
    while (true) {
      if (jj_2_29(2)) {
        ;
      } else {
        break label_48;
      }
      n2 = PrimarySuffix();
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new PrimaryExpression(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MemberSelector MemberSelector() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  TypeArguments n1 = null;
  Token n2 = null;
  MemberSelector jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(DOT);
    n1 = TypeArguments();
    n2 = jj_consume_token(IDENTIFIER);
jtbNode = new MemberSelector(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PrimaryPrefix PrimaryPrefix() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Literal n1 = null;
  Token n2 = null;
  NodeSequence n3 = null;
  Token n4 = null;
  Token n5 = null;
  Token n6 = null;
  NodeSequence n7 = null;
  Token n8 = null;
  Expression n9 = null;
  Token n10 = null;
  AllocationExpression n11 = null;
  NodeSequence n12 = null;
  ResultType n13 = null;
  Token n14 = null;
  Token n15 = null;
  Name n16 = null;
  PrimaryPrefix jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case FALSE:
    case NULL:
    case TRUE:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:{
      n1 = Literal();
n0 = new NodeChoice(n1, 0, 7);
      break;
      }
    case THIS:{
      n2 = jj_consume_token(THIS);
n0 = new NodeChoice(n2, 1, 7);
      break;
      }
    case SUPER:{
n3 = new NodeSequence(3);
      n4 = jj_consume_token(SUPER);
n3.addNode(n4);
      n5 = jj_consume_token(DOT);
n3.addNode(n5);
      n6 = jj_consume_token(IDENTIFIER);
n3.addNode(n6);
n0 = new NodeChoice(n3, 2, 7);
      break;
      }
    case LPAREN:{
n7 = new NodeSequence(3);
      n8 = jj_consume_token(LPAREN);
n7.addNode(n8);
      n9 = Expression(null);
n7.addNode(n9);
      n10 = jj_consume_token(RPAREN);
n7.addNode(n10);
n0 = new NodeChoice(n7, 3, 7);
      break;
      }
    case NEW:{
      n11 = AllocationExpression();
n0 = new NodeChoice(n11, 4, 7);
      break;
      }
    default:
      jj_la1[139] = jj_gen;
      if (jj_2_30(2147483647)) {
n12 = new NodeSequence(3);
        n13 = ResultType(null);
n12.addNode(n13);
        n14 = jj_consume_token(DOT);
n12.addNode(n14);
        n15 = jj_consume_token(CLASS);
n12.addNode(n15);
n0 = new NodeChoice(n12, 5, 7);
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _LOOKAHEAD:
        case _IGNORE_CASE:
        case _PARSER_BEGIN:
        case _PARSER_END:
        case _JAVACODE:
        case _TOKEN:
        case _SPECIAL_TOKEN:
        case _MORE:
        case _SKIP:
        case _TOKEN_MGR_DECLS:
        case _EOF:
        case IDENTIFIER:{
          n16 = Name(null);
n0 = new NodeChoice(n16, 6, 7);
          break;
          }
        default:
          jj_la1[140] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
jtbNode = new PrimaryPrefix(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public PrimarySuffix PrimarySuffix() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Token n2 = null;
  Token n3 = null;
  NodeSequence n4 = null;
  Token n5 = null;
  AllocationExpression n6 = null;
  MemberSelector n7 = null;
  NodeSequence n8 = null;
  Token n9 = null;
  Expression n10 = null;
  Token n11 = null;
  NodeSequence n12 = null;
  Token n13 = null;
  Token n14 = null;
  Arguments n15 = null;
  PrimarySuffix jtbNode = null;
    if (jj_2_31(2)) {
n1 = new NodeSequence(2);
      n2 = jj_consume_token(DOT);
n1.addNode(n2);
      n3 = jj_consume_token(THIS);
n1.addNode(n3);
n0 = new NodeChoice(n1, 0, 6);
    } else if (jj_2_32(2)) {
n4 = new NodeSequence(2);
      n5 = jj_consume_token(DOT);
n4.addNode(n5);
      n6 = AllocationExpression();
n4.addNode(n6);
n0 = new NodeChoice(n4, 1, 6);
    } else if (jj_2_33(3)) {
      n7 = MemberSelector();
n0 = new NodeChoice(n7, 2, 6);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LBRACKET:{
n8 = new NodeSequence(3);
        n9 = jj_consume_token(LBRACKET);
n8.addNode(n9);
        n10 = Expression(null);
n8.addNode(n10);
        n11 = jj_consume_token(RBRACKET);
n8.addNode(n11);
n0 = new NodeChoice(n8, 3, 6);
        break;
        }
      case DOT:{
n12 = new NodeSequence(2);
        n13 = jj_consume_token(DOT);
n12.addNode(n13);
        n14 = jj_consume_token(IDENTIFIER);
n12.addNode(n14);
n0 = new NodeChoice(n12, 4, 6);
        break;
        }
      case LPAREN:{
        n15 = Arguments(null);
n0 = new NodeChoice(n15, 5, 6);
        break;
        }
      default:
        jj_la1[141] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new PrimarySuffix(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Literal Literal() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  Token n3 = null;
  Token n4 = null;
  BooleanLiteral n5 = null;
  NullLiteral n6 = null;
  Literal jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case INTEGER_LITERAL:{
      n1 = jj_consume_token(INTEGER_LITERAL);
n0 = new NodeChoice(n1, 0, 6);
      break;
      }
    case FLOATING_POINT_LITERAL:{
      n2 = jj_consume_token(FLOATING_POINT_LITERAL);
n0 = new NodeChoice(n2, 1, 6);
      break;
      }
    case CHARACTER_LITERAL:{
      n3 = jj_consume_token(CHARACTER_LITERAL);
n0 = new NodeChoice(n3, 2, 6);
      break;
      }
    case STRING_LITERAL:{
      n4 = jj_consume_token(STRING_LITERAL);
n0 = new NodeChoice(n4, 3, 6);
      break;
      }
    case FALSE:
    case TRUE:{
      n5 = BooleanLiteral();
n0 = new NodeChoice(n5, 4, 6);
      break;
      }
    case NULL:{
      n6 = NullLiteral();
n0 = new NodeChoice(n6, 5, 6);
      break;
      }
    default:
      jj_la1[142] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new Literal(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public IntegerLiteral IntegerLiteral() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  IntegerLiteral jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(INTEGER_LITERAL);
try {
      jtbrt_IntegerLiteral = Integer.parseInt(token.image);
    }
    catch (NumberFormatException e) {
      {if (true) throw new Error();}
    }
jtbNode = new IntegerLiteral(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public BooleanLiteral BooleanLiteral() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Token n1 = null;
  Token n2 = null;
  BooleanLiteral jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case TRUE:{
      n1 = jj_consume_token(TRUE);
n0 = new NodeChoice(n1, 0, 2);
jtbrt_BooleanLiteral = true;
      break;
      }
    case FALSE:{
      n2 = jj_consume_token(FALSE);
n0 = new NodeChoice(n2, 1, 2);
jtbrt_BooleanLiteral = false;
      break;
      }
    default:
      jj_la1[143] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new BooleanLiteral(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public StringLiteral StringLiteral() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  StringLiteral jtbNode = null;
  // --- user BNFProduction java block ---
  Token t = null;
  ;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(STRING_LITERAL);
t = n0;
jtbNode = new StringLiteral(n0);
jtbrt_StringLiteral = remove_escapes_and_quotes(t, t.image);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public NullLiteral NullLiteral() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NullLiteral jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(NULL);
jtbNode = new NullLiteral(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Arguments Arguments(List<Token> tokens) throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  ArgumentList n2 = null;
  Token n3 = null;
  Arguments jtbNode = null;
  // --- user BNFProduction java block ---
  Token first = null;
  Token last = null;
  if (tokens == null)
    tokens = new ArrayList<Token>();
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LPAREN);
first = getToken(1);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case _LOOKAHEAD:
    case _IGNORE_CASE:
    case _PARSER_BEGIN:
    case _PARSER_END:
    case _JAVACODE:
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case _TOKEN_MGR_DECLS:
    case _EOF:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FALSE:
    case FLOAT:
    case INT:
    case LONG:
    case NEW:
    case NULL:
    case SHORT:
    case SUPER:
    case THIS:
    case TRUE:
    case VOID:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case LPAREN:
    case BANG:
    case TILDE:
    case INCR:
    case DECR:
    case PLUS:
    case MINUS:
    case IDENTIFIER:{
      n2 = ArgumentList();
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[144] = jj_gen;
      ;
    }
last = getToken(0);
    n3 = jj_consume_token(RPAREN);
if (last.next != first) {
      Token t = first;
      while (true) {
        tokens.add(t);
        if (t == last)
          break;
        t = t.next;
      }
    }
jtbNode = new Arguments(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ArgumentList ArgumentList() throws ParseException {// --- JTB generated node declarations ---
  Expression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  Expression n4 = null;
  ArgumentList jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = Expression(null);
    label_49:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[145] = jj_gen;
        break label_49;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(COMMA);
n2.addNode(n3);
      n4 = Expression(null);
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new ArgumentList(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AllocationExpression AllocationExpression() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Token n2 = null;
  PrimitiveType n3 = null;
  ArrayDimsAndInits n4 = null;
  NodeSequence n5 = null;
  Token n6 = null;
  ClassOrInterfaceType n7 = null;
  NodeOptional n8 = new NodeOptional();
  NodeChoice n9 = null;
  EmptyTypeArguments n10 = null;
  TypeArguments n11 = null;
  NodeChoice n12 = null;
  ArrayDimsAndInits n13 = null;
  NodeSequence n14 = null;
  Arguments n15 = null;
  NodeOptional n16 = new NodeOptional();
  ClassOrInterfaceBody n17 = null;
  AllocationExpression jtbNode = null;
    if (jj_2_35(2)) {
n1 = new NodeSequence(3);
      n2 = jj_consume_token(NEW);
n1.addNode(n2);
      n3 = PrimitiveType();
n1.addNode(n3);
      n4 = ArrayDimsAndInits();
n1.addNode(n4);
n0 = new NodeChoice(n1, 0, 2);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case NEW:{
n5 = new NodeSequence(4);
        n6 = jj_consume_token(NEW);
n5.addNode(n6);
        n7 = ClassOrInterfaceType();
n5.addNode(n7);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case LT:{
          if (jj_2_34(2)) {
            n10 = EmptyTypeArguments();
n9 = new NodeChoice(n10, 0, 2);
          } else {
            switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
            case LT:{
              n11 = TypeArguments();
n9 = new NodeChoice(n11, 1, 2);
              break;
              }
            default:
              jj_la1[146] = jj_gen;
              jj_consume_token(-1);
              throw new ParseException();
            }
          }
n8.addNode(n9);
          break;
          }
        default:
          jj_la1[147] = jj_gen;
          ;
        }
n5.addNode(n8);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case LBRACKET:{
          n13 = ArrayDimsAndInits();
n12 = new NodeChoice(n13, 0, 2);
          break;
          }
        case LPAREN:{
n14 = new NodeSequence(2);
          n15 = Arguments(null);
n14.addNode(n15);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case LBRACE:{
            n17 = ClassOrInterfaceBody(false, null);
n16.addNode(n17);
            break;
            }
          default:
            jj_la1[148] = jj_gen;
            ;
          }
n14.addNode(n16);
n12 = new NodeChoice(n14, 1, 2);
          break;
          }
        default:
          jj_la1[149] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
n5.addNode(n12);
n0 = new NodeChoice(n5, 1, 2);
        break;
        }
      default:
        jj_la1[150] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new AllocationExpression(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ArrayDimsAndInits ArrayDimsAndInits() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  NodeList n2 = new NodeList();
  NodeSequence n3 = null;
  Token n4 = null;
  Expression n5 = null;
  Token n6 = null;
  NodeListOptional n7 = new NodeListOptional();
  NodeSequence n8 = null;
  Token n9 = null;
  Token n10 = null;
  NodeSequence n11 = null;
  NodeList n12 = new NodeList();
  NodeSequence n13 = null;
  Token n14 = null;
  Token n15 = null;
  ArrayInitializer n16 = null;
  ArrayDimsAndInits jtbNode = null;
    if (jj_2_38(2)) {
n1 = new NodeSequence(2);
      label_50:
      while (true) {
n3 = new NodeSequence(3);
        n4 = jj_consume_token(LBRACKET);
n3.addNode(n4);
        n5 = Expression(null);
n3.addNode(n5);
        n6 = jj_consume_token(RBRACKET);
n3.addNode(n6);
n2.addNode(n3);
        if (jj_2_36(2)) {
          ;
        } else {
          break label_50;
        }
      }
n2.nodes.trimToSize();
n1.addNode(n2);
      label_51:
      while (true) {
        if (jj_2_37(2)) {
          ;
        } else {
          break label_51;
        }
n8 = new NodeSequence(2);
        n9 = jj_consume_token(LBRACKET);
n8.addNode(n9);
        n10 = jj_consume_token(RBRACKET);
n8.addNode(n10);
n7.addNode(n8);
      }
n7.nodes.trimToSize();
n1.addNode(n7);
n0 = new NodeChoice(n1, 0, 2);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case LBRACKET:{
n11 = new NodeSequence(2);
        label_52:
        while (true) {
n13 = new NodeSequence(2);
          n14 = jj_consume_token(LBRACKET);
n13.addNode(n14);
          n15 = jj_consume_token(RBRACKET);
n13.addNode(n15);
n12.addNode(n13);
          switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
          case LBRACKET:{
            ;
            break;
            }
          default:
            jj_la1[151] = jj_gen;
            break label_52;
          }
        }
n12.nodes.trimToSize();
n11.addNode(n12);
        n16 = ArrayInitializer();
n11.addNode(n16);
n0 = new NodeChoice(n11, 1, 2);
        break;
        }
      default:
        jj_la1[152] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new ArrayDimsAndInits(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Statement Statement() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  LabeledStatement n1 = null;
  AssertStatement n2 = null;
  Block n3 = null;
  EmptyStatement n4 = null;
  NodeSequence n5 = null;
  StatementExpression n6 = null;
  Token n7 = null;
  SwitchStatement n8 = null;
  IfStatement n9 = null;
  WhileStatement n10 = null;
  DoStatement n11 = null;
  ForStatement n12 = null;
  BreakStatement n13 = null;
  ContinueStatement n14 = null;
  ReturnStatement n15 = null;
  ThrowStatement n16 = null;
  SynchronizedStatement n17 = null;
  TryStatement n18 = null;
  Statement jtbNode = null;
    if (jj_2_39(2)) {
      n1 = LabeledStatement();
n0 = new NodeChoice(n1, 0, 16);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ASSERT:{
        n2 = AssertStatement();
n0 = new NodeChoice(n2, 1, 16);
        break;
        }
      case LBRACE:{
        n3 = Block(null);
n0 = new NodeChoice(n3, 2, 16);
        break;
        }
      case SEMICOLON:{
        n4 = EmptyStatement();
n0 = new NodeChoice(n4, 3, 16);
        break;
        }
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case DOUBLE:
      case FALSE:
      case FLOAT:
      case INT:
      case LONG:
      case NEW:
      case NULL:
      case SHORT:
      case SUPER:
      case THIS:
      case TRUE:
      case VOID:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case INCR:
      case DECR:
      case IDENTIFIER:{
n5 = new NodeSequence(2);
        n6 = StatementExpression();
n5.addNode(n6);
        n7 = jj_consume_token(SEMICOLON);
n5.addNode(n7);
n0 = new NodeChoice(n5, 4, 16);
        break;
        }
      case SWITCH:{
        n8 = SwitchStatement();
n0 = new NodeChoice(n8, 5, 16);
        break;
        }
      case IF:{
        n9 = IfStatement();
n0 = new NodeChoice(n9, 6, 16);
        break;
        }
      case WHILE:{
        n10 = WhileStatement();
n0 = new NodeChoice(n10, 7, 16);
        break;
        }
      case DO:{
        n11 = DoStatement();
n0 = new NodeChoice(n11, 8, 16);
        break;
        }
      case FOR:{
        n12 = ForStatement();
n0 = new NodeChoice(n12, 9, 16);
        break;
        }
      case BREAK:{
        n13 = BreakStatement();
n0 = new NodeChoice(n13, 10, 16);
        break;
        }
      case CONTINUE:{
        n14 = ContinueStatement();
n0 = new NodeChoice(n14, 11, 16);
        break;
        }
      case RETURN:{
        n15 = ReturnStatement();
n0 = new NodeChoice(n15, 12, 16);
        break;
        }
      case THROW:{
        n16 = ThrowStatement();
n0 = new NodeChoice(n16, 13, 16);
        break;
        }
      case SYNCHRONIZED:{
        n17 = SynchronizedStatement();
n0 = new NodeChoice(n17, 14, 16);
        break;
        }
      case TRY:{
        n18 = TryStatement();
n0 = new NodeChoice(n18, 15, 16);
        break;
        }
      default:
        jj_la1[153] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new Statement(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AssertStatement AssertStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Expression n1 = null;
  NodeOptional n2 = new NodeOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  Expression n5 = null;
  Token n6 = null;
  AssertStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(ASSERT);
    n1 = Expression(null);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case COLON:{
n3 = new NodeSequence(2);
      n4 = jj_consume_token(COLON);
n3.addNode(n4);
      n5 = Expression(null);
n3.addNode(n5);
n2.addNode(n3);
      break;
      }
    default:
      jj_la1[154] = jj_gen;
      ;
    }
    n6 = jj_consume_token(SEMICOLON);
jtbNode = new AssertStatement(n0, n1, n2, n6);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public LabeledStatement LabeledStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  Statement n2 = null;
  LabeledStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IDENTIFIER);
    n1 = jj_consume_token(COLON);
    n2 = Statement();
jtbNode = new LabeledStatement(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Block Block(List<Token> tokens) throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  BlockStatement n2 = null;
  Token n3 = null;
  Block jtbNode = null;
  // --- user BNFProduction java block ---
  Token first = null;
  Token last = null;
  if (tokens == null)
    tokens = new ArrayList<Token>();
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LBRACE);
first = getToken(1);
    label_53:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case ASSERT:
      case BOOLEAN:
      case BREAK:
      case BYTE:
      case CHAR:
      case CLASS:
      case CONTINUE:
      case DO:
      case DOUBLE:
      case FALSE:
      case FINAL:
      case FLOAT:
      case FOR:
      case IF:
      case INT:
      case INTERFACE:
      case LONG:
      case NEW:
      case NULL:
      case RETURN:
      case SHORT:
      case SUPER:
      case SWITCH:
      case SYNCHRONIZED:
      case THIS:
      case THROW:
      case TRUE:
      case TRY:
      case VOID:
      case WHILE:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case LBRACE:
      case SEMICOLON:
      case INCR:
      case DECR:
      case 145:
      case IDENTIFIER:{
        ;
        break;
        }
      default:
        jj_la1[155] = jj_gen;
        break label_53;
      }
      n2 = BlockStatement();
n1.addNode(n2);
    }
n1.nodes.trimToSize();
last = getToken(0);
    n3 = jj_consume_token(RBRACE);
if (last.next != first) {
      Token t = first;
      while (true) {
        tokens.add(t);
        if (t == last)
          break;
        t = t.next;
      }
    }
jtbNode = new Block(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public BlockStatement BlockStatement() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  LocalVariableDeclaration n2 = null;
  Token n3 = null;
  Statement n4 = null;
  ClassOrInterfaceDeclaration n5 = null;
  BlockStatement jtbNode = null;
    if (jj_2_40(2147483647)) {
n1 = new NodeSequence(2);
      n2 = LocalVariableDeclaration();
n1.addNode(n2);
      n3 = jj_consume_token(SEMICOLON);
n1.addNode(n3);
n0 = new NodeChoice(n1, 0, 3);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case ASSERT:
      case BOOLEAN:
      case BREAK:
      case BYTE:
      case CHAR:
      case CONTINUE:
      case DO:
      case DOUBLE:
      case FALSE:
      case FLOAT:
      case FOR:
      case IF:
      case INT:
      case LONG:
      case NEW:
      case NULL:
      case RETURN:
      case SHORT:
      case SUPER:
      case SWITCH:
      case SYNCHRONIZED:
      case THIS:
      case THROW:
      case TRUE:
      case TRY:
      case VOID:
      case WHILE:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case LBRACE:
      case SEMICOLON:
      case INCR:
      case DECR:
      case IDENTIFIER:{
        n4 = Statement();
n0 = new NodeChoice(n4, 1, 3);
        break;
        }
      case CLASS:
      case INTERFACE:{
        n5 = ClassOrInterfaceDeclaration();
n0 = new NodeChoice(n5, 2, 3);
        break;
        }
      default:
        jj_la1[156] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new BlockStatement(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public LocalVariableDeclaration LocalVariableDeclaration() throws ParseException {// --- JTB generated node declarations ---
  VariableModifiers n0 = null;
  Type n1 = null;
  VariableDeclarator n2 = null;
  NodeListOptional n3 = new NodeListOptional();
  NodeSequence n4 = null;
  Token n5 = null;
  VariableDeclarator n6 = null;
  LocalVariableDeclaration jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = VariableModifiers();
    n1 = Type();
    n2 = VariableDeclarator();
    label_54:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[157] = jj_gen;
        break label_54;
      }
n4 = new NodeSequence(2);
      n5 = jj_consume_token(COMMA);
n4.addNode(n5);
      n6 = VariableDeclarator();
n4.addNode(n6);
n3.addNode(n4);
    }
n3.nodes.trimToSize();
jtbNode = new LocalVariableDeclaration(n0, n1, n2, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public VariableModifiers VariableModifiers() throws ParseException {// --- JTB generated node declarations ---
  NodeListOptional n0 = new NodeListOptional();
  NodeChoice n1 = null;
  Token n2 = null;
  Annotation n3 = null;
  VariableModifiers jtbNode = null;
    label_55:
    while (true) {
      if (jj_2_41(2)) {
        ;
      } else {
        break label_55;
      }
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case FINAL:{
        n2 = jj_consume_token(FINAL);
n1 = new NodeChoice(n2, 0, 2);
        break;
        }
      case 145:{
        n3 = Annotation();
n1 = new NodeChoice(n3, 1, 2);
        break;
        }
      default:
        jj_la1[158] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
n0.addNode(n1);
    }
n0.nodes.trimToSize();
jtbNode = new VariableModifiers(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public EmptyStatement EmptyStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  EmptyStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(SEMICOLON);
jtbNode = new EmptyStatement(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public StatementExpression StatementExpression() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  PreIncrementExpression n1 = null;
  PreDecrementExpression n2 = null;
  NodeSequence n3 = null;
  PrimaryExpression n4 = null;
  NodeOptional n5 = new NodeOptional();
  NodeChoice n6 = null;
  Token n7 = null;
  Token n8 = null;
  NodeSequence n9 = null;
  AssignmentOperator n10 = null;
  Expression n11 = null;
  StatementExpression jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case INCR:{
      n1 = PreIncrementExpression();
n0 = new NodeChoice(n1, 0, 3);
      break;
      }
    case DECR:{
      n2 = PreDecrementExpression();
n0 = new NodeChoice(n2, 1, 3);
      break;
      }
    case _LOOKAHEAD:
    case _IGNORE_CASE:
    case _PARSER_BEGIN:
    case _PARSER_END:
    case _JAVACODE:
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case _TOKEN_MGR_DECLS:
    case _EOF:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FALSE:
    case FLOAT:
    case INT:
    case LONG:
    case NEW:
    case NULL:
    case SHORT:
    case SUPER:
    case THIS:
    case TRUE:
    case VOID:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case LPAREN:
    case IDENTIFIER:{
n3 = new NodeSequence(2);
      n4 = PrimaryExpression();
n3.addNode(n4);
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ASSIGN:
      case INCR:
      case DECR:
      case PLUSASSIGN:
      case MINUSASSIGN:
      case STARASSIGN:
      case SLASHASSIGN:
      case ANDASSIGN:
      case ORASSIGN:
      case XORASSIGN:
      case REMASSIGN:
      case 141:
      case 142:
      case 143:{
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case INCR:{
          n7 = jj_consume_token(INCR);
n6 = new NodeChoice(n7, 0, 3);
          break;
          }
        case DECR:{
          n8 = jj_consume_token(DECR);
n6 = new NodeChoice(n8, 1, 3);
          break;
          }
        case ASSIGN:
        case PLUSASSIGN:
        case MINUSASSIGN:
        case STARASSIGN:
        case SLASHASSIGN:
        case ANDASSIGN:
        case ORASSIGN:
        case XORASSIGN:
        case REMASSIGN:
        case 141:
        case 142:
        case 143:{
n9 = new NodeSequence(2);
          n10 = AssignmentOperator();
n9.addNode(n10);
          n11 = Expression(null);
n9.addNode(n11);
n6 = new NodeChoice(n9, 2, 3);
          break;
          }
        default:
          jj_la1[159] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
n5.addNode(n6);
        break;
        }
      default:
        jj_la1[160] = jj_gen;
        ;
      }
n3.addNode(n5);
n0 = new NodeChoice(n3, 2, 3);
      break;
      }
    default:
      jj_la1[161] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new StatementExpression(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public SwitchStatement SwitchStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  Expression n2 = null;
  Token n3 = null;
  Token n4 = null;
  NodeListOptional n5 = new NodeListOptional();
  NodeSequence n6 = null;
  SwitchLabel n7 = null;
  NodeListOptional n8 = null;
  BlockStatement n9 = null;
  Token n10 = null;
  SwitchStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(SWITCH);
    n1 = jj_consume_token(LPAREN);
    n2 = Expression(null);
    n3 = jj_consume_token(RPAREN);
    n4 = jj_consume_token(LBRACE);
    label_56:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case CASE:
      case _DEFAULT:{
        ;
        break;
        }
      default:
        jj_la1[162] = jj_gen;
        break label_56;
      }
n8 = new NodeListOptional();
n6 = new NodeSequence(2);
      n7 = SwitchLabel();
n6.addNode(n7);
      label_57:
      while (true) {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _LOOKAHEAD:
        case _IGNORE_CASE:
        case _PARSER_BEGIN:
        case _PARSER_END:
        case _JAVACODE:
        case _TOKEN:
        case _SPECIAL_TOKEN:
        case _MORE:
        case _SKIP:
        case _TOKEN_MGR_DECLS:
        case _EOF:
        case ASSERT:
        case BOOLEAN:
        case BREAK:
        case BYTE:
        case CHAR:
        case CLASS:
        case CONTINUE:
        case DO:
        case DOUBLE:
        case FALSE:
        case FINAL:
        case FLOAT:
        case FOR:
        case IF:
        case INT:
        case INTERFACE:
        case LONG:
        case NEW:
        case NULL:
        case RETURN:
        case SHORT:
        case SUPER:
        case SWITCH:
        case SYNCHRONIZED:
        case THIS:
        case THROW:
        case TRUE:
        case TRY:
        case VOID:
        case WHILE:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case LPAREN:
        case LBRACE:
        case SEMICOLON:
        case INCR:
        case DECR:
        case 145:
        case IDENTIFIER:{
          ;
          break;
          }
        default:
          jj_la1[163] = jj_gen;
          break label_57;
        }
        n9 = BlockStatement();
n8.addNode(n9);
      }
n8.nodes.trimToSize();
n6.addNode(n8);
n5.addNode(n6);
    }
n5.nodes.trimToSize();
    n10 = jj_consume_token(RBRACE);
jtbNode = new SwitchStatement(n0, n1, n2, n3, n4, n5, n10);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public SwitchLabel SwitchLabel() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Token n2 = null;
  Expression n3 = null;
  Token n4 = null;
  NodeSequence n5 = null;
  Token n6 = null;
  Token n7 = null;
  SwitchLabel jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case CASE:{
n1 = new NodeSequence(3);
      n2 = jj_consume_token(CASE);
n1.addNode(n2);
      n3 = Expression(null);
n1.addNode(n3);
      n4 = jj_consume_token(COLON);
n1.addNode(n4);
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case _DEFAULT:{
n5 = new NodeSequence(2);
      n6 = jj_consume_token(_DEFAULT);
n5.addNode(n6);
      n7 = jj_consume_token(COLON);
n5.addNode(n7);
n0 = new NodeChoice(n5, 1, 2);
      break;
      }
    default:
      jj_la1[164] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new SwitchLabel(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public IfStatement IfStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  Expression n2 = null;
  Token n3 = null;
  Statement n4 = null;
  NodeOptional n5 = new NodeOptional();
  NodeSequence n6 = null;
  Token n7 = null;
  Statement n8 = null;
  IfStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IF);
    n1 = jj_consume_token(LPAREN);
    n2 = Expression(null);
    n3 = jj_consume_token(RPAREN);
    n4 = Statement();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case ELSE:{
n6 = new NodeSequence(2);
      n7 = jj_consume_token(ELSE);
n6.addNode(n7);
      n8 = Statement();
n6.addNode(n8);
n5.addNode(n6);
      break;
      }
    default:
      jj_la1[165] = jj_gen;
      ;
    }
jtbNode = new IfStatement(n0, n1, n2, n3, n4, n5);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public WhileStatement WhileStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  Expression n2 = null;
  Token n3 = null;
  Statement n4 = null;
  WhileStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(WHILE);
    n1 = jj_consume_token(LPAREN);
    n2 = Expression(null);
    n3 = jj_consume_token(RPAREN);
    n4 = Statement();
jtbNode = new WhileStatement(n0, n1, n2, n3, n4);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public DoStatement DoStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Statement n1 = null;
  Token n2 = null;
  Token n3 = null;
  Expression n4 = null;
  Token n5 = null;
  Token n6 = null;
  DoStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(DO);
    n1 = Statement();
    n2 = jj_consume_token(WHILE);
    n3 = jj_consume_token(LPAREN);
    n4 = Expression(null);
    n5 = jj_consume_token(RPAREN);
    n6 = jj_consume_token(SEMICOLON);
jtbNode = new DoStatement(n0, n1, n2, n3, n4, n5, n6);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ForStatement ForStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  NodeChoice n2 = null;
  NodeSequence n3 = null;
  VariableModifiers n4 = null;
  Type n5 = null;
  Token n6 = null;
  Token n7 = null;
  Expression n8 = null;
  NodeSequence n9 = null;
  NodeOptional n10 = new NodeOptional();
  ForInit n11 = null;
  Token n12 = null;
  NodeOptional n13 = new NodeOptional();
  Expression n14 = null;
  Token n15 = null;
  NodeOptional n16 = new NodeOptional();
  ForUpdate n17 = null;
  Token n18 = null;
  Statement n19 = null;
  ForStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(FOR);
    n1 = jj_consume_token(LPAREN);
    if (jj_2_42(2147483647)) {
n3 = new NodeSequence(5);
      n4 = VariableModifiers();
n3.addNode(n4);
      n5 = Type();
n3.addNode(n5);
      n6 = jj_consume_token(IDENTIFIER);
n3.addNode(n6);
      n7 = jj_consume_token(COLON);
n3.addNode(n7);
      n8 = Expression(null);
n3.addNode(n8);
n2 = new NodeChoice(n3, 0, 2);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case DOUBLE:
      case FALSE:
      case FINAL:
      case FLOAT:
      case INT:
      case LONG:
      case NEW:
      case NULL:
      case SHORT:
      case SUPER:
      case THIS:
      case TRUE:
      case VOID:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case SEMICOLON:
      case INCR:
      case DECR:
      case 145:
      case IDENTIFIER:{
n9 = new NodeSequence(5);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _LOOKAHEAD:
        case _IGNORE_CASE:
        case _PARSER_BEGIN:
        case _PARSER_END:
        case _JAVACODE:
        case _TOKEN:
        case _SPECIAL_TOKEN:
        case _MORE:
        case _SKIP:
        case _TOKEN_MGR_DECLS:
        case _EOF:
        case BOOLEAN:
        case BYTE:
        case CHAR:
        case DOUBLE:
        case FALSE:
        case FINAL:
        case FLOAT:
        case INT:
        case LONG:
        case NEW:
        case NULL:
        case SHORT:
        case SUPER:
        case THIS:
        case TRUE:
        case VOID:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case LPAREN:
        case INCR:
        case DECR:
        case 145:
        case IDENTIFIER:{
          n11 = ForInit();
n10.addNode(n11);
          break;
          }
        default:
          jj_la1[166] = jj_gen;
          ;
        }
n9.addNode(n10);
        n12 = jj_consume_token(SEMICOLON);
n9.addNode(n12);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _LOOKAHEAD:
        case _IGNORE_CASE:
        case _PARSER_BEGIN:
        case _PARSER_END:
        case _JAVACODE:
        case _TOKEN:
        case _SPECIAL_TOKEN:
        case _MORE:
        case _SKIP:
        case _TOKEN_MGR_DECLS:
        case _EOF:
        case BOOLEAN:
        case BYTE:
        case CHAR:
        case DOUBLE:
        case FALSE:
        case FLOAT:
        case INT:
        case LONG:
        case NEW:
        case NULL:
        case SHORT:
        case SUPER:
        case THIS:
        case TRUE:
        case VOID:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case LPAREN:
        case BANG:
        case TILDE:
        case INCR:
        case DECR:
        case PLUS:
        case MINUS:
        case IDENTIFIER:{
          n14 = Expression(null);
n13.addNode(n14);
          break;
          }
        default:
          jj_la1[167] = jj_gen;
          ;
        }
n9.addNode(n13);
        n15 = jj_consume_token(SEMICOLON);
n9.addNode(n15);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _LOOKAHEAD:
        case _IGNORE_CASE:
        case _PARSER_BEGIN:
        case _PARSER_END:
        case _JAVACODE:
        case _TOKEN:
        case _SPECIAL_TOKEN:
        case _MORE:
        case _SKIP:
        case _TOKEN_MGR_DECLS:
        case _EOF:
        case BOOLEAN:
        case BYTE:
        case CHAR:
        case DOUBLE:
        case FALSE:
        case FLOAT:
        case INT:
        case LONG:
        case NEW:
        case NULL:
        case SHORT:
        case SUPER:
        case THIS:
        case TRUE:
        case VOID:
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case LPAREN:
        case INCR:
        case DECR:
        case IDENTIFIER:{
          n17 = ForUpdate();
n16.addNode(n17);
          break;
          }
        default:
          jj_la1[168] = jj_gen;
          ;
        }
n9.addNode(n16);
n2 = new NodeChoice(n9, 1, 2);
        break;
        }
      default:
        jj_la1[169] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
    n18 = jj_consume_token(RPAREN);
    n19 = Statement();
jtbNode = new ForStatement(n0, n1, n2, n18, n19);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ForInit ForInit() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  LocalVariableDeclaration n1 = null;
  StatementExpressionList n2 = null;
  ForInit jtbNode = null;
    if (jj_2_43(2147483647)) {
      n1 = LocalVariableDeclaration();
n0 = new NodeChoice(n1, 0, 2);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case _LOOKAHEAD:
      case _IGNORE_CASE:
      case _PARSER_BEGIN:
      case _PARSER_END:
      case _JAVACODE:
      case _TOKEN:
      case _SPECIAL_TOKEN:
      case _MORE:
      case _SKIP:
      case _TOKEN_MGR_DECLS:
      case _EOF:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case DOUBLE:
      case FALSE:
      case FLOAT:
      case INT:
      case LONG:
      case NEW:
      case NULL:
      case SHORT:
      case SUPER:
      case THIS:
      case TRUE:
      case VOID:
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case LPAREN:
      case INCR:
      case DECR:
      case IDENTIFIER:{
        n2 = StatementExpressionList();
n0 = new NodeChoice(n2, 1, 2);
        break;
        }
      default:
        jj_la1[170] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new ForInit(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public StatementExpressionList StatementExpressionList() throws ParseException {// --- JTB generated node declarations ---
  StatementExpression n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  StatementExpression n4 = null;
  StatementExpressionList jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = StatementExpression();
    label_58:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[171] = jj_gen;
        break label_58;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(COMMA);
n2.addNode(n3);
      n4 = StatementExpression();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new StatementExpressionList(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ForUpdate ForUpdate() throws ParseException {// --- JTB generated node declarations ---
  StatementExpressionList n0 = null;
  ForUpdate jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = StatementExpressionList();
jtbNode = new ForUpdate(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public BreakStatement BreakStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  Token n2 = null;
  Token n3 = null;
  BreakStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(BREAK);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      n2 = jj_consume_token(IDENTIFIER);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[172] = jj_gen;
      ;
    }
    n3 = jj_consume_token(SEMICOLON);
jtbNode = new BreakStatement(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ContinueStatement ContinueStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  Token n2 = null;
  Token n3 = null;
  ContinueStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(CONTINUE);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      n2 = jj_consume_token(IDENTIFIER);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[173] = jj_gen;
      ;
    }
    n3 = jj_consume_token(SEMICOLON);
jtbNode = new ContinueStatement(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ReturnStatement ReturnStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeOptional n1 = new NodeOptional();
  Expression n2 = null;
  Token n3 = null;
  ReturnStatement jtbNode = null;
  // --- user BNFProduction java block ---
  Token t = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(RETURN);
t = n0;

    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case _LOOKAHEAD:
    case _IGNORE_CASE:
    case _PARSER_BEGIN:
    case _PARSER_END:
    case _JAVACODE:
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case _TOKEN_MGR_DECLS:
    case _EOF:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FALSE:
    case FLOAT:
    case INT:
    case LONG:
    case NEW:
    case NULL:
    case SHORT:
    case SUPER:
    case THIS:
    case TRUE:
    case VOID:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case LPAREN:
    case BANG:
    case TILDE:
    case INCR:
    case DECR:
    case PLUS:
    case MINUS:
    case IDENTIFIER:{
      n2 = Expression(null);
n1.addNode(n2);
      break;
      }
    default:
      jj_la1[174] = jj_gen;
      ;
    }
    n3 = jj_consume_token(SEMICOLON);
t = n3;

jtbNode = new ReturnStatement(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public ThrowStatement ThrowStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Expression n1 = null;
  Token n2 = null;
  ThrowStatement jtbNode = null;
  // --- user BNFProduction java block ---
  Token t = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(THROW);
t = n0;

    n1 = Expression(null);
    n2 = jj_consume_token(SEMICOLON);
t = n2;

jtbNode = new ThrowStatement(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public SynchronizedStatement SynchronizedStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  Expression n2 = null;
  Token n3 = null;
  Block n4 = null;
  SynchronizedStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(SYNCHRONIZED);
    n1 = jj_consume_token(LPAREN);
    n2 = Expression(null);
    n3 = jj_consume_token(RPAREN);
    n4 = Block(null);
jtbNode = new SynchronizedStatement(n0, n1, n2, n3, n4);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public TryStatement TryStatement() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Block n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  Token n5 = null;
  FormalParameter n6 = null;
  Token n7 = null;
  Block n8 = null;
  NodeOptional n9 = new NodeOptional();
  NodeSequence n10 = null;
  Token n11 = null;
  Block n12 = null;
  TryStatement jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(TRY);
    n1 = Block(null);
    label_59:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case CATCH:{
        ;
        break;
        }
      default:
        jj_la1[175] = jj_gen;
        break label_59;
      }
n3 = new NodeSequence(5);
      n4 = jj_consume_token(CATCH);
n3.addNode(n4);
      n5 = jj_consume_token(LPAREN);
n3.addNode(n5);
      n6 = FormalParameter();
n3.addNode(n6);
      n7 = jj_consume_token(RPAREN);
n3.addNode(n7);
      n8 = Block(null);
n3.addNode(n8);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case FINALLY:{
n10 = new NodeSequence(2);
      n11 = jj_consume_token(FINALLY);
n10.addNode(n11);
      n12 = Block(null);
n10.addNode(n12);
n9.addNode(n10);
      break;
      }
    default:
      jj_la1[176] = jj_gen;
      ;
    }
jtbNode = new TryStatement(n0, n1, n2, n9);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public Annotation Annotation() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NormalAnnotation n1 = null;
  SingleMemberAnnotation n2 = null;
  MarkerAnnotation n3 = null;
  Annotation jtbNode = null;
    if (jj_2_44(2147483647)) {
      n1 = NormalAnnotation();
n0 = new NodeChoice(n1, 0, 3);
    } else if (jj_2_45(2147483647)) {
      n2 = SingleMemberAnnotation();
n0 = new NodeChoice(n2, 1, 3);
    } else {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case 145:{
        n3 = MarkerAnnotation();
n0 = new NodeChoice(n3, 2, 3);
        break;
        }
      default:
        jj_la1[177] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
jtbNode = new Annotation(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public NormalAnnotation NormalAnnotation() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Name n1 = null;
  Token n2 = null;
  NodeOptional n3 = new NodeOptional();
  MemberValuePairs n4 = null;
  Token n5 = null;
  NormalAnnotation jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(145);
    n1 = Name(null);
    n2 = jj_consume_token(LPAREN);
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case IDENTIFIER:{
      n4 = MemberValuePairs();
n3.addNode(n4);
      break;
      }
    default:
      jj_la1[178] = jj_gen;
      ;
    }
    n5 = jj_consume_token(RPAREN);
jtbNode = new NormalAnnotation(n0, n1, n2, n3, n5);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MarkerAnnotation MarkerAnnotation() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Name n1 = null;
  MarkerAnnotation jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(145);
    n1 = Name(null);
jtbNode = new MarkerAnnotation(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public SingleMemberAnnotation SingleMemberAnnotation() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Name n1 = null;
  Token n2 = null;
  MemberValue n3 = null;
  Token n4 = null;
  SingleMemberAnnotation jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(145);
    n1 = Name(null);
    n2 = jj_consume_token(LPAREN);
    n3 = MemberValue();
    n4 = jj_consume_token(RPAREN);
jtbNode = new SingleMemberAnnotation(n0, n1, n2, n3, n4);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MemberValuePairs MemberValuePairs() throws ParseException {// --- JTB generated node declarations ---
  MemberValuePair n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  NodeSequence n2 = null;
  Token n3 = null;
  MemberValuePair n4 = null;
  MemberValuePairs jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = MemberValuePair();
    label_60:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case COMMA:{
        ;
        break;
        }
      default:
        jj_la1[179] = jj_gen;
        break label_60;
      }
n2 = new NodeSequence(2);
      n3 = jj_consume_token(COMMA);
n2.addNode(n3);
      n4 = MemberValuePair();
n2.addNode(n4);
n1.addNode(n2);
    }
n1.nodes.trimToSize();
jtbNode = new MemberValuePairs(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MemberValuePair MemberValuePair() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  MemberValue n2 = null;
  MemberValuePair jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(IDENTIFIER);
    n1 = jj_consume_token(ASSIGN);
    n2 = MemberValue();
jtbNode = new MemberValuePair(n0, n1, n2);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MemberValue MemberValue() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  Annotation n1 = null;
  MemberValueArrayInitializer n2 = null;
  ConditionalExpression n3 = null;
  MemberValue jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case 145:{
      n1 = Annotation();
n0 = new NodeChoice(n1, 0, 3);
      break;
      }
    case LBRACE:{
      n2 = MemberValueArrayInitializer();
n0 = new NodeChoice(n2, 1, 3);
      break;
      }
    case _LOOKAHEAD:
    case _IGNORE_CASE:
    case _PARSER_BEGIN:
    case _PARSER_END:
    case _JAVACODE:
    case _TOKEN:
    case _SPECIAL_TOKEN:
    case _MORE:
    case _SKIP:
    case _TOKEN_MGR_DECLS:
    case _EOF:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case DOUBLE:
    case FALSE:
    case FLOAT:
    case INT:
    case LONG:
    case NEW:
    case NULL:
    case SHORT:
    case SUPER:
    case THIS:
    case TRUE:
    case VOID:
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case LPAREN:
    case BANG:
    case TILDE:
    case INCR:
    case DECR:
    case PLUS:
    case MINUS:
    case IDENTIFIER:{
      n3 = ConditionalExpression();
n0 = new NodeChoice(n3, 2, 3);
      break;
      }
    default:
      jj_la1[180] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new MemberValue(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public MemberValueArrayInitializer MemberValueArrayInitializer() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  MemberValue n1 = null;
  NodeListOptional n2 = new NodeListOptional();
  NodeSequence n3 = null;
  Token n4 = null;
  MemberValue n5 = null;
  NodeOptional n6 = new NodeOptional();
  Token n7 = null;
  Token n8 = null;
  MemberValueArrayInitializer jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LBRACE);
    n1 = MemberValue();
    label_61:
    while (true) {
      if (jj_2_46(2)) {
        ;
      } else {
        break label_61;
      }
n3 = new NodeSequence(2);
      n4 = jj_consume_token(COMMA);
n3.addNode(n4);
      n5 = MemberValue();
n3.addNode(n5);
n2.addNode(n3);
    }
n2.nodes.trimToSize();
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case COMMA:{
      n7 = jj_consume_token(COMMA);
n6.addNode(n7);
      break;
      }
    default:
      jj_la1[181] = jj_gen;
      ;
    }
    n8 = jj_consume_token(RBRACE);
jtbNode = new MemberValueArrayInitializer(n0, n1, n2, n6, n8);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AnnotationTypeDeclaration AnnotationTypeDeclaration() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  Token n1 = null;
  Token n2 = null;
  AnnotationTypeBody n3 = null;
  AnnotationTypeDeclaration jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(145);
    n1 = jj_consume_token(INTERFACE);
    n2 = jj_consume_token(IDENTIFIER);
    n3 = AnnotationTypeBody();
jtbNode = new AnnotationTypeDeclaration(n0, n1, n2, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AnnotationTypeBody AnnotationTypeBody() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  NodeListOptional n1 = new NodeListOptional();
  AnnotationTypeMemberDeclaration n2 = null;
  Token n3 = null;
  AnnotationTypeBody jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(LBRACE);
    label_62:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
      case ABSTRACT:
      case BOOLEAN:
      case BYTE:
      case CHAR:
      case CLASS:
      case DOUBLE:
      case ENUM:
      case FINAL:
      case FLOAT:
      case INT:
      case INTERFACE:
      case LONG:
      case NATIVE:
      case PRIVATE:
      case PROTECTED:
      case PUBLIC:
      case SHORT:
      case STATIC:
      case STRICTFP:
      case SYNCHRONIZED:
      case TRANSIENT:
      case VOLATILE:
      case SEMICOLON:
      case 145:
      case IDENTIFIER:{
        ;
        break;
        }
      default:
        jj_la1[182] = jj_gen;
        break label_62;
      }
      n2 = AnnotationTypeMemberDeclaration();
n1.addNode(n2);
    }
n1.nodes.trimToSize();
    n3 = jj_consume_token(RBRACE);
jtbNode = new AnnotationTypeBody(n0, n1, n3);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public AnnotationTypeMemberDeclaration AnnotationTypeMemberDeclaration() throws ParseException {// --- JTB generated node declarations ---
  NodeChoice n0 = null;
  NodeSequence n1 = null;
  Modifiers n2 = null;
  NodeChoice n3 = null;
  NodeSequence n4 = null;
  Type n5 = null;
  Token n6 = null;
  Token n7 = null;
  Token n8 = null;
  NodeOptional n9 = new NodeOptional();
  DefaultValue n10 = null;
  Token n11 = null;
  ClassOrInterfaceDeclaration n12 = null;
  EnumDeclaration n13 = null;
  AnnotationTypeDeclaration n14 = null;
  FieldDeclaration n15 = null;
  Token n16 = null;
  AnnotationTypeMemberDeclaration jtbNode = null;
    switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
    case ABSTRACT:
    case BOOLEAN:
    case BYTE:
    case CHAR:
    case CLASS:
    case DOUBLE:
    case ENUM:
    case FINAL:
    case FLOAT:
    case INT:
    case INTERFACE:
    case LONG:
    case NATIVE:
    case PRIVATE:
    case PROTECTED:
    case PUBLIC:
    case SHORT:
    case STATIC:
    case STRICTFP:
    case SYNCHRONIZED:
    case TRANSIENT:
    case VOLATILE:
    case 145:
    case IDENTIFIER:{
n1 = new NodeSequence(2);
      n2 = Modifiers();
n1.addNode(n2);
      if (jj_2_47(2147483647)) {
n4 = new NodeSequence(6);
        n5 = Type();
n4.addNode(n5);
        n6 = jj_consume_token(IDENTIFIER);
n4.addNode(n6);
        n7 = jj_consume_token(LPAREN);
n4.addNode(n7);
        n8 = jj_consume_token(RPAREN);
n4.addNode(n8);
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case _DEFAULT:{
          n10 = DefaultValue();
n9.addNode(n10);
          break;
          }
        default:
          jj_la1[183] = jj_gen;
          ;
        }
n4.addNode(n9);
        n11 = jj_consume_token(SEMICOLON);
n4.addNode(n11);
n3 = new NodeChoice(n4, 0, 5);
      } else {
        switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
        case CLASS:
        case INTERFACE:{
          n12 = ClassOrInterfaceDeclaration();
n3 = new NodeChoice(n12, 1, 5);
          break;
          }
        case ENUM:{
          n13 = EnumDeclaration();
n3 = new NodeChoice(n13, 2, 5);
          break;
          }
        case 145:{
          n14 = AnnotationTypeDeclaration();
n3 = new NodeChoice(n14, 3, 5);
          break;
          }
        case BOOLEAN:
        case BYTE:
        case CHAR:
        case DOUBLE:
        case FLOAT:
        case INT:
        case LONG:
        case SHORT:
        case IDENTIFIER:{
          n15 = FieldDeclaration();
n3 = new NodeChoice(n15, 4, 5);
          break;
          }
        default:
          jj_la1[184] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
n1.addNode(n3);
n0 = new NodeChoice(n1, 0, 2);
      break;
      }
    case SEMICOLON:{
      n16 = jj_consume_token(SEMICOLON);
n0 = new NodeChoice(n16, 1, 2);
      break;
      }
    default:
      jj_la1[185] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
jtbNode = new AnnotationTypeMemberDeclaration(n0);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  final public DefaultValue DefaultValue() throws ParseException {// --- JTB generated node declarations ---
  Token n0 = null;
  MemberValue n1 = null;
  DefaultValue jtbNode = null;
    // --- user BNFProduction ExpansionChoices ---
      n0 = jj_consume_token(_DEFAULT);
    n1 = MemberValue();
jtbNode = new DefaultValue(n0, n1);
{if ("" != null) return jtbNode;}
    throw new Error("Missing return statement in function");
}

  private boolean jj_2_1(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_1()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(0, xla); }
  }

  private boolean jj_2_2(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_2()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(1, xla); }
  }

  private boolean jj_2_3(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_3()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(2, xla); }
  }

  private boolean jj_2_4(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_4()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(3, xla); }
  }

  private boolean jj_2_5(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_5()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(4, xla); }
  }

  private boolean jj_2_6(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_6()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(5, xla); }
  }

  private boolean jj_2_7(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_7()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(6, xla); }
  }

  private boolean jj_2_8(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_8()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(7, xla); }
  }

  private boolean jj_2_9(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_9()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(8, xla); }
  }

  private boolean jj_2_10(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_10()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(9, xla); }
  }

  private boolean jj_2_11(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_11()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(10, xla); }
  }

  private boolean jj_2_12(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_12()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(11, xla); }
  }

  private boolean jj_2_13(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_13()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(12, xla); }
  }

  private boolean jj_2_14(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_14()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(13, xla); }
  }

  private boolean jj_2_15(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_15()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(14, xla); }
  }

  private boolean jj_2_16(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_16()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(15, xla); }
  }

  private boolean jj_2_17(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_17()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(16, xla); }
  }

  private boolean jj_2_18(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_18()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(17, xla); }
  }

  private boolean jj_2_19(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_19()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(18, xla); }
  }

  private boolean jj_2_20(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_20()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(19, xla); }
  }

  private boolean jj_2_21(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_21()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(20, xla); }
  }

  private boolean jj_2_22(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_22()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(21, xla); }
  }

  private boolean jj_2_23(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_23()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(22, xla); }
  }

  private boolean jj_2_24(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_24()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(23, xla); }
  }

  private boolean jj_2_25(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_25()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(24, xla); }
  }

  private boolean jj_2_26(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_26()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(25, xla); }
  }

  private boolean jj_2_27(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_27()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(26, xla); }
  }

  private boolean jj_2_28(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_28()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(27, xla); }
  }

  private boolean jj_2_29(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_29()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(28, xla); }
  }

  private boolean jj_2_30(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_30()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(29, xla); }
  }

  private boolean jj_2_31(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_31()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(30, xla); }
  }

  private boolean jj_2_32(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_32()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(31, xla); }
  }

  private boolean jj_2_33(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_33()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(32, xla); }
  }

  private boolean jj_2_34(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_34()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(33, xla); }
  }

  private boolean jj_2_35(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_35()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(34, xla); }
  }

  private boolean jj_2_36(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_36()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(35, xla); }
  }

  private boolean jj_2_37(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_37()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(36, xla); }
  }

  private boolean jj_2_38(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_38()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(37, xla); }
  }

  private boolean jj_2_39(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_39()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(38, xla); }
  }

  private boolean jj_2_40(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_40()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(39, xla); }
  }

  private boolean jj_2_41(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_41()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(40, xla); }
  }

  private boolean jj_2_42(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_42()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(41, xla); }
  }

  private boolean jj_2_43(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_43()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(42, xla); }
  }

  private boolean jj_2_44(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_44()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(43, xla); }
  }

  private boolean jj_2_45(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_45()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(44, xla); }
  }

  private boolean jj_2_46(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_46()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(45, xla); }
  }

  private boolean jj_2_47(int xla)
 {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    try { return (!jj_3_47()); }
    catch(LookaheadSuccess ls) { return true; }
    finally { jj_save(46, xla); }
  }

  private boolean jj_3R_CastExpression_4589_5_437()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_3R_UnaryExpression_4351_3_400()) return true;
    return false;
  }

  private boolean jj_3R_CastExpression_4588_3_435()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_CastExpression_4589_5_437()) {
    jj_scanpos = xsp;
    if (jj_3R_CastExpression_4601_5_438()) return true;
    }
    return false;
  }

  private boolean jj_3R_VariableInitializer_3051_5_131()
 {
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_AnnotationTypeDeclaration_6118_3_374()
 {
    if (jj_scan_token(145)) return true;
    if (jj_scan_token(INTERFACE)) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_3R_AnnotationTypeBody_6137_3_381()) return true;
    return false;
  }

  private boolean jj_3R_VariableInitializer_3048_5_130()
 {
    if (jj_3R_ArrayInitializer_3076_3_203()) return true;
    return false;
  }

  private boolean jj_3R_LocalVariableDeclaration_5349_5_259()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_VariableDeclarator_2998_3_126()) return true;
    return false;
  }

  private boolean jj_3R_VariableInitializer_3047_3_86()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_VariableInitializer_3048_5_130()) {
    jj_scanpos = xsp;
    if (jj_3R_VariableInitializer_3051_5_131()) return true;
    }
    return false;
  }

  private boolean jj_3R_LocalVariableDeclaration_5345_3_246()
 {
    if (jj_3R_VariableModifiers_5372_3_108()) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_3R_VariableDeclarator_2998_3_126()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_LocalVariableDeclaration_5349_5_259()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2271_7_149()
 {
    if (jj_scan_token(_EOF)) return true;
    return false;
  }

  private boolean jj_3R_NameList_3806_5_227()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_Name_3765_3_111()) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2268_7_148()
 {
    if (jj_scan_token(_TOKEN_MGR_DECLS)) return true;
    return false;
  }

  private boolean jj_3R_NameList_3804_3_198()
 {
    if (jj_3R_Name_3765_3_111()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_NameList_3806_5_227()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_2()
 {
    if (jj_3R_PrimaryExpression_4626_3_63()) return true;
    if (jj_scan_token(ASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2265_7_147()
 {
    if (jj_scan_token(_SKIP)) return true;
    return false;
  }

  private boolean jj_3R_MemberValueArrayInitializer_6099_5_366()
 {
    if (jj_scan_token(COMMA)) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2262_7_146()
 {
    if (jj_scan_token(_MORE)) return true;
    return false;
  }

  private boolean jj_3R_PostfixExpression_4561_7_441()
 {
    if (jj_scan_token(DECR)) return true;
    return false;
  }

  private boolean jj_3R_null_1484_16_66()
 {
    if (jj_3R_PrimaryExpression_4626_3_63()) return true;
    if (jj_scan_token(ASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2259_7_145()
 {
    if (jj_scan_token(_SPECIAL_TOKEN)) return true;
    return false;
  }

  private boolean jj_3R_null_1482_16_65()
 {
    if (jj_3R_StringLiteral_4886_3_115()) return true;
    return false;
  }

  private boolean jj_3R_PostfixExpression_4558_7_440()
 {
    if (jj_scan_token(INCR)) return true;
    return false;
  }

  private boolean jj_3_3()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_null_1481_16_64()) {
    jj_scanpos = xsp;
    if (jj_3R_null_1482_16_65()) {
    jj_scanpos = xsp;
    if (jj_scan_token(108)) {
    jj_scanpos = xsp;
    if (jj_3R_null_1484_16_66()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_null_1481_16_64()
 {
    if (jj_3R_IdentifierAsString_2207_3_69()) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2256_7_144()
 {
    if (jj_scan_token(_TOKEN)) return true;
    return false;
  }

  private boolean jj_3R_VariableDeclaratorId_3025_5_231()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_PostfixExpression_4557_5_439()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_PostfixExpression_4558_7_440()) {
    jj_scanpos = xsp;
    if (jj_3R_PostfixExpression_4561_7_441()) return true;
    }
    return false;
  }

  private boolean jj_3_40()
 {
    if (jj_3R_VariableModifiers_5372_3_108()) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_3R_JavaIdentifier_2236_3_93()) return true;
    return false;
  }

  private boolean jj_3R_BlockStatement_5324_5_230()
 {
    if (jj_3R_ClassOrInterfaceDeclaration_2546_3_248()) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2253_7_143()
 {
    if (jj_scan_token(_JAVACODE)) return true;
    return false;
  }

  private boolean jj_3R_VariableDeclaratorId_3023_3_200()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_VariableDeclaratorId_3025_5_231()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_46()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_MemberValue_6056_3_113()) return true;
    return false;
  }

  private boolean jj_3R_BlockStatement_5321_5_229()
 {
    if (jj_3R_Statement_5151_3_247()) return true;
    return false;
  }

  private boolean jj_3R_PostfixExpression_4555_3_436()
 {
    if (jj_3R_PrimaryExpression_4626_3_63()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_PostfixExpression_4557_5_439()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2250_7_142()
 {
    if (jj_scan_token(_PARSER_END)) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2247_7_141()
 {
    if (jj_scan_token(_PARSER_BEGIN)) return true;
    return false;
  }

  private boolean jj_3R_MemberValueArrayInitializer_6086_3_217()
 {
    if (jj_scan_token(LBRACE)) return true;
    if (jj_3R_MemberValue_6056_3_113()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_46()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_3R_MemberValueArrayInitializer_6099_5_366()) jj_scanpos = xsp;
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2244_7_140()
 {
    if (jj_scan_token(_IGNORE_CASE)) return true;
    return false;
  }

  private boolean jj_3R_BlockStatement_5313_5_228()
 {
    if (jj_3R_LocalVariableDeclaration_5345_3_246()) return true;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2241_7_139()
 {
    if (jj_scan_token(_LOOKAHEAD)) return true;
    return false;
  }

  private boolean jj_3R_BlockStatement_5312_3_199()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_BlockStatement_5313_5_228()) {
    jj_scanpos = xsp;
    if (jj_3R_BlockStatement_5321_5_229()) {
    jj_scanpos = xsp;
    if (jj_3R_BlockStatement_5324_5_230()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2238_7_138()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4532_9_216()
 {
    if (jj_3R_Literal_4804_3_218()) return true;
    return false;
  }

  private boolean jj_3R_JavaIdentifier_2236_3_93()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_JavaIdentifier_2238_7_138()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2241_7_139()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2244_7_140()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2247_7_141()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2250_7_142()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2253_7_143()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2256_7_144()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2259_7_145()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2262_7_146()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2265_7_147()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2268_7_148()) {
    jj_scanpos = xsp;
    if (jj_3R_JavaIdentifier_2271_7_149()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_VariableDeclarator_3000_5_201()
 {
    if (jj_scan_token(ASSIGN)) return true;
    if (jj_3R_VariableInitializer_3047_3_86()) return true;
    return false;
  }

  private boolean jj_3_20()
 {
    if (jj_scan_token(DOT)) return true;
    if (jj_3R_JavaIdentifier_2236_3_93()) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4529_9_215()
 {
    if (jj_scan_token(NEW)) return true;
    return false;
  }

  private boolean jj_3R_VariableDeclarator_2998_3_126()
 {
    if (jj_3R_VariableDeclaratorId_3023_3_200()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_VariableDeclarator_3000_5_201()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_Name_3765_3_111()
 {
    if (jj_3R_JavaIdentifier_2236_3_93()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_20()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_CastLookahead_4526_9_214()
 {
    if (jj_scan_token(SUPER)) return true;
    return false;
  }

  private boolean jj_3R_MemberValue_6063_5_184()
 {
    if (jj_3R_ConditionalExpression_3933_3_162()) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4523_9_213()
 {
    if (jj_scan_token(THIS)) return true;
    return false;
  }

  private boolean jj_3R_MemberValue_6060_5_183()
 {
    if (jj_3R_MemberValueArrayInitializer_6086_3_217()) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4520_9_212()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_MemberValue_6057_5_182()
 {
    if (jj_3R_Annotation_5922_3_119()) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4517_9_211()
 {
    if (jj_scan_token(LPAREN)) return true;
    return false;
  }

  private boolean jj_3R_MemberValue_6056_3_113()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_MemberValue_6057_5_182()) {
    jj_scanpos = xsp;
    if (jj_3R_MemberValue_6060_5_183()) {
    jj_scanpos = xsp;
    if (jj_3R_MemberValue_6063_5_184()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_CastLookahead_4514_9_210()
 {
    if (jj_scan_token(BANG)) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4511_9_209()
 {
    if (jj_scan_token(TILDE)) return true;
    return false;
  }

  private boolean jj_3R_Block_5276_5_202()
 {
    if (jj_3R_BlockStatement_5312_3_199()) return true;
    return false;
  }

  private boolean jj_3R_FieldDeclaration_2973_5_127()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_VariableDeclarator_2998_3_126()) return true;
    return false;
  }

  private boolean jj_3R_IdentifierAsString_2207_3_69()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_MemberValuePair_6038_3_348()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_scan_token(ASSIGN)) return true;
    if (jj_3R_MemberValue_6056_3_113()) return true;
    return false;
  }

  private boolean jj_3R_FieldDeclaration_2970_3_84()
 {
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_3R_VariableDeclarator_2998_3_126()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_FieldDeclaration_2973_5_127()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4502_5_166()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(RPAREN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_CastLookahead_4511_9_209()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4514_9_210()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4517_9_211()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4520_9_212()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4523_9_213()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4526_9_214()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4529_9_215()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4532_9_216()) return true;
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_Block_5271_3_129()
 {
    if (jj_scan_token(LBRACE)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_Block_5276_5_202()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3_27()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(LBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_ResultType_3730_7_180()
 {
    if (jj_3R_Type_3445_3_101()) return true;
    return false;
  }

  private boolean jj_3R_ResultType_3727_7_179()
 {
    if (jj_scan_token(VOID)) return true;
    return false;
  }

  private boolean jj_3R_ResultType_3725_3_103()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ResultType_3727_7_179()) {
    jj_scanpos = xsp;
    if (jj_3R_ResultType_3730_7_180()) return true;
    }
    return false;
  }

  private boolean jj_3R_CastLookahead_4490_5_165()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3_9()
 {
    if (jj_3R_FieldDeclaration_2970_3_84()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2949_5_346()
 {
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3_8()
 {
    if (jj_3R_ConstructorDeclaration_3282_3_83()) return true;
    return false;
  }

  private boolean jj_3R_MemberValuePairs_6016_5_349()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_MemberValuePair_6038_3_348()) return true;
    return false;
  }

  private boolean jj_3_26()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_PrimitiveType_3682_3_100()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2942_9_364()
 {
    if (jj_3R_MethodDeclaration_3122_3_375()) return true;
    return false;
  }

  private boolean jj_3R_CastLookahead_4481_3_99()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_26()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4490_5_165()) {
    jj_scanpos = xsp;
    if (jj_3R_CastLookahead_4502_5_166()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_LabeledStatement_5248_3_107()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_scan_token(COLON)) return true;
    if (jj_3R_Statement_5151_3_247()) return true;
    return false;
  }

  private boolean jj_3R_MemberValuePairs_6014_3_334()
 {
    if (jj_3R_MemberValuePair_6038_3_348()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_MemberValuePairs_6016_5_349()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2938_9_363()
 {
    if (jj_3R_FieldDeclaration_2970_3_84()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2934_9_362()
 {
    if (jj_3R_ConstructorDeclaration_3282_3_83()) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3704_5_174()
 {
    if (jj_scan_token(DOUBLE)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2931_9_361()
 {
    if (jj_3R_AnnotationTypeDeclaration_6118_3_374()) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3701_5_173()
 {
    if (jj_scan_token(FLOAT)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2928_9_360()
 {
    if (jj_3R_EnumDeclaration_2669_3_373()) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3698_5_172()
 {
    if (jj_scan_token(LONG)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2925_9_359()
 {
    if (jj_3R_ClassOrInterfaceDeclaration_2546_3_248()) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3695_5_171()
 {
    if (jj_scan_token(INT)) return true;
    return false;
  }

  private boolean jj_3R_AssertStatement_5226_5_317()
 {
    if (jj_scan_token(COLON)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3692_5_170()
 {
    if (jj_scan_token(SHORT)) return true;
    return false;
  }

  private boolean jj_3R_SingleMemberAnnotation_5993_3_221()
 {
    if (jj_scan_token(145)) return true;
    if (jj_3R_Name_3765_3_111()) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_MemberValue_6056_3_113()) return true;
    if (jj_scan_token(RPAREN)) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3689_5_169()
 {
    if (jj_scan_token(BYTE)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2920_5_345()
 {
    if (jj_3R_Modifiers_2398_3_120()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2925_9_359()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2928_9_360()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2931_9_361()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2934_9_362()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2938_9_363()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2942_9_364()) return true;
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_CharacterDescriptor_2155_3_316()
 {
    if (jj_3R_StringLiteral_4886_3_115()) return true;
    return false;
  }

  private boolean jj_3R_AssertStatement_5223_3_293()
 {
    if (jj_scan_token(ASSERT)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AssertStatement_5226_5_317()) jj_scanpos = xsp;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3686_5_168()
 {
    if (jj_scan_token(CHAR)) return true;
    return false;
  }

  private boolean jj_3_25()
 {
    if (jj_3R_CastLookahead_4481_3_99()) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3683_5_167()
 {
    if (jj_scan_token(BOOLEAN)) return true;
    return false;
  }

  private boolean jj_3R_PrimitiveType_3682_3_100()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_PrimitiveType_3683_5_167()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimitiveType_3686_5_168()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimitiveType_3689_5_169()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimitiveType_3692_5_170()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimitiveType_3695_5_171()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimitiveType_3698_5_172()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimitiveType_3701_5_173()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimitiveType_3704_5_174()) return true;
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3_10()
 {
    if (jj_3R_Initializer_3426_3_85()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpressionNotPlusMinus_4445_5_428()
 {
    if (jj_3R_PostfixExpression_4555_3_436()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBodyDeclaration_2911_3_332()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_10()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2920_5_345()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2949_5_346()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_UnaryExpressionNotPlusMinus_4441_5_427()
 {
    if (jj_3R_CastExpression_4588_3_435()) return true;
    return false;
  }

  private boolean jj_3R_MarkerAnnotation_5975_3_222()
 {
    if (jj_scan_token(145)) return true;
    if (jj_3R_Name_3765_3_111()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpressionNotPlusMinus_4432_9_434()
 {
    if (jj_scan_token(BANG)) return true;
    return false;
  }

  private boolean jj_3R_Statement_5202_5_274()
 {
    if (jj_3R_TryStatement_5882_3_306()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpressionNotPlusMinus_4429_9_433()
 {
    if (jj_scan_token(TILDE)) return true;
    return false;
  }

  private boolean jj_3R_Statement_5199_5_273()
 {
    if (jj_3R_SynchronizedStatement_5853_3_305()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5196_5_272()
 {
    if (jj_3R_ThrowStatement_5830_3_304()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpressionNotPlusMinus_4426_5_426()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_UnaryExpressionNotPlusMinus_4429_9_433()) {
    jj_scanpos = xsp;
    if (jj_3R_UnaryExpressionNotPlusMinus_4432_9_434()) return true;
    }
    if (jj_3R_UnaryExpression_4351_3_400()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5193_5_271()
 {
    if (jj_3R_ReturnStatement_5804_3_303()) return true;
    return false;
  }

  private boolean jj_3R_NormalAnnotation_5958_5_313()
 {
    if (jj_3R_MemberValuePairs_6014_3_334()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpressionNotPlusMinus_4425_3_421()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_UnaryExpressionNotPlusMinus_4426_5_426()) {
    jj_scanpos = xsp;
    if (jj_3R_UnaryExpressionNotPlusMinus_4441_5_427()) {
    jj_scanpos = xsp;
    if (jj_3R_UnaryExpressionNotPlusMinus_4445_5_428()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_Statement_5190_5_270()
 {
    if (jj_3R_ContinueStatement_5781_3_302()) return true;
    return false;
  }

  private boolean jj_3R_WildcardBounds_3655_5_369()
 {
    if (jj_scan_token(SUPER)) return true;
    if (jj_3R_ReferenceType_3477_3_91()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5187_5_269()
 {
    if (jj_3R_BreakStatement_5760_3_301()) return true;
    return false;
  }

  private boolean jj_3R_NormalAnnotation_5954_3_220()
 {
    if (jj_scan_token(145)) return true;
    if (jj_3R_Name_3765_3_111()) return true;
    if (jj_scan_token(LPAREN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_NormalAnnotation_5958_5_313()) jj_scanpos = xsp;
    if (jj_scan_token(RPAREN)) return true;
    return false;
  }

  private boolean jj_3R_Statement_5184_5_268()
 {
    if (jj_3R_ForStatement_5641_3_300()) return true;
    return false;
  }

  private boolean jj_3R_WildcardBounds_3648_5_368()
 {
    if (jj_scan_token(EXTENDS)) return true;
    if (jj_3R_ReferenceType_3477_3_91()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5181_5_267()
 {
    if (jj_3R_DoStatement_5603_3_299()) return true;
    return false;
  }

  private boolean jj_3R_WildcardBounds_3647_3_351()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_WildcardBounds_3648_5_368()) {
    jj_scanpos = xsp;
    if (jj_3R_WildcardBounds_3655_5_369()) return true;
    }
    return false;
  }

  private boolean jj_3R_Statement_5178_5_266()
 {
    if (jj_3R_WhileStatement_5580_3_298()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5175_5_265()
 {
    if (jj_3R_IfStatement_5550_3_297()) return true;
    return false;
  }

  private boolean jj_3R_CharacterList_2106_5_291()
 {
    if (jj_3R_CharacterDescriptor_2155_3_316()) return true;
    return false;
  }

  private boolean jj_3_45()
 {
    if (jj_scan_token(145)) return true;
    if (jj_3R_Name_3765_3_111()) return true;
    if (jj_scan_token(LPAREN)) return true;
    return false;
  }

  private boolean jj_3R_Statement_5172_5_264()
 {
    if (jj_3R_SwitchStatement_5474_3_296()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBody_2869_5_309()
 {
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2911_3_332()) return true;
    return false;
  }

  private boolean jj_3R_PreDecrementExpression_4404_3_338()
 {
    if (jj_scan_token(DECR)) return true;
    if (jj_3R_PrimaryExpression_4626_3_63()) return true;
    return false;
  }

  private boolean jj_3_44()
 {
    if (jj_scan_token(145)) return true;
    if (jj_3R_Name_3765_3_111()) return true;
    if (jj_scan_token(LPAREN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_null_5924_7_112()) {
    jj_scanpos = xsp;
    if (jj_scan_token(99)) return true;
    }
    return false;
  }

  private boolean jj_3R_Annotation_5934_5_195()
 {
    if (jj_3R_MarkerAnnotation_5975_3_222()) return true;
    return false;
  }

  private boolean jj_3R_CharacterList_2098_5_290()
 {
    if (jj_scan_token(TILDE)) return true;
    return false;
  }

  private boolean jj_3R_Statement_5165_5_263()
 {
    if (jj_3R_StatementExpression_5422_3_295()) return true;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_CharacterList_2097_3_257()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_CharacterList_2098_5_290()) jj_scanpos = xsp;
    if (jj_scan_token(LBRACKET)) return true;
    xsp = jj_scanpos;
    if (jj_3R_CharacterList_2106_5_291()) jj_scanpos = xsp;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceBody_2864_3_280()
 {
    if (jj_scan_token(LBRACE)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ClassOrInterfaceBody_2869_5_309()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3R_Annotation_5930_5_194()
 {
    if (jj_3R_SingleMemberAnnotation_5993_3_221()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5162_5_262()
 {
    if (jj_3R_EmptyStatement_5398_3_294()) return true;
    return false;
  }

  private boolean jj_3R_TypeArgument_3623_7_336()
 {
    if (jj_3R_WildcardBounds_3647_3_351()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5159_5_261()
 {
    if (jj_3R_Block_5271_3_129()) return true;
    return false;
  }

  private boolean jj_3R_null_5924_7_112()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_scan_token(ASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_Statement_5156_5_260()
 {
    if (jj_3R_AssertStatement_5223_3_293()) return true;
    return false;
  }

  private boolean jj_3R_Annotation_5923_5_193()
 {
    if (jj_3R_NormalAnnotation_5954_3_220()) return true;
    return false;
  }

  private boolean jj_3R_PreIncrementExpression_4389_3_337()
 {
    if (jj_scan_token(INCR)) return true;
    if (jj_3R_PrimaryExpression_4626_3_63()) return true;
    return false;
  }

  private boolean jj_3R_TypeArgument_3619_5_207()
 {
    if (jj_scan_token(HOOK)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_TypeArgument_3623_7_336()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_Annotation_5922_3_119()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_Annotation_5923_5_193()) {
    jj_scanpos = xsp;
    if (jj_3R_Annotation_5930_5_194()) {
    jj_scanpos = xsp;
    if (jj_3R_Annotation_5934_5_195()) return true;
    }
    }
    return false;
  }

  private boolean jj_3_39()
 {
    if (jj_3R_LabeledStatement_5248_3_107()) return true;
    return false;
  }

  private boolean jj_3R_TypeArgument_3616_5_206()
 {
    if (jj_3R_ReferenceType_3477_3_91()) return true;
    return false;
  }

  private boolean jj_3R_Statement_5151_3_247()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_39()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5156_5_260()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5159_5_261()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5162_5_262()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5165_5_263()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5172_5_264()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5175_5_265()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5178_5_266()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5181_5_267()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5184_5_268()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5187_5_269()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5190_5_270()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5193_5_271()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5196_5_272()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5199_5_273()) {
    jj_scanpos = xsp;
    if (jj_3R_Statement_5202_5_274()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_TypeArgument_3615_3_137()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_TypeArgument_3616_5_206()) {
    jj_scanpos = xsp;
    if (jj_3R_TypeArgument_3619_5_207()) return true;
    }
    return false;
  }

  private boolean jj_3R_UnaryExpression_4373_5_412()
 {
    if (jj_3R_UnaryExpressionNotPlusMinus_4425_3_421()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpression_4370_5_411()
 {
    if (jj_3R_PreDecrementExpression_4404_3_338()) return true;
    return false;
  }

  private boolean jj_3R_TypeBound_2836_5_292()
 {
    if (jj_scan_token(BIT_AND)) return true;
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpression_4367_5_410()
 {
    if (jj_3R_PreIncrementExpression_4389_3_337()) return true;
    return false;
  }

  private boolean jj_3R_TryStatement_5900_5_329()
 {
    if (jj_scan_token(FINALLY)) return true;
    if (jj_3R_Block_5271_3_129()) return true;
    return false;
  }

  private boolean jj_3R_TypeBound_2833_3_258()
 {
    if (jj_scan_token(EXTENDS)) return true;
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_TypeBound_2836_5_292()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_UnaryExpression_4358_9_420()
 {
    if (jj_scan_token(MINUS)) return true;
    return false;
  }

  private boolean jj_3R_EmptyTypeArguments_3596_3_106()
 {
    if (jj_scan_token(LT)) return true;
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpression_4355_9_419()
 {
    if (jj_scan_token(PLUS)) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpression_4352_5_409()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_UnaryExpression_4355_9_419()) {
    jj_scanpos = xsp;
    if (jj_3R_UnaryExpression_4358_9_420()) return true;
    }
    if (jj_3R_UnaryExpression_4351_3_400()) return true;
    return false;
  }

  private boolean jj_3R_TryStatement_5885_5_328()
 {
    if (jj_scan_token(CATCH)) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_FormalParameter_3250_3_225()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_3R_Block_5271_3_129()) return true;
    return false;
  }

  private boolean jj_3R_UnaryExpression_4351_3_400()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_UnaryExpression_4352_5_409()) {
    jj_scanpos = xsp;
    if (jj_3R_UnaryExpression_4367_5_410()) {
    jj_scanpos = xsp;
    if (jj_3R_UnaryExpression_4370_5_411()) {
    jj_scanpos = xsp;
    if (jj_3R_UnaryExpression_4373_5_412()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_TypeParameter_2813_5_244()
 {
    if (jj_3R_TypeBound_2833_3_258()) return true;
    return false;
  }

  private boolean jj_3R_TryStatement_5882_3_306()
 {
    if (jj_scan_token(TRY)) return true;
    if (jj_3R_Block_5271_3_129()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_TryStatement_5885_5_328()) { jj_scanpos = xsp; break; }
    }
    xsp = jj_scanpos;
    if (jj_3R_TryStatement_5900_5_329()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_ArrayDimsAndInits_5108_7_315()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_TypeParameter_2811_3_223()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_TypeParameter_2813_5_244()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_TypeArguments_3574_5_289()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_TypeArgument_3615_3_137()) return true;
    return false;
  }

  private boolean jj_3R_ArrayDimsAndInits_5106_5_286()
 {
    Token xsp;
    if (jj_3R_ArrayDimsAndInits_5108_7_315()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ArrayDimsAndInits_5108_7_315()) { jj_scanpos = xsp; break; }
    }
    if (jj_3R_ArrayInitializer_3076_3_203()) return true;
    return false;
  }

  private boolean jj_3R_TypeArguments_3571_3_92()
 {
    if (jj_scan_token(LT)) return true;
    if (jj_3R_TypeArgument_3615_3_137()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_TypeArguments_3574_5_289()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3_37()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_MultiplicativeExpression_4321_9_431()
 {
    if (jj_scan_token(REM)) return true;
    return false;
  }

  private boolean jj_3R_MultiplicativeExpression_4318_9_430()
 {
    if (jj_scan_token(SLASH)) return true;
    return false;
  }

  private boolean jj_3R_TypeParameters_2788_5_224()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_TypeParameter_2811_3_223()) return true;
    return false;
  }

  private boolean jj_3R_MultiplicativeExpression_4315_9_429()
 {
    if (jj_scan_token(STAR)) return true;
    return false;
  }

  private boolean jj_3R_SynchronizedStatement_5853_3_305()
 {
    if (jj_scan_token(SYNCHRONIZED)) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_3R_Block_5271_3_129()) return true;
    return false;
  }

  private boolean jj_3R_TypeParameters_2785_3_196()
 {
    if (jj_scan_token(LT)) return true;
    if (jj_3R_TypeParameter_2811_3_223()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_TypeParameters_2788_5_224()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3_36()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3_19()
 {
    if (jj_3R_TypeArguments_3571_3_92()) return true;
    return false;
  }

  private boolean jj_3R_MultiplicativeExpression_4312_5_422()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_MultiplicativeExpression_4315_9_429()) {
    jj_scanpos = xsp;
    if (jj_3R_MultiplicativeExpression_4318_9_430()) {
    jj_scanpos = xsp;
    if (jj_3R_MultiplicativeExpression_4321_9_431()) return true;
    }
    }
    if (jj_3R_UnaryExpression_4351_3_400()) return true;
    return false;
  }

  private boolean jj_3_38()
 {
    Token xsp;
    if (jj_3_36()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_36()) { jj_scanpos = xsp; break; }
    }
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_37()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_MultiplicativeExpression_4310_3_396()
 {
    if (jj_3R_UnaryExpression_4351_3_400()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_MultiplicativeExpression_4312_5_422()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ArrayDimsAndInits_5077_3_253()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_38()) {
    jj_scanpos = xsp;
    if (jj_3R_ArrayDimsAndInits_5106_5_286()) return true;
    }
    return false;
  }

  private boolean jj_3_18()
 {
    if (jj_scan_token(DOT)) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_19()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_17()
 {
    if (jj_3R_TypeArguments_3571_3_92()) return true;
    return false;
  }

  private boolean jj_3R_EnumConstant_2764_5_406()
 {
    if (jj_3R_ClassOrInterfaceBody_2864_3_280()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceType_3530_3_205()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_17()) jj_scanpos = xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_18()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_EnumConstant_2760_5_405()
 {
    if (jj_3R_Arguments_4924_3_134()) return true;
    return false;
  }

  private boolean jj_3R_ThrowStatement_5830_3_304()
 {
    if (jj_scan_token(THROW)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_ComplexRegularExpressionUnit_1991_5_243()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_ComplexRegularExpressionChoices_1856_3_68()) return true;
    return false;
  }

  private boolean jj_3R_ComplexRegularExpressionUnit_1988_5_242()
 {
    if (jj_3R_CharacterList_2097_3_257()) return true;
    return false;
  }

  private boolean jj_3R_EnumConstant_2757_3_82()
 {
    if (jj_3R_Modifiers_2398_3_120()) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_EnumConstant_2760_5_405()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_EnumConstant_2764_5_406()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_AdditiveExpression_4281_9_424()
 {
    if (jj_scan_token(MINUS)) return true;
    return false;
  }

  private boolean jj_3R_AdditiveExpression_4278_9_423()
 {
    if (jj_scan_token(PLUS)) return true;
    return false;
  }

  private boolean jj_3R_AllocationExpression_5039_11_288()
 {
    if (jj_3R_ClassOrInterfaceBody_2864_3_280()) return true;
    return false;
  }

  private boolean jj_3R_AdditiveExpression_4275_5_413()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AdditiveExpression_4278_9_423()) {
    jj_scanpos = xsp;
    if (jj_3R_AdditiveExpression_4281_9_424()) return true;
    }
    if (jj_3R_MultiplicativeExpression_4310_3_396()) return true;
    return false;
  }

  private boolean jj_3R_ReturnStatement_5808_5_327()
 {
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_ComplexRegularExpressionUnit_1973_5_241()
 {
    if (jj_scan_token(LT)) return true;
    if (jj_3R_IdentifierAsString_2207_3_69()) return true;
    return false;
  }

  private boolean jj_3R_AllocationExpression_5035_9_256()
 {
    if (jj_3R_Arguments_4924_3_134()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AllocationExpression_5039_11_288()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_AdditiveExpression_4273_3_387()
 {
    if (jj_3R_MultiplicativeExpression_4310_3_396()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_AdditiveExpression_4275_5_413()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_AllocationExpression_5032_9_255()
 {
    if (jj_3R_ArrayDimsAndInits_5077_3_253()) return true;
    return false;
  }

  private boolean jj_3R_EnumBody_2732_7_398()
 {
    if (jj_3R_ClassOrInterfaceBodyDeclaration_2911_3_332()) return true;
    return false;
  }

  private boolean jj_3R_ReturnStatement_5804_3_303()
 {
    if (jj_scan_token(RETURN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ReturnStatement_5808_5_327()) jj_scanpos = xsp;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3_16()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_ComplexRegularExpressionUnit_1964_5_240()
 {
    if (jj_3R_StringLiteral_4886_3_115()) return true;
    return false;
  }

  private boolean jj_3R_ComplexRegularExpressionUnit_1963_3_219()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ComplexRegularExpressionUnit_1964_5_240()) {
    jj_scanpos = xsp;
    if (jj_3R_ComplexRegularExpressionUnit_1973_5_241()) {
    jj_scanpos = xsp;
    if (jj_3R_ComplexRegularExpressionUnit_1988_5_242()) {
    jj_scanpos = xsp;
    if (jj_3R_ComplexRegularExpressionUnit_1991_5_243()) return true;
    }
    }
    }
    return false;
  }

  private boolean jj_3R_EnumBody_2727_5_393()
 {
    if (jj_scan_token(SEMICOLON)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_EnumBody_2732_7_398()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ReferenceType_3494_5_136()
 {
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_16()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_AllocationExpression_5024_9_287()
 {
    if (jj_3R_TypeArguments_3571_3_92()) return true;
    return false;
  }

  private boolean jj_3R_RUnsignedShift_4251_14_163()
 {
    return false;
  }

  private boolean jj_3R_EnumBody_2723_5_392()
 {
    if (jj_scan_token(COMMA)) return true;
    return false;
  }

  private boolean jj_3_34()
 {
    if (jj_3R_EmptyTypeArguments_3596_3_106()) return true;
    return false;
  }

  private boolean jj_3R_AllocationExpression_5019_7_254()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_34()) {
    jj_scanpos = xsp;
    if (jj_3R_AllocationExpression_5024_9_287()) return true;
    }
    return false;
  }

  private boolean jj_3_15()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_ContinueStatement_5783_5_326()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_RUnsignedShift_4251_3_97()
 {
    jj_lookingAhead = true;
    jj_semLA = getToken(1).kind == GT && getToken(2).kind == GT && getToken(3).kind == GT && (getToken(2).beginColumn == 1 + getToken(1).beginColumn) && (getToken(3).beginColumn == 1 + getToken(2).beginColumn);
    jj_lookingAhead = false;
    if (!jj_semLA || jj_3R_RUnsignedShift_4251_14_163()) return true;
    if (jj_scan_token(GT)) return true;
    if (jj_scan_token(GT)) return true;
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3_7()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_EnumConstant_2757_3_82()) return true;
    return false;
  }

  private boolean jj_3R_AllocationExpression_5013_5_181()
 {
    if (jj_scan_token(NEW)) return true;
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AllocationExpression_5019_7_254()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_AllocationExpression_5032_9_255()) {
    jj_scanpos = xsp;
    if (jj_3R_AllocationExpression_5035_9_256()) return true;
    }
    return false;
  }

  private boolean jj_3R_ReferenceType_3478_5_135()
 {
    if (jj_3R_PrimitiveType_3682_3_100()) return true;
    Token xsp;
    if (jj_3_15()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_15()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ContinueStatement_5781_3_302()
 {
    if (jj_scan_token(CONTINUE)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ContinueStatement_5783_5_326()) jj_scanpos = xsp;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_RSignedShift_4234_14_164()
 {
    return false;
  }

  private boolean jj_3R_ReferenceType_3477_3_91()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ReferenceType_3478_5_135()) {
    jj_scanpos = xsp;
    if (jj_3R_ReferenceType_3494_5_136()) return true;
    }
    return false;
  }

  private boolean jj_3R_EnumBody_2705_5_391()
 {
    if (jj_3R_EnumConstant_2757_3_82()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_7()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_35()
 {
    if (jj_scan_token(NEW)) return true;
    if (jj_3R_PrimitiveType_3682_3_100()) return true;
    if (jj_3R_ArrayDimsAndInits_5077_3_253()) return true;
    return false;
  }

  private boolean jj_3R_EnumBody_2703_3_380()
 {
    if (jj_scan_token(LBRACE)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_EnumBody_2705_5_391()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_EnumBody_2723_5_392()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_EnumBody_2727_5_393()) jj_scanpos = xsp;
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3R_AllocationExpression_5002_3_104()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_35()) {
    jj_scanpos = xsp;
    if (jj_3R_AllocationExpression_5013_5_181()) return true;
    }
    return false;
  }

  private boolean jj_3R_RSignedShift_4234_3_98()
 {
    jj_lookingAhead = true;
    jj_semLA = getToken(1).kind == GT && getToken(2).kind == GT && (getToken(2).beginColumn == 1 + getToken(1).beginColumn);
    jj_lookingAhead = false;
    if (!jj_semLA || jj_3R_RSignedShift_4234_14_164()) return true;
    if (jj_scan_token(GT)) return true;
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3R_BreakStatement_5762_5_325()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_BreakStatement_5760_3_301()
 {
    if (jj_scan_token(BREAK)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_BreakStatement_5762_5_325()) jj_scanpos = xsp;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_Type_3450_5_175()
 {
    if (jj_3R_PrimitiveType_3682_3_100()) return true;
    return false;
  }

  private boolean jj_3_24()
 {
    if (jj_3R_RSignedShift_4234_3_98()) return true;
    return false;
  }

  private boolean jj_3_14()
 {
    if (jj_3R_ReferenceType_3477_3_91()) return true;
    return false;
  }

  private boolean jj_3_23()
 {
    if (jj_3R_RUnsignedShift_4251_3_97()) return true;
    return false;
  }

  private boolean jj_3R_Type_3445_3_101()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_14()) {
    jj_scanpos = xsp;
    if (jj_3R_Type_3450_5_175()) return true;
    }
    return false;
  }

  private boolean jj_3R_ShiftExpression_4205_9_96()
 {
    if (jj_scan_token(144)) return true;
    return false;
  }

  private boolean jj_3R_ForUpdate_5744_3_358()
 {
    if (jj_3R_StatementExpressionList_5722_3_372()) return true;
    return false;
  }

  private boolean jj_3R_EnumDeclaration_2672_5_379()
 {
    if (jj_3R_ImplementsList_2638_3_308()) return true;
    return false;
  }

  private boolean jj_3_22()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ShiftExpression_4205_9_96()) {
    jj_scanpos = xsp;
    if (jj_3_23()) {
    jj_scanpos = xsp;
    if (jj_3_24()) return true;
    }
    }
    if (jj_3R_AdditiveExpression_4273_3_387()) return true;
    return false;
  }

  private boolean jj_3R_EnumDeclaration_2669_3_373()
 {
    if (jj_scan_token(ENUM)) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_EnumDeclaration_2672_5_379()) jj_scanpos = xsp;
    if (jj_3R_EnumBody_2703_3_380()) return true;
    return false;
  }

  private boolean jj_3R_ComplexRegularExpression_1900_5_192()
 {
    if (jj_3R_ComplexRegularExpressionUnit_1963_3_219()) return true;
    return false;
  }

  private boolean jj_3R_ShiftExpression_4200_3_376()
 {
    if (jj_3R_AdditiveExpression_4273_3_387()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_22()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ComplexRegularExpression_1899_3_117()
 {
    Token xsp;
    if (jj_3R_ComplexRegularExpression_1900_5_192()) return true;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ComplexRegularExpression_1900_5_192()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ArgumentList_4965_5_281()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_Initializer_3427_5_128()
 {
    if (jj_scan_token(STATIC)) return true;
    return false;
  }

  private boolean jj_3R_ArgumentList_4963_3_232()
 {
    if (jj_3R_Expression_3834_3_95()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ArgumentList_4965_5_281()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_Initializer_3426_3_85()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_Initializer_3427_5_128()) jj_scanpos = xsp;
    if (jj_3R_Block_5271_3_129()) return true;
    return false;
  }

  private boolean jj_3R_StatementExpressionList_5724_5_378()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_StatementExpression_5422_3_295()) return true;
    return false;
  }

  private boolean jj_3R_StatementExpressionList_5722_3_372()
 {
    if (jj_3R_StatementExpression_5422_3_295()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_StatementExpressionList_5724_5_378()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_43()
 {
    if (jj_3R_VariableModifiers_5372_3_108()) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_RelationalExpression_4171_9_404()
 {
    if (jj_scan_token(GE)) return true;
    return false;
  }

  private boolean jj_3R_ImplementsList_2641_5_331()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    return false;
  }

  private boolean jj_3R_RelationalExpression_4168_9_403()
 {
    if (jj_scan_token(LE)) return true;
    return false;
  }

  private boolean jj_3R_ImplementsList_2638_3_308()
 {
    if (jj_scan_token(IMPLEMENTS)) return true;
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ImplementsList_2641_5_331()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_RelationalExpression_4165_9_402()
 {
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3R_ForInit_5703_5_371()
 {
    if (jj_3R_StatementExpressionList_5722_3_372()) return true;
    return false;
  }

  private boolean jj_3R_RelationalExpression_4162_9_401()
 {
    if (jj_scan_token(LT)) return true;
    return false;
  }

  private boolean jj_3R_ForInit_5699_5_370()
 {
    if (jj_3R_LocalVariableDeclaration_5345_3_246()) return true;
    return false;
  }

  private boolean jj_3R_ExplicitConstructorInvocation_3395_7_132()
 {
    if (jj_3R_PrimaryExpression_4626_3_63()) return true;
    if (jj_scan_token(DOT)) return true;
    if (jj_scan_token(SUPER)) return true;
    if (jj_3R_Arguments_4924_3_134()) return true;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_ForInit_5698_3_357()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ForInit_5699_5_370()) {
    jj_scanpos = xsp;
    if (jj_3R_ForInit_5703_5_371()) return true;
    }
    return false;
  }

  private boolean jj_3R_Arguments_4929_5_204()
 {
    if (jj_3R_ArgumentList_4963_3_232()) return true;
    return false;
  }

  private boolean jj_3R_RelationalExpression_4159_5_397()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_RelationalExpression_4162_9_401()) {
    jj_scanpos = xsp;
    if (jj_3R_RelationalExpression_4165_9_402()) {
    jj_scanpos = xsp;
    if (jj_3R_RelationalExpression_4168_9_403()) {
    jj_scanpos = xsp;
    if (jj_3R_RelationalExpression_4171_9_404()) return true;
    }
    }
    }
    if (jj_3R_ShiftExpression_4200_3_376()) return true;
    return false;
  }

  private boolean jj_3R_ComplexRegularExpressionChoices_1858_5_118()
 {
    if (jj_scan_token(BIT_OR)) return true;
    return false;
  }

  private boolean jj_3R_RelationalExpression_4157_3_365()
 {
    if (jj_3R_ShiftExpression_4200_3_376()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_RelationalExpression_4159_5_397()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ComplexRegularExpressionChoices_1856_3_68()
 {
    if (jj_3R_ComplexRegularExpression_1899_3_117()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ComplexRegularExpressionChoices_1858_5_118()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ExplicitConstructorInvocation_3382_11_90()
 {
    if (jj_scan_token(SUPER)) return true;
    if (jj_3R_Arguments_4924_3_134()) return true;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_Arguments_4924_3_134()
 {
    if (jj_scan_token(LPAREN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_Arguments_4929_5_204()) jj_scanpos = xsp;
    if (jj_scan_token(RPAREN)) return true;
    return false;
  }

  private boolean jj_3R_ExplicitConstructorInvocation_3373_11_89()
 {
    if (jj_scan_token(THIS)) return true;
    if (jj_3R_Arguments_4924_3_134()) return true;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_ForStatement_5675_9_344()
 {
    if (jj_3R_ForUpdate_5744_3_358()) return true;
    return false;
  }

  private boolean jj_3R_ExtendsList_2606_5_330()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    return false;
  }

  private boolean jj_3R_ForStatement_5668_9_343()
 {
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_ExtendsList_2603_3_307()
 {
    if (jj_scan_token(EXTENDS)) return true;
    if (jj_3R_ClassOrInterfaceType_3530_3_205()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ExtendsList_2606_5_330()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_NullLiteral_4903_3_251()
 {
    if (jj_scan_token(NULL)) return true;
    return false;
  }

  private boolean jj_3R_ForStatement_5661_9_342()
 {
    if (jj_3R_ForInit_5698_3_357()) return true;
    return false;
  }

  private boolean jj_3R_InstanceOfExpression_4130_5_388()
 {
    if (jj_scan_token(INSTANCEOF)) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    return false;
  }

  private boolean jj_3R_ExplicitConstructorInvocation_3357_11_133()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_ReferenceType_3477_3_91()) return true;
    return false;
  }

  private boolean jj_3R_ForStatement_5659_7_324()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ForStatement_5661_9_342()) jj_scanpos = xsp;
    if (jj_scan_token(SEMICOLON)) return true;
    xsp = jj_scanpos;
    if (jj_3R_ForStatement_5668_9_343()) jj_scanpos = xsp;
    if (jj_scan_token(SEMICOLON)) return true;
    xsp = jj_scanpos;
    if (jj_3R_ForStatement_5675_9_344()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_InstanceOfExpression_4128_3_347()
 {
    if (jj_3R_RelationalExpression_4157_3_365()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_InstanceOfExpression_4130_5_388()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3_42()
 {
    if (jj_3R_VariableModifiers_5372_3_108()) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_scan_token(COLON)) return true;
    return false;
  }

  private boolean jj_3R_ExplicitConstructorInvocation_3350_9_88()
 {
    if (jj_scan_token(LT)) return true;
    if (jj_3R_ReferenceType_3477_3_91()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ExplicitConstructorInvocation_3357_11_133()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3R_StringLiteral_4886_3_115()
 {
    if (jj_scan_token(STRING_LITERAL)) return true;
    return false;
  }

  private boolean jj_3_13()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ExplicitConstructorInvocation_3350_9_88()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_ExplicitConstructorInvocation_3373_11_89()) {
    jj_scanpos = xsp;
    if (jj_3R_ExplicitConstructorInvocation_3382_11_90()) return true;
    }
    return false;
  }

  private boolean jj_3R_ForStatement_5645_7_323()
 {
    if (jj_3R_VariableModifiers_5372_3_108()) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_scan_token(COLON)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_ExplicitConstructorInvocation_3345_3_87()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_13()) {
    jj_scanpos = xsp;
    if (jj_3R_ExplicitConstructorInvocation_3395_7_132()) return true;
    }
    return false;
  }

  private boolean jj_3R_EqualityExpression_4102_9_390()
 {
    if (jj_scan_token(NE)) return true;
    return false;
  }

  private boolean jj_3_5()
 {
    if (jj_scan_token(LT)) return true;
    if (jj_3R_IdentifierAsString_2207_3_69()) return true;
    return false;
  }

  private boolean jj_3R_ForStatement_5641_3_300()
 {
    if (jj_scan_token(FOR)) return true;
    if (jj_scan_token(LPAREN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ForStatement_5645_7_323()) {
    jj_scanpos = xsp;
    if (jj_3R_ForStatement_5659_7_324()) return true;
    }
    if (jj_scan_token(RPAREN)) return true;
    if (jj_3R_Statement_5151_3_247()) return true;
    return false;
  }

  private boolean jj_3R_EqualityExpression_4099_9_389()
 {
    if (jj_scan_token(EQ)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceDeclaration_2569_5_279()
 {
    if (jj_3R_ImplementsList_2638_3_308()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceDeclaration_2565_5_278()
 {
    if (jj_3R_ExtendsList_2603_3_307()) return true;
    return false;
  }

  private boolean jj_3R_BooleanLiteral_4865_5_284()
 {
    if (jj_scan_token(FALSE)) return true;
    return false;
  }

  private boolean jj_3R_EqualityExpression_4096_5_377()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_EqualityExpression_4099_9_389()) {
    jj_scanpos = xsp;
    if (jj_3R_EqualityExpression_4102_9_390()) return true;
    }
    if (jj_3R_InstanceOfExpression_4128_3_347()) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceDeclaration_2561_5_277()
 {
    if (jj_3R_TypeParameters_2785_3_196()) return true;
    return false;
  }

  private boolean jj_3R_EqualityExpression_4094_3_333()
 {
    if (jj_3R_InstanceOfExpression_4128_3_347()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_EqualityExpression_4096_5_377()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_BooleanLiteral_4859_5_283()
 {
    if (jj_scan_token(TRUE)) return true;
    return false;
  }

  private boolean jj_3R_BooleanLiteral_4858_3_250()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_BooleanLiteral_4859_5_283()) {
    jj_scanpos = xsp;
    if (jj_3R_BooleanLiteral_4865_5_284()) return true;
    }
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceDeclaration_2551_7_276()
 {
    if (jj_scan_token(INTERFACE)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceDeclaration_2548_7_275()
 {
    if (jj_scan_token(CLASS)) return true;
    return false;
  }

  private boolean jj_3R_ClassOrInterfaceDeclaration_2546_3_248()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ClassOrInterfaceDeclaration_2548_7_275()) {
    jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceDeclaration_2551_7_276()) return true;
    }
    if (jj_scan_token(IDENTIFIER)) return true;
    xsp = jj_scanpos;
    if (jj_3R_ClassOrInterfaceDeclaration_2561_5_277()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_ClassOrInterfaceDeclaration_2565_5_278()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_ClassOrInterfaceDeclaration_2569_5_279()) jj_scanpos = xsp;
    if (jj_3R_ClassOrInterfaceBody_2864_3_280()) return true;
    return false;
  }

  private boolean jj_3_12()
 {
    if (jj_3R_ExplicitConstructorInvocation_3345_3_87()) return true;
    return false;
  }

  private boolean jj_3R_RegularExpression_1767_9_116()
 {
    if (jj_scan_token(139)) return true;
    return false;
  }

  private boolean jj_3R_ConstructorDeclaration_3303_5_125()
 {
    if (jj_3R_BlockStatement_5312_3_199()) return true;
    return false;
  }

  private boolean jj_3R_AndExpression_4068_5_367()
 {
    if (jj_scan_token(BIT_AND)) return true;
    if (jj_3R_EqualityExpression_4094_3_333()) return true;
    return false;
  }

  private boolean jj_3R_RegularExpression_1764_7_67()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_RegularExpression_1767_9_116()) jj_scanpos = xsp;
    if (jj_3R_IdentifierAsString_2207_3_69()) return true;
    if (jj_scan_token(COLON)) return true;
    return false;
  }

  private boolean jj_3R_DoStatement_5603_3_299()
 {
    if (jj_scan_token(DO)) return true;
    if (jj_3R_Statement_5151_3_247()) return true;
    if (jj_scan_token(WHILE)) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_ConstructorDeclaration_3298_5_124()
 {
    if (jj_3R_ExplicitConstructorInvocation_3345_3_87()) return true;
    return false;
  }

  private boolean jj_3R_AndExpression_4066_3_312()
 {
    if (jj_3R_EqualityExpression_4094_3_333()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_AndExpression_4068_5_367()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_4()
 {
    if (jj_scan_token(LT)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_RegularExpression_1764_7_67()) jj_scanpos = xsp;
    if (jj_3R_ComplexRegularExpressionChoices_1856_3_68()) return true;
    if (jj_scan_token(GT)) return true;
    return false;
  }

  private boolean jj_3R_ConstructorDeclaration_3289_5_123()
 {
    if (jj_scan_token(THROWS)) return true;
    if (jj_3R_NameList_3804_3_198()) return true;
    return false;
  }

  private boolean jj_3R_Literal_4820_5_239()
 {
    if (jj_3R_NullLiteral_4903_3_251()) return true;
    return false;
  }

  private boolean jj_3R_ConstructorDeclaration_3283_5_121()
 {
    if (jj_3R_TypeParameters_2785_3_196()) return true;
    return false;
  }

  private boolean jj_3R_Literal_4817_5_238()
 {
    if (jj_3R_BooleanLiteral_4858_3_250()) return true;
    return false;
  }

  private boolean jj_3R_ConstructorDeclaration_3282_3_83()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ConstructorDeclaration_3283_5_121()) jj_scanpos = xsp;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_3R_FormalParameters_3198_3_122()) return true;
    xsp = jj_scanpos;
    if (jj_3R_ConstructorDeclaration_3289_5_123()) jj_scanpos = xsp;
    if (jj_scan_token(LBRACE)) return true;
    xsp = jj_scanpos;
    if (jj_3R_ConstructorDeclaration_3298_5_124()) jj_scanpos = xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ConstructorDeclaration_3303_5_125()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3R_Literal_4814_5_237()
 {
    if (jj_scan_token(STRING_LITERAL)) return true;
    return false;
  }

  private boolean jj_3R_Literal_4811_5_236()
 {
    if (jj_scan_token(CHARACTER_LITERAL)) return true;
    return false;
  }

  private boolean jj_3R_WhileStatement_5580_3_298()
 {
    if (jj_scan_token(WHILE)) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_3R_Statement_5151_3_247()) return true;
    return false;
  }

  private boolean jj_3R_ExclusiveOrExpression_4042_5_350()
 {
    if (jj_scan_token(XOR)) return true;
    if (jj_3R_AndExpression_4066_3_312()) return true;
    return false;
  }

  private boolean jj_3R_Literal_4808_5_235()
 {
    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
    return false;
  }

  private boolean jj_3R_ExclusiveOrExpression_4040_3_282()
 {
    if (jj_3R_AndExpression_4066_3_312()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ExclusiveOrExpression_4042_5_350()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_Literal_4805_5_234()
 {
    if (jj_scan_token(INTEGER_LITERAL)) return true;
    return false;
  }

  private boolean jj_3R_Literal_4804_3_218()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_Literal_4805_5_234()) {
    jj_scanpos = xsp;
    if (jj_3R_Literal_4808_5_235()) {
    jj_scanpos = xsp;
    if (jj_3R_Literal_4811_5_236()) {
    jj_scanpos = xsp;
    if (jj_3R_Literal_4814_5_237()) {
    jj_scanpos = xsp;
    if (jj_3R_Literal_4817_5_238()) {
    jj_scanpos = xsp;
    if (jj_3R_Literal_4820_5_239()) return true;
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_IfStatement_5556_5_322()
 {
    if (jj_scan_token(ELSE)) return true;
    if (jj_3R_Statement_5151_3_247()) return true;
    return false;
  }

  private boolean jj_3R_FormalParameter_3253_5_245()
 {
    if (jj_scan_token(140)) return true;
    return false;
  }

  private boolean jj_3R_InclusiveOrExpression_4016_5_335()
 {
    if (jj_scan_token(BIT_OR)) return true;
    if (jj_3R_ExclusiveOrExpression_4040_3_282()) return true;
    return false;
  }

  private boolean jj_3R_PrimarySuffix_4783_5_178()
 {
    if (jj_3R_Arguments_4924_3_134()) return true;
    return false;
  }

  private boolean jj_3R_FormalParameter_3250_3_225()
 {
    if (jj_3R_Modifiers_2398_3_120()) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_FormalParameter_3253_5_245()) jj_scanpos = xsp;
    if (jj_3R_VariableDeclaratorId_3023_3_200()) return true;
    return false;
  }

  private boolean jj_3R_IfStatement_5550_3_297()
 {
    if (jj_scan_token(IF)) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_3R_Statement_5151_3_247()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_IfStatement_5556_5_322()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_InclusiveOrExpression_4014_3_249()
 {
    if (jj_3R_ExclusiveOrExpression_4040_3_282()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_InclusiveOrExpression_4016_5_335()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_PrimarySuffix_4776_5_177()
 {
    if (jj_scan_token(DOT)) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2468_9_81()
 {
    if (jj_3R_Annotation_5922_3_119()) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2462_9_80()
 {
    if (jj_scan_token(STRICTFP)) return true;
    return false;
  }

  private boolean jj_3R_PrimarySuffix_4767_5_176()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3_33()
 {
    if (jj_3R_MemberSelector_4647_3_105()) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2456_9_79()
 {
    if (jj_scan_token(VOLATILE)) return true;
    return false;
  }

  private boolean jj_3R_ConditionalAndExpression_3990_5_314()
 {
    if (jj_scan_token(SC_AND)) return true;
    if (jj_3R_InclusiveOrExpression_4014_3_249()) return true;
    return false;
  }

  private boolean jj_3R_SwitchLabel_5523_5_356()
 {
    if (jj_scan_token(_DEFAULT)) return true;
    if (jj_scan_token(COLON)) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2450_9_78()
 {
    if (jj_scan_token(TRANSIENT)) return true;
    return false;
  }

  private boolean jj_3_32()
 {
    if (jj_scan_token(DOT)) return true;
    if (jj_3R_AllocationExpression_5002_3_104()) return true;
    return false;
  }

  private boolean jj_3R_ConditionalAndExpression_3988_3_233()
 {
    if (jj_3R_InclusiveOrExpression_4014_3_249()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ConditionalAndExpression_3990_5_314()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_1()
 {
    if (jj_scan_token(LT)) return true;
    if (jj_scan_token(STAR)) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2444_9_77()
 {
    if (jj_scan_token(NATIVE)) return true;
    return false;
  }

  private boolean jj_3R_SwitchLabel_5514_5_355()
 {
    if (jj_scan_token(CASE)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(COLON)) return true;
    return false;
  }

  private boolean jj_3_31()
 {
    if (jj_scan_token(DOT)) return true;
    if (jj_scan_token(THIS)) return true;
    return false;
  }

  private boolean jj_3R_SwitchLabel_5513_3_340()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_SwitchLabel_5514_5_355()) {
    jj_scanpos = xsp;
    if (jj_3R_SwitchLabel_5523_5_356()) return true;
    }
    return false;
  }

  private boolean jj_3R_FormalParameters_3208_7_226()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_FormalParameter_3250_3_225()) return true;
    return false;
  }

  private boolean jj_3R_PrimarySuffix_4746_3_102()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_31()) {
    jj_scanpos = xsp;
    if (jj_3_32()) {
    jj_scanpos = xsp;
    if (jj_3_33()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimarySuffix_4767_5_176()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimarySuffix_4776_5_177()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimarySuffix_4783_5_178()) return true;
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_Modifiers_2438_9_76()
 {
    if (jj_scan_token(SYNCHRONIZED)) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2432_9_75()
 {
    if (jj_scan_token(ABSTRACT)) return true;
    return false;
  }

  private boolean jj_3R_FormalParameters_3203_5_197()
 {
    if (jj_3R_FormalParameter_3250_3_225()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_FormalParameters_3208_7_226()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_Modifiers_2426_9_74()
 {
    if (jj_scan_token(FINAL)) return true;
    return false;
  }

  private boolean jj_3R_ConditionalOrExpression_3964_5_285()
 {
    if (jj_scan_token(SC_OR)) return true;
    if (jj_3R_ConditionalAndExpression_3988_3_233()) return true;
    return false;
  }

  private boolean jj_3R_FormalParameters_3198_3_122()
 {
    if (jj_scan_token(LPAREN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_FormalParameters_3203_5_197()) jj_scanpos = xsp;
    if (jj_scan_token(RPAREN)) return true;
    return false;
  }

  private boolean jj_3R_ConditionalOrExpression_3962_3_208()
 {
    if (jj_3R_ConditionalAndExpression_3988_3_233()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_ConditionalOrExpression_3964_5_285()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_Modifiers_2420_9_73()
 {
    if (jj_scan_token(PRIVATE)) return true;
    return false;
  }

  private boolean jj_3R_SwitchStatement_5485_7_341()
 {
    if (jj_3R_BlockStatement_5312_3_199()) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2414_9_72()
 {
    if (jj_scan_token(PROTECTED)) return true;
    return false;
  }

  private boolean jj_3_30()
 {
    if (jj_3R_ResultType_3725_3_103()) return true;
    if (jj_scan_token(DOT)) return true;
    if (jj_scan_token(CLASS)) return true;
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4716_5_191()
 {
    if (jj_3R_Name_3765_3_111()) return true;
    return false;
  }

  private boolean jj_3R_SwitchStatement_5480_5_321()
 {
    if (jj_3R_SwitchLabel_5513_3_340()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_SwitchStatement_5485_7_341()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_Modifiers_2408_9_71()
 {
    if (jj_scan_token(STATIC)) return true;
    return false;
  }

  private boolean jj_3R_Modifiers_2402_9_70()
 {
    if (jj_scan_token(PUBLIC)) return true;
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4706_5_190()
 {
    if (jj_3R_ResultType_3725_3_103()) return true;
    if (jj_scan_token(DOT)) return true;
    if (jj_scan_token(CLASS)) return true;
    return false;
  }

  private boolean jj_3R_SwitchStatement_5474_3_296()
 {
    if (jj_scan_token(SWITCH)) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_scan_token(LBRACE)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_SwitchStatement_5480_5_321()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4703_5_189()
 {
    if (jj_3R_AllocationExpression_5002_3_104()) return true;
    return false;
  }

  private boolean jj_3R_ConditionalExpression_3935_5_252()
 {
    if (jj_scan_token(HOOK)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(COLON)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3_6()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_Modifiers_2402_9_70()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2408_9_71()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2414_9_72()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2420_9_73()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2426_9_74()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2432_9_75()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2438_9_76()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2444_9_77()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2450_9_78()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2456_9_79()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2462_9_80()) {
    jj_scanpos = xsp;
    if (jj_3R_Modifiers_2468_9_81()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_MethodDeclarator_3165_5_395()
 {
    if (jj_scan_token(LBRACKET)) return true;
    if (jj_scan_token(RBRACKET)) return true;
    return false;
  }

  private boolean jj_3R_ConditionalExpression_3933_3_162()
 {
    if (jj_3R_ConditionalOrExpression_3962_3_208()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ConditionalExpression_3935_5_252()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_Modifiers_2398_3_120()
 {
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_6()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_MethodDeclarator_3162_3_383()
 {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_3R_FormalParameters_3198_3_122()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_MethodDeclarator_3165_5_395()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4694_5_188()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    if (jj_scan_token(RPAREN)) return true;
    return false;
  }

  private boolean jj_3R_DefaultValue_6229_3_432()
 {
    if (jj_scan_token(_DEFAULT)) return true;
    if (jj_3R_MemberValue_6056_3_113()) return true;
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4685_5_187()
 {
    if (jj_scan_token(SUPER)) return true;
    if (jj_scan_token(DOT)) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4682_5_186()
 {
    if (jj_scan_token(THIS)) return true;
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6213_5_408()
 {
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3912_5_161()
 {
    if (jj_scan_token(ORASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4679_5_185()
 {
    if (jj_3R_Literal_4804_3_218()) return true;
    return false;
  }

  private boolean jj_3R_MethodDeclaration_3141_7_386()
 {
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_StatementExpression_5440_9_354()
 {
    if (jj_3R_AssignmentOperator_3878_3_94()) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6206_9_418()
 {
    if (jj_3R_FieldDeclaration_2970_3_84()) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3909_5_160()
 {
    if (jj_scan_token(XORASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_PrimaryPrefix_4678_3_114()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_PrimaryPrefix_4679_5_185()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimaryPrefix_4682_5_186()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimaryPrefix_4685_5_187()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimaryPrefix_4694_5_188()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimaryPrefix_4703_5_189()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimaryPrefix_4706_5_190()) {
    jj_scanpos = xsp;
    if (jj_3R_PrimaryPrefix_4716_5_191()) return true;
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_MethodDeclaration_3138_7_385()
 {
    if (jj_3R_Block_5271_3_129()) return true;
    return false;
  }

  private boolean jj_3R_StatementExpression_5437_9_353()
 {
    if (jj_scan_token(DECR)) return true;
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6203_9_417()
 {
    if (jj_3R_AnnotationTypeDeclaration_6118_3_374()) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3906_5_159()
 {
    if (jj_scan_token(ANDASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_StatementExpression_5434_9_352()
 {
    if (jj_scan_token(INCR)) return true;
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6200_9_416()
 {
    if (jj_3R_EnumDeclaration_2669_3_373()) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3903_5_158()
 {
    if (jj_scan_token(143)) return true;
    return false;
  }

  private boolean jj_3R_StatementExpression_5433_7_339()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_StatementExpression_5434_9_352()) {
    jj_scanpos = xsp;
    if (jj_3R_StatementExpression_5437_9_353()) {
    jj_scanpos = xsp;
    if (jj_3R_StatementExpression_5440_9_354()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6197_9_415()
 {
    if (jj_3R_ClassOrInterfaceDeclaration_2546_3_248()) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3900_5_157()
 {
    if (jj_scan_token(142)) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3897_5_156()
 {
    if (jj_scan_token(141)) return true;
    return false;
  }

  private boolean jj_3R_MethodDeclaration_3129_5_384()
 {
    if (jj_scan_token(THROWS)) return true;
    if (jj_3R_NameList_3804_3_198()) return true;
    return false;
  }

  private boolean jj_3R_StatementExpression_5429_5_320()
 {
    if (jj_3R_PrimaryExpression_4626_3_63()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_StatementExpression_5433_7_339()) jj_scanpos = xsp;
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6189_11_425()
 {
    if (jj_3R_DefaultValue_6229_3_432()) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3894_5_155()
 {
    if (jj_scan_token(MINUSASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_StatementExpression_5426_5_319()
 {
    if (jj_3R_PreDecrementExpression_4404_3_338()) return true;
    return false;
  }

  private boolean jj_3_47()
 {
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_scan_token(LPAREN)) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3891_5_154()
 {
    if (jj_scan_token(PLUSASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_MethodDeclaration_3123_5_382()
 {
    if (jj_3R_TypeParameters_2785_3_196()) return true;
    return false;
  }

  private boolean jj_3R_StatementExpression_5423_5_318()
 {
    if (jj_3R_PreIncrementExpression_4389_3_337()) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3888_5_153()
 {
    if (jj_scan_token(REMASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_MethodDeclaration_3122_3_375()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_MethodDeclaration_3123_5_382()) jj_scanpos = xsp;
    if (jj_3R_ResultType_3725_3_103()) return true;
    if (jj_3R_MethodDeclarator_3162_3_383()) return true;
    xsp = jj_scanpos;
    if (jj_3R_MethodDeclaration_3129_5_384()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_MethodDeclaration_3138_7_385()) {
    jj_scanpos = xsp;
    if (jj_3R_MethodDeclaration_3141_7_386()) return true;
    }
    return false;
  }

  private boolean jj_3R_StatementExpression_5422_3_295()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_StatementExpression_5423_5_318()) {
    jj_scanpos = xsp;
    if (jj_3R_StatementExpression_5426_5_319()) {
    jj_scanpos = xsp;
    if (jj_3R_StatementExpression_5429_5_320()) return true;
    }
    }
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3885_5_152()
 {
    if (jj_scan_token(SLASHASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3882_5_151()
 {
    if (jj_scan_token(STARASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6178_9_414()
 {
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_scan_token(LPAREN)) return true;
    if (jj_scan_token(RPAREN)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AnnotationTypeMemberDeclaration_6189_11_425()) jj_scanpos = xsp;
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3879_5_150()
 {
    if (jj_scan_token(ASSIGN)) return true;
    return false;
  }

  private boolean jj_3R_MemberSelector_4647_3_105()
 {
    if (jj_scan_token(DOT)) return true;
    if (jj_3R_TypeArguments_3571_3_92()) return true;
    if (jj_scan_token(IDENTIFIER)) return true;
    return false;
  }

  private boolean jj_3R_AssignmentOperator_3878_3_94()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AssignmentOperator_3879_5_150()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3882_5_151()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3885_5_152()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3888_5_153()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3891_5_154()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3894_5_155()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3897_5_156()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3900_5_157()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3903_5_158()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3906_5_159()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3909_5_160()) {
    jj_scanpos = xsp;
    if (jj_3R_AssignmentOperator_3912_5_161()) return true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6173_5_407()
 {
    if (jj_3R_Modifiers_2398_3_120()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AnnotationTypeMemberDeclaration_6178_9_414()) {
    jj_scanpos = xsp;
    if (jj_3R_AnnotationTypeMemberDeclaration_6197_9_415()) {
    jj_scanpos = xsp;
    if (jj_3R_AnnotationTypeMemberDeclaration_6200_9_416()) {
    jj_scanpos = xsp;
    if (jj_3R_AnnotationTypeMemberDeclaration_6203_9_417()) {
    jj_scanpos = xsp;
    if (jj_3R_AnnotationTypeMemberDeclaration_6206_9_418()) return true;
    }
    }
    }
    }
    return false;
  }

  private boolean jj_3R_AnnotationTypeMemberDeclaration_6172_3_399()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_AnnotationTypeMemberDeclaration_6173_5_407()) {
    jj_scanpos = xsp;
    if (jj_3R_AnnotationTypeMemberDeclaration_6213_5_408()) return true;
    }
    return false;
  }

  private boolean jj_3R_ArrayInitializer_3096_5_311()
 {
    if (jj_scan_token(COMMA)) return true;
    return false;
  }

  private boolean jj_3R_EmptyStatement_5398_3_294()
 {
    if (jj_scan_token(SEMICOLON)) return true;
    return false;
  }

  private boolean jj_3_29()
 {
    if (jj_3R_PrimarySuffix_4746_3_102()) return true;
    return false;
  }

  private boolean jj_3R_PrimaryExpression_4626_3_63()
 {
    if (jj_3R_PrimaryPrefix_4678_3_114()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_29()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3_11()
 {
    if (jj_scan_token(COMMA)) return true;
    if (jj_3R_VariableInitializer_3047_3_86()) return true;
    return false;
  }

  private boolean jj_3R_VariableModifiers_5379_9_110()
 {
    if (jj_3R_Annotation_5922_3_119()) return true;
    return false;
  }

  private boolean jj_3R_VariableModifiers_5376_9_109()
 {
    if (jj_scan_token(FINAL)) return true;
    return false;
  }

  private boolean jj_3R_ArrayInitializer_3078_5_310()
 {
    if (jj_3R_VariableInitializer_3047_3_86()) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_11()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_ArrayInitializer_3076_3_203()
 {
    if (jj_scan_token(LBRACE)) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_ArrayInitializer_3078_5_310()) jj_scanpos = xsp;
    xsp = jj_scanpos;
    if (jj_3R_ArrayInitializer_3096_5_311()) jj_scanpos = xsp;
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3_41()
 {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_VariableModifiers_5376_9_109()) {
    jj_scanpos = xsp;
    if (jj_3R_VariableModifiers_5379_9_110()) return true;
    }
    return false;
  }

  private boolean jj_3R_AnnotationTypeBody_6139_5_394()
 {
    if (jj_3R_AnnotationTypeMemberDeclaration_6172_3_399()) return true;
    return false;
  }

  private boolean jj_3_21()
 {
    if (jj_3R_AssignmentOperator_3878_3_94()) return true;
    if (jj_3R_Expression_3834_3_95()) return true;
    return false;
  }

  private boolean jj_3R_VariableModifiers_5372_3_108()
 {
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_41()) { jj_scanpos = xsp; break; }
    }
    return false;
  }

  private boolean jj_3R_CastExpression_4601_5_438()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_Type_3445_3_101()) return true;
    if (jj_scan_token(RPAREN)) return true;
    if (jj_3R_UnaryExpressionNotPlusMinus_4425_3_421()) return true;
    return false;
  }

  private boolean jj_3R_AnnotationTypeBody_6137_3_381()
 {
    if (jj_scan_token(LBRACE)) return true;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_AnnotationTypeBody_6139_5_394()) { jj_scanpos = xsp; break; }
    }
    if (jj_scan_token(RBRACE)) return true;
    return false;
  }

  private boolean jj_3_28()
 {
    if (jj_scan_token(LPAREN)) return true;
    if (jj_3R_PrimitiveType_3682_3_100()) return true;
    return false;
  }

  private boolean jj_3R_Expression_3834_3_95()
 {
    if (jj_3R_ConditionalExpression_3933_3_162()) return true;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_21()) jj_scanpos = xsp;
    return false;
  }

  /** Generated Token Manager. */
  public JTBParserTokenManager token_source;
  JavaCharStream jj_input_stream;
  /** Current token. */
  public Token token;
  /** Next token. */
  public Token jj_nt;
  private int jj_ntk;
  private Token jj_scanpos, jj_lastpos;
  private int jj_la;
  /** Whether we are looking ahead. */
  private boolean jj_lookingAhead = false;
  private boolean jj_semLA;
  private int jj_gen;
  final private int[] jj_la1 = new int[186];
  static private int[] jj_la1_0;
  static private int[] jj_la1_1;
  static private int[] jj_la1_2;
  static private int[] jj_la1_3;
  static private int[] jj_la1_4;
  static {
	   jj_la1_init_0();
	   jj_la1_init_1();
	   jj_la1_init_2();
	   jj_la1_init_3();
	   jj_la1_init_4();
	}
	private static void jj_la1_init_0() {
	   jj_la1_0 = new int[] {0xa00007e0,0x6,0x6,0x0,0xa00007e0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x2,0x0,0xa0000ffe,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffe,0x0,0x0,0x8000000,0x0,0x0,0x8000000,0x0,0x8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x0,0xa8000000,0x0,0x0,0x0,0x0,0x0,0x0,0xa8000000,0x0,0xa0000000,0xa8000000,0x0,0x0,0x0,0xa0000ffe,0xa0000ffe,0x0,0x0,0x0,0x0,0x0,0x0,0xa8000000,0x0,0x0,0x0,0xf0000ffe,0x0,0x0,0x0,0xa0000ffe,0x0,0xa0000000,0xa0000000,0x0,0x0,0xa0000000,0x0,0xa0000000,0xa0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0000ffe,0x0,0x0,0xa0000ffe,0x0,0x0,0x0,0x0,0x0,0x0,0xffe,0x0,0x0,0x0,0xa0000ffe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000ffe,0x0,0xf0000ffe,0xf0000ffe,0x0,0x0,0x0,0x0,0xa0000ffe,0x0,0xf0000ffe,0x0,0x0,0xa0000ffe,0xa0000ffe,0xa0000ffe,0xa0000ffe,0xa0000ffe,0x0,0x0,0x0,0xa0000ffe,0x0,0x0,0x0,0x0,0x0,0xa0000ffe,0x0,0xa8000000,0x0,0xa0000000,0xa8000000,};
	}
	private static void jj_la1_init_1() {
	   jj_la1_1 = new int[] {0xe140a104,0x0,0x0,0x1000,0xe140a104,0x0,0x0,0x0,0x0,0x0,0x0,0xe0002000,0xe0002000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd409104,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x2000,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x100000,0xe2802408,0x0,0x0,0xe2002000,0x800408,0xe2802408,0x800008,0x0,0x800,0x80000,0x0,0x0,0x80000,0xe2002000,0x0,0xe3c0a50c,0x0,0x0,0x0,0x0,0x800,0x0,0xe3c0a50c,0x800408,0x1408104,0xe3c0a50c,0x0,0x0,0x0,0xd409104,0xd409104,0x0,0x0,0x0,0x0,0x0,0x0,0xe340a104,0x0,0x0,0x0,0xdc5b1ac,0x0,0x0,0x0,0xd409104,0x0,0x1408104,0x1408104,0x0,0x800,0x1408104,0x800,0x1408104,0x1408104,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd409104,0x0,0x0,0xd409104,0xc001000,0x0,0x0,0x0,0x0,0xc001000,0x0,0x0,0x8001000,0x1000,0xd409104,0x0,0x0,0x0,0x0,0x0,0x4000000,0x0,0x0,0xd4591a4,0x0,0xdc5b1ac,0xdc591ac,0x0,0x2000,0x0,0x0,0xd409104,0x41,0xdc5b1ac,0x41,0x200,0xd40b104,0xd409104,0xd409104,0xd40b104,0xd409104,0x0,0x0,0x0,0xd409104,0x2,0x4000,0x0,0x0,0x0,0xd409104,0x0,0xe3c0a50c,0x40,0x1c0850c,0xe3c0a50c,};
	}
	private static void jj_la1_init_2() {
	   jj_la1_2 = new int[] {0x2002,0x4,0x4,0x90800,0x2002,0x0,0x200,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000,0xf2892,0x0,0x0,0x0,0x80000,0x0,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80000,0x0,0x0,0x80000,0x10000,0x0,0x0,0x0,0x80000,0x0,0x0,0x80000,0x0,0x0,0x0,0x0,0x444c,0x4,0x0,0x444c,0x0,0x444c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x444c,0x0,0x644e,0x0,0x0,0x0,0x0,0x0,0x0,0x644e,0x0,0x2002,0x644e,0x0,0x0,0x0,0xf2892,0xf2892,0x0,0x0,0x200,0x0,0x0,0x0,0x444e,0x0,0x0,0x200,0xfb9f3,0x0,0x0,0x90,0xf2892,0x4,0x2,0x2,0x0,0x10,0x2,0x10,0x2,0x2002,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf2892,0x0,0x0,0xf2892,0xf0890,0x0,0x0,0x0,0x0,0xf0890,0x0,0x0,0xf0800,0x800,0xf2892,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfb9f3,0x0,0xfb9f3,0xfb9f3,0x0,0x0,0x0,0x0,0xf2892,0x0,0xfb9f3,0x0,0x0,0xf2892,0xf2892,0xf2892,0xf2892,0xf2892,0x0,0x0,0x0,0xf2892,0x0,0x0,0x0,0x0,0x0,0xf2892,0x0,0x444e,0x0,0x2,0x444e,};
	}
	private static void jj_la1_init_3() {
	   jj_la1_3 = new int[] {0x1000,0x0,0x0,0x0,0x1000,0x200,0x0,0x0,0x200,0x0,0x2000,0x0,0x0,0x200,0x1000,0x1000,0x40,0x40000000,0x0,0x2000,0x10,0x10000,0x40000000,0x0,0x0,0x7806004,0x2000,0x400,0x2000,0x1000,0xa008000,0xa008000,0x50,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x40000000,0x5044,0x0,0x200,0xa008010,0xa008010,0x5044,0x4000,0x200,0x0,0x4000000,0x0,0x0,0x0,0x100,0x0,0x400,0x0,0x0,0x100,0x0,0x1000,0x0,0x0,0x200,0x200,0x0,0x0,0x200,0x1110,0x100,0x4,0x10,0x200,0x0,0x20000000,0x1110,0x0,0x1000,0x1100,0x200,0x800,0x40,0x7806014,0x7806014,0x200,0x1000,0x0,0x110,0x40,0x200,0x0,0x0,0x1000,0x0,0x1800114,0x200,0x1000,0x0,0x4,0x0,0x0,0x0,0x200,0x0,0x8000,0x0,0x0,0x0,0x200,0x800,0x8000,0x200000,0x400000,0x40000000,0x80000000,0x20000000,0x120000,0x120000,0x0,0xc1000,0xc1000,0x0,0x6000000,0x6000000,0x18000000,0x18000000,0x6000000,0x7806004,0x6000,0x6000,0x4,0x6004,0x4,0x1800000,0x1800000,0x4,0x4,0x0,0x444,0x0,0x0,0x7806004,0x200,0x1000,0x1000,0x10,0x44,0x0,0x40,0x40,0x1800114,0x10000,0x1800114,0x1800114,0x200,0x0,0x1800800,0x1800800,0x1800004,0x0,0x1800114,0x0,0x0,0x1800004,0x7806004,0x1800004,0x1800104,0x1800004,0x200,0x0,0x0,0x7806004,0x0,0x0,0x0,0x0,0x200,0x7806014,0x200,0x100,0x0,0x0,0x100,};
	}
	private static void jj_la1_init_4() {
	   jj_la1_4 = new int[] {0x40000,0x40000,0x40000,0x0,0x40000,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x20000,0x0,0x0,0x800,0x40800,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x20000,0x0,0x0,0x20000,0x20000,0x20000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60000,0x0,0x60000,0x0,0x0,0x0,0x0,0x0,0x0,0x60000,0x20000,0x40000,0x60000,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x60000,0x1000,0x0,0x0,0x60000,0x0,0x0,0x0,0x40000,0x0,0x0,0x40000,0x0,0x0,0x40000,0x0,0x0,0x40000,0x0,0xe1fe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x200,0x10000,0x0,0x0,0x1,0x1,0x0,0x40000,0x0,0x0,0x40000,0x40000,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x40000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x0,0x60000,0x40000,0x0,0x20000,0xe1fe,0xe1fe,0x40000,0x0,0x60000,0x0,0x0,0x60000,0x40000,0x40000,0x60000,0x40000,0x0,0x40000,0x40000,0x40000,0x0,0x0,0x20000,0x40000,0x0,0x60000,0x0,0x60000,0x0,0x60000,0x60000,};
	}
  final private JJCalls[] jj_2_rtns = new JJCalls[47];
  private boolean jj_rescan = false;
  private int jj_gc = 0;

  /** Constructor with InputStream. */
  public JTBParser(java.io.InputStream stream) {
	  this(stream, null);
  }
  /** Constructor with InputStream and supplied encoding */
  public JTBParser(java.io.InputStream stream, String encoding) {
	 try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
	 token_source = new JTBParserTokenManager(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 186; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Reinitialise. */
  public void ReInit(java.io.InputStream stream) {
	  ReInit(stream, null);
  }
  /** Reinitialise. */
  public void ReInit(java.io.InputStream stream, String encoding) {
	 try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
	 token_source.ReInit(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 186; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Constructor. */
  public JTBParser(java.io.Reader stream) {
	 jj_input_stream = new JavaCharStream(stream, 1, 1);
	 token_source = new JTBParserTokenManager(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 186; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Reinitialise. */
  public void ReInit(java.io.Reader stream) {
	if (jj_input_stream == null) {
	   jj_input_stream = new JavaCharStream(stream, 1, 1);
	} else {
	   jj_input_stream.ReInit(stream, 1, 1);
	}
	if (token_source == null) {
 token_source = new JTBParserTokenManager(jj_input_stream);
	}

	 token_source.ReInit(jj_input_stream);
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 186; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Constructor with generated Token Manager. */
  public JTBParser(JTBParserTokenManager tm) {
	 token_source = tm;
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 186; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  /** Reinitialise. */
  public void ReInit(JTBParserTokenManager tm) {
	 token_source = tm;
	 token = new Token();
	 jj_ntk = -1;
	 jj_gen = 0;
	 for (int i = 0; i < 186; i++) jj_la1[i] = -1;
	 for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  private Token jj_consume_token(int kind) throws ParseException {
	 Token oldToken;
	 if ((oldToken = token).next != null) token = token.next;
	 else token = token.next = token_source.getNextToken();
	 jj_ntk = -1;
	 if (token.kind == kind) {
	   jj_gen++;
	   if (++jj_gc > 100) {
		 jj_gc = 0;
		 for (int i = 0; i < jj_2_rtns.length; i++) {
		   JJCalls c = jj_2_rtns[i];
		   while (c != null) {
			 if (c.gen < jj_gen) c.first = null;
			 c = c.next;
		   }
		 }
	   }
	   return token;
	 }
	 token = oldToken;
	 jj_kind = kind;
	 throw generateParseException();
  }

  @SuppressWarnings("serial")
  static private final class LookaheadSuccess extends java.lang.Error {
    @Override
    public Throwable fillInStackTrace() {
      return this;
    }
  }
  static private final LookaheadSuccess jj_ls = new LookaheadSuccess();
  private boolean jj_scan_token(int kind) {
	 if (jj_scanpos == jj_lastpos) {
	   jj_la--;
	   if (jj_scanpos.next == null) {
		 jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
	   } else {
		 jj_lastpos = jj_scanpos = jj_scanpos.next;
	   }
	 } else {
	   jj_scanpos = jj_scanpos.next;
	 }
	 if (jj_rescan) {
	   int i = 0; Token tok = token;
	   while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
	   if (tok != null) jj_add_error_token(kind, i);
	 }
	 if (jj_scanpos.kind != kind) return true;
	 if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
	 return false;
  }


/** Get the next Token. */
  final public Token getNextToken() {
	 if (token.next != null) token = token.next;
	 else token = token.next = token_source.getNextToken();
	 jj_ntk = -1;
	 jj_gen++;
	 return token;
  }

/** Get the specific Token. */
  final public Token getToken(int index) {
	 Token t = jj_lookingAhead ? jj_scanpos : token;
	 for (int i = 0; i < index; i++) {
	   if (t.next != null) t = t.next;
	   else t = t.next = token_source.getNextToken();
	 }
	 return t;
  }

  private int jj_ntk_f() {
	 if ((jj_nt=token.next) == null)
	   return (jj_ntk = (token.next=token_source.getNextToken()).kind);
	 else
	   return (jj_ntk = jj_nt.kind);
  }

  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
  private int[] jj_expentry;
  private int jj_kind = -1;
  private int[] jj_lasttokens = new int[100];
  private int jj_endpos;

  private void jj_add_error_token(int kind, int pos) {
	 if (pos >= 100) {
		return;
	 }

	 if (pos == jj_endpos + 1) {
	   jj_lasttokens[jj_endpos++] = kind;
	 } else if (jj_endpos != 0) {
	   jj_expentry = new int[jj_endpos];

	   for (int i = 0; i < jj_endpos; i++) {
		 jj_expentry[i] = jj_lasttokens[i];
	   }

	   for (int[] oldentry : jj_expentries) {
		 if (oldentry.length == jj_expentry.length) {
		   boolean isMatched = true;

		   for (int i = 0; i < jj_expentry.length; i++) {
			 if (oldentry[i] != jj_expentry[i]) {
			   isMatched = false;
			   break;
			 }

		   }
		   if (isMatched) {
			 jj_expentries.add(jj_expentry);
			 break;
		   }
		 }
	   }

	   if (pos != 0) {
		 jj_lasttokens[(jj_endpos = pos) - 1] = kind;
	   }
	 }
  }

  /** Generate ParseException. */
  public ParseException generateParseException() {
	 jj_expentries.clear();
	 boolean[] la1tokens = new boolean[149];
	 if (jj_kind >= 0) {
	   la1tokens[jj_kind] = true;
	   jj_kind = -1;
	 }
	 for (int i = 0; i < 186; i++) {
	   if (jj_la1[i] == jj_gen) {
		 for (int j = 0; j < 32; j++) {
		   if ((jj_la1_0[i] & (1<<j)) != 0) {
			 la1tokens[j] = true;
		   }
		   if ((jj_la1_1[i] & (1<<j)) != 0) {
			 la1tokens[32+j] = true;
		   }
		   if ((jj_la1_2[i] & (1<<j)) != 0) {
			 la1tokens[64+j] = true;
		   }
		   if ((jj_la1_3[i] & (1<<j)) != 0) {
			 la1tokens[96+j] = true;
		   }
		   if ((jj_la1_4[i] & (1<<j)) != 0) {
			 la1tokens[128+j] = true;
		   }
		 }
	   }
	 }
	 for (int i = 0; i < 149; i++) {
	   if (la1tokens[i]) {
		 jj_expentry = new int[1];
		 jj_expentry[0] = i;
		 jj_expentries.add(jj_expentry);
	   }
	 }
	 jj_endpos = 0;
	 jj_rescan_token();
	 jj_add_error_token(0, 0);
	 int[][] exptokseq = new int[jj_expentries.size()][];
	 for (int i = 0; i < jj_expentries.size(); i++) {
	   exptokseq[i] = jj_expentries.get(i);
	 }
	 return new ParseException(token, exptokseq, tokenImage);
  }

  private boolean trace_enabled;

/** Trace enabled. */
  final public boolean trace_enabled() {
	 return trace_enabled;
  }

  /** Enable tracing. */
  final public void enable_tracing() {
  }

  /** Disable tracing. */
  final public void disable_tracing() {
  }

  private void jj_rescan_token() {
	 jj_rescan = true;
	 for (int i = 0; i < 47; i++) {
	   try {
		 JJCalls p = jj_2_rtns[i];

		 do {
		   if (p.gen > jj_gen) {
			 jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
			 switch (i) {
			   case 0: jj_3_1(); break;
			   case 1: jj_3_2(); break;
			   case 2: jj_3_3(); break;
			   case 3: jj_3_4(); break;
			   case 4: jj_3_5(); break;
			   case 5: jj_3_6(); break;
			   case 6: jj_3_7(); break;
			   case 7: jj_3_8(); break;
			   case 8: jj_3_9(); break;
			   case 9: jj_3_10(); break;
			   case 10: jj_3_11(); break;
			   case 11: jj_3_12(); break;
			   case 12: jj_3_13(); break;
			   case 13: jj_3_14(); break;
			   case 14: jj_3_15(); break;
			   case 15: jj_3_16(); break;
			   case 16: jj_3_17(); break;
			   case 17: jj_3_18(); break;
			   case 18: jj_3_19(); break;
			   case 19: jj_3_20(); break;
			   case 20: jj_3_21(); break;
			   case 21: jj_3_22(); break;
			   case 22: jj_3_23(); break;
			   case 23: jj_3_24(); break;
			   case 24: jj_3_25(); break;
			   case 25: jj_3_26(); break;
			   case 26: jj_3_27(); break;
			   case 27: jj_3_28(); break;
			   case 28: jj_3_29(); break;
			   case 29: jj_3_30(); break;
			   case 30: jj_3_31(); break;
			   case 31: jj_3_32(); break;
			   case 32: jj_3_33(); break;
			   case 33: jj_3_34(); break;
			   case 34: jj_3_35(); break;
			   case 35: jj_3_36(); break;
			   case 36: jj_3_37(); break;
			   case 37: jj_3_38(); break;
			   case 38: jj_3_39(); break;
			   case 39: jj_3_40(); break;
			   case 40: jj_3_41(); break;
			   case 41: jj_3_42(); break;
			   case 42: jj_3_43(); break;
			   case 43: jj_3_44(); break;
			   case 44: jj_3_45(); break;
			   case 45: jj_3_46(); break;
			   case 46: jj_3_47(); break;
			 }
		   }
		   p = p.next;
		 } while (p != null);

		 } catch(LookaheadSuccess ls) { }
	 }
	 jj_rescan = false;
  }

  private void jj_save(int index, int xla) {
	 JJCalls p = jj_2_rtns[index];
	 while (p.gen > jj_gen) {
	   if (p.next == null) { p = p.next = new JJCalls(); break; }
	   p = p.next;
	 }

	 p.gen = jj_gen + xla - jj_la; 
	 p.first = token;
	 p.arg = xla;
  }

  static final class JJCalls {
	 int gen;
	 Token first;
	 int arg;
	 JJCalls next;
  }

}
