/* Generated By:JavaCC: Do not edit this line. CParser.java */

package jtb.cparser;

import java.util.*;
import jtb.cparser.syntaxtree.*;
import java.util.Vector;
import jtb.cparser.customvisitor.*;
import java.io.IOException;


@SuppressWarnings({"unchecked","rawtypes"})
public class CParser implements CParserConstants {
   private static Hashtable<String, Boolean> types = new Hashtable<String, Boolean>();
   private static Stack<Boolean> typedefParsingStack = new Stack<Boolean>();
   private static boolean isType(String type)
   {
      if ( types.get(type) != null )
         {
            return true;
         }
      return false;
   }
   private static void addType(String type)
   {
      types.put(type,Boolean.TRUE);
   }
   private static void printTypes()
   {
      Enumeration e = types.keys();
      while ( e.hasMoreElements() )
         {
            System.out.println(e.nextElement());
         }
   }
   public static void main(String args[])
   {
      CParser parser;
      types.put("__signed__",Boolean.TRUE);
      types.put("__const",Boolean.TRUE);
      types.put("__inline__",Boolean.TRUE);
      types.put("__signed",Boolean.TRUE);
      types.put("__attribute__", Boolean.TRUE);
      types.put("__extension__", Boolean.TRUE);

      if ( args.length == 0 )
      {
          System.out.println("C Parser Version 0.1Alpha:  Reading from standard input . . .");
         parser = new CParser(System.in);
      }
      else
         if ( args.length == 1 )
         {
             System.out.println("C Parser Version 0.1Alpha:  Reading from file " + args[0]+ " . . .");
            try
            {
               parser = new CParser(new java.io.FileInputStream(args[0]));
            }
            catch (java.io.FileNotFoundException e)
            {
               System.out.println("C Parser Version 0.1:  File " + args[0]+ " not found.");
               return;
            }
         }
         else
         {
             System.out.println("C Parser Version 0.1Alpha:  Usage is one of:");
             System.out.println("         java CreateSpinfoC < inputfile");
             System.out.println("OR");
             System.out.println("         java CreateSpinfoC inputfile");
            return;
         }
      try
      {
         CParser.TranslationUnit();
         System.out.println("C Parser Version 0.1Alpha:  C program parsed successfully.");

      }
      catch (ParseException e)
         {
            System.out.println("C Parser Version 0.1Alpha:  Encountered errors during parse.");
         }
   }

  static public final TranslationUnit TranslationUnit() throws ParseException {
   NodeList n0 = new NodeList();
   ExternalDeclaration n1;

   {
   }
    label_1:
    while (true) {
      n1 = ExternalDeclaration();
        n0.addNode(n1);
      if (jj_2_1(1)) {
        ;
      } else {
        break label_1;
      }
    }
     n0.nodes.trimToSize();
     {if (true) return new TranslationUnit(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final ExternalDeclaration ExternalDeclaration() throws ParseException {
   NodeChoice n0;
   FunctionDefinition n1;
   Declaration n2;

   {
   }
    if (jj_2_2(2147483647)) {
      n1 = FunctionDefinition();
           n0 = new NodeChoice(n1, 0);
    } else if (jj_2_3(1)) {
      n2 = Declaration();
           n0 = new NodeChoice(n2, 1);
    } else {
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new ExternalDeclaration(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final FunctionDefinition FunctionDefinition() throws ParseException {
   NodeOptional n0 = new NodeOptional();
   DeclarationSpecifiers n1;
   Declarator n2;
   NodeOptional n3 = new NodeOptional();
   DeclarationList n4;
   CompoundStatement n5;

   {
   }
    if (jj_2_4(2147483647)) {
      n1 = DeclarationSpecifiers();
        n0.addNode(n1);
    } else {
      ;
    }
    n2 = Declarator();
    if (jj_2_5(1)) {
      n4 = DeclarationList();
        n3.addNode(n4);
    } else {
      ;
    }
    n5 = CompoundStatement();
     {if (true) return new FunctionDefinition(n0,n2,n3,n5);}
    throw new Error("Missing return statement in function");
  }

  static public final Declaration Declaration() throws ParseException {
   DeclarationSpecifiers n0;
   NodeOptional n1 = new NodeOptional();
   InitDeclaratorList n2;
   NodeToken n3;
   Token n4;

   {
   }
    n0 = DeclarationSpecifiers();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
    case 56:
    case 60:
      n2 = InitDeclaratorList();
        n1.addNode(n2);
      break;
    default:
      jj_la1[0] = jj_gen;
      ;
    }
    n4 = jj_consume_token(50);
            n3 = JTBToolkit.makeNodeToken(n4);
     {if (true) return new Declaration(n0,n1,n3);}
    throw new Error("Missing return statement in function");
  }

  static public final DeclarationList DeclarationList() throws ParseException {
   NodeList n0 = new NodeList();
   Declaration n1;

   {
   }
    label_2:
    while (true) {
      n1 = Declaration();
        n0.addNode(n1);
      if (jj_2_6(2147483647)) {
        ;
      } else {
        break label_2;
      }
    }
     n0.nodes.trimToSize();
     {if (true) return new DeclarationList(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final DeclarationSpecifiers DeclarationSpecifiers() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   StorageClassSpecifier n2;
   NodeOptional n3 = new NodeOptional();
   DeclarationSpecifiers n4;
   NodeSequence n5;
   TypeSpecifier n6;
   NodeOptional n7 = new NodeOptional();
   DeclarationSpecifiers n8;
   NodeSequence n9;
   TypeQualifier n10;
   NodeOptional n11 = new NodeOptional();
   DeclarationSpecifiers n12;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case REGISTER:
    case TYPEDEF:
    case EXTERN:
    case STATIC:
    case AUTO:
        n1 = new NodeSequence(2);
      n2 = StorageClassSpecifier();
        n1.addNode(n2);
      if (jj_2_7(2147483647)) {
        n4 = DeclarationSpecifiers();
           n3.addNode(n4);
      } else {
        ;
      }
        n1.addNode(n3);
        n0 = new NodeChoice(n1, 0);
      break;
    default:
      jj_la1[1] = jj_gen;
      if (jj_2_10(1)) {
        n5 = new NodeSequence(2);
        n6 = TypeSpecifier();
        n5.addNode(n6);
        if (jj_2_8(2147483647)) {
          n8 = DeclarationSpecifiers();
           n7.addNode(n8);
        } else {
          ;
        }
        n5.addNode(n7);
        n0 = new NodeChoice(n5, 1);
      } else {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case VOLATILE:
        case CONST:
        n9 = new NodeSequence(2);
          n10 = TypeQualifier();
        n9.addNode(n10);
          if (jj_2_9(2147483647)) {
            n12 = DeclarationSpecifiers();
           n11.addNode(n12);
          } else {
            ;
          }
        n9.addNode(n11);
        n0 = new NodeChoice(n9, 2);
          break;
        default:
          jj_la1[2] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
    }
     {if (true) return new DeclarationSpecifiers(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final StorageClassSpecifier StorageClassSpecifier() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeToken n3;
   Token n4;
   NodeToken n5;
   Token n6;
   NodeToken n7;
   Token n8;
   NodeToken n9;
   Token n10;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case AUTO:
      n2 = jj_consume_token(AUTO);
                     n1 = JTBToolkit.makeNodeToken(n2);
           n0 = new NodeChoice(n1, 0);
      break;
    case REGISTER:
      n4 = jj_consume_token(REGISTER);
                         n3 = JTBToolkit.makeNodeToken(n4);
           n0 = new NodeChoice(n3, 1);
      break;
    case STATIC:
      n6 = jj_consume_token(STATIC);
                       n5 = JTBToolkit.makeNodeToken(n6);
           n0 = new NodeChoice(n5, 2);
      break;
    case EXTERN:
      n8 = jj_consume_token(EXTERN);
                       n7 = JTBToolkit.makeNodeToken(n8);
           n0 = new NodeChoice(n7, 3);
      break;
    case TYPEDEF:
      n10 = jj_consume_token(TYPEDEF);
                         n9 = JTBToolkit.makeNodeToken(n10);
            typedefParsingStack.push(Boolean.TRUE);
           n0 = new NodeChoice(n9, 4);
      break;
    default:
      jj_la1[3] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new StorageClassSpecifier(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final TypeSpecifier TypeSpecifier() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeToken n3;
   Token n4;
   NodeToken n5;
   Token n6;
   NodeToken n7;
   Token n8;
   NodeToken n9;
   Token n10;
   NodeToken n11;
   Token n12;
   NodeToken n13;
   Token n14;
   NodeToken n15;
   Token n16;
   NodeToken n17;
   Token n18;
   StructOrUnionSpecifier n19;
   EnumSpecifier n20;
   TypedefName n21;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case VOID:
      n2 = jj_consume_token(VOID);
                     n1 = JTBToolkit.makeNodeToken(n2);
           n0 = new NodeChoice(n1, 0);
      break;
    case CHAR:
      n4 = jj_consume_token(CHAR);
                     n3 = JTBToolkit.makeNodeToken(n4);
           n0 = new NodeChoice(n3, 1);
      break;
    case SHORT:
      n6 = jj_consume_token(SHORT);
                      n5 = JTBToolkit.makeNodeToken(n6);
           n0 = new NodeChoice(n5, 2);
      break;
    case INT:
      n8 = jj_consume_token(INT);
                    n7 = JTBToolkit.makeNodeToken(n8);
           n0 = new NodeChoice(n7, 3);
      break;
    case LONG:
      n10 = jj_consume_token(LONG);
                      n9 = JTBToolkit.makeNodeToken(n10);
           n0 = new NodeChoice(n9, 4);
      break;
    case FLOAT:
      n12 = jj_consume_token(FLOAT);
                       n11 = JTBToolkit.makeNodeToken(n12);
           n0 = new NodeChoice(n11, 5);
      break;
    case DOUBLE:
      n14 = jj_consume_token(DOUBLE);
                        n13 = JTBToolkit.makeNodeToken(n14);
           n0 = new NodeChoice(n13, 6);
      break;
    case SIGNED:
      n16 = jj_consume_token(SIGNED);
                        n15 = JTBToolkit.makeNodeToken(n16);
           n0 = new NodeChoice(n15, 7);
      break;
    case UNSIGNED:
      n18 = jj_consume_token(UNSIGNED);
                          n17 = JTBToolkit.makeNodeToken(n18);
           n0 = new NodeChoice(n17, 8);
      break;
    case STRUCT:
    case UNION:
      n19 = StructOrUnionSpecifier();
           n0 = new NodeChoice(n19, 9);
      break;
    case ENUM:
      n20 = EnumSpecifier();
           n0 = new NodeChoice(n20, 10);
      break;
    default:
      jj_la1[4] = jj_gen;
      if (isType(getToken(1).image)) {
        n21 = TypedefName();
           n0 = new NodeChoice(n21, 11);
      } else {
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new TypeSpecifier(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final TypeQualifier TypeQualifier() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeToken n3;
   Token n4;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case CONST:
      n2 = jj_consume_token(CONST);
                      n1 = JTBToolkit.makeNodeToken(n2);
           n0 = new NodeChoice(n1, 0);
      break;
    case VOLATILE:
      n4 = jj_consume_token(VOLATILE);
                         n3 = JTBToolkit.makeNodeToken(n4);
           n0 = new NodeChoice(n3, 1);
      break;
    default:
      jj_la1[5] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new TypeQualifier(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final StructOrUnionSpecifier StructOrUnionSpecifier() throws ParseException {
   StructOrUnion n0;
   NodeChoice n1;
   NodeSequence n2;
   NodeOptional n3 = new NodeOptional();
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;
   StructDeclarationList n8;
   NodeToken n9;
   Token n10;
   NodeToken n11;
   Token n12;

   {
   }
      typedefParsingStack.push(Boolean.FALSE);
    n0 = StructOrUnion();
    if (jj_2_11(3)) {
           n2 = new NodeSequence(5);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IDENTIFIER:
        n5 = jj_consume_token(IDENTIFIER);
                              n4 = JTBToolkit.makeNodeToken(n5);
              n3.addNode(n4);
        break;
      default:
        jj_la1[6] = jj_gen;
        ;
      }
           n2.addNode(n3);
      n7 = jj_consume_token(51);
                  n6 = JTBToolkit.makeNodeToken(n7);
           n2.addNode(n6);
      n8 = StructDeclarationList();
           n2.addNode(n8);
      n10 = jj_consume_token(52);
                   n9 = JTBToolkit.makeNodeToken(n10);
           n2.addNode(n9);
           n1 = new NodeChoice(n2, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IDENTIFIER:
        n12 = jj_consume_token(IDENTIFIER);
                            n11 = JTBToolkit.makeNodeToken(n12);
           n1 = new NodeChoice(n11, 1);
        break;
      default:
        jj_la1[7] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
      typedefParsingStack.pop();
     {if (true) return new StructOrUnionSpecifier(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final StructOrUnion StructOrUnion() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeToken n3;
   Token n4;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case STRUCT:
      n2 = jj_consume_token(STRUCT);
                       n1 = JTBToolkit.makeNodeToken(n2);
           n0 = new NodeChoice(n1, 0);
      break;
    case UNION:
      n4 = jj_consume_token(UNION);
                      n3 = JTBToolkit.makeNodeToken(n4);
           n0 = new NodeChoice(n3, 1);
      break;
    default:
      jj_la1[8] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new StructOrUnion(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final StructDeclarationList StructDeclarationList() throws ParseException {
   NodeList n0 = new NodeList();
   StructDeclaration n1;

   {
   }
    label_3:
    while (true) {
      n1 = StructDeclaration();
        n0.addNode(n1);
      if (jj_2_12(1)) {
        ;
      } else {
        break label_3;
      }
    }
     n0.nodes.trimToSize();
     {if (true) return new StructDeclarationList(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final InitDeclaratorList InitDeclaratorList() throws ParseException {
   InitDeclarator n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   InitDeclarator n5;

   {
   }
    n0 = InitDeclarator();
    label_4:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 53:
        ;
        break;
      default:
        jj_la1[9] = jj_gen;
        break label_4;
      }
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = InitDeclarator();
        n2.addNode(n5);
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
      if ( !(typedefParsingStack.empty()) && (typedefParsingStack.peek()).booleanValue() )
      {
         typedefParsingStack.pop();
      }
     {if (true) return new InitDeclaratorList(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final InitDeclarator InitDeclarator() throws ParseException {
   Declarator n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   Initializer n5;

   {
   }
    n0 = Declarator();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 54:
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(54);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = Initializer();
        n2.addNode(n5);
        n1.addNode(n2);
      break;
    default:
      jj_la1[10] = jj_gen;
      ;
    }
     {if (true) return new InitDeclarator(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final StructDeclaration StructDeclaration() throws ParseException {
   SpecifierQualifierList n0;
   StructDeclaratorList n1;
   NodeToken n2;
   Token n3;

   {
   }
    n0 = SpecifierQualifierList();
    n1 = StructDeclaratorList();
    n3 = jj_consume_token(50);
            n2 = JTBToolkit.makeNodeToken(n3);
     {if (true) return new StructDeclaration(n0,n1,n2);}
    throw new Error("Missing return statement in function");
  }

  static public final SpecifierQualifierList SpecifierQualifierList() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   TypeSpecifier n2;
   NodeOptional n3 = new NodeOptional();
   SpecifierQualifierList n4;
   NodeSequence n5;
   TypeQualifier n6;
   NodeOptional n7 = new NodeOptional();
   SpecifierQualifierList n8;

   {
   }
    if (jj_2_15(1)) {
        n1 = new NodeSequence(2);
      n2 = TypeSpecifier();
        n1.addNode(n2);
      if (jj_2_13(2147483647)) {
        n4 = SpecifierQualifierList();
           n3.addNode(n4);
      } else {
        ;
      }
        n1.addNode(n3);
        n0 = new NodeChoice(n1, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case VOLATILE:
      case CONST:
        n5 = new NodeSequence(2);
        n6 = TypeQualifier();
        n5.addNode(n6);
        if (jj_2_14(2147483647)) {
          n8 = SpecifierQualifierList();
           n7.addNode(n8);
        } else {
          ;
        }
        n5.addNode(n7);
        n0 = new NodeChoice(n5, 1);
        break;
      default:
        jj_la1[11] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new SpecifierQualifierList(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final StructDeclaratorList StructDeclaratorList() throws ParseException {
   StructDeclarator n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   StructDeclarator n5;

   {
   }
    n0 = StructDeclarator();
    label_5:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 53:
        ;
        break;
      default:
        jj_la1[12] = jj_gen;
        break label_5;
      }
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = StructDeclarator();
        n2.addNode(n5);
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
     {if (true) return new StructDeclaratorList(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final StructDeclarator StructDeclarator() throws ParseException {
   NodeChoice n0;
   Declarator n1;
   NodeSequence n2;
   NodeOptional n3 = new NodeOptional();
   Declarator n4;
   NodeToken n5;
   Token n6;
   ConstantExpression n7;

   {
   }
    if (jj_2_16(3)) {
      n1 = Declarator();
           n0 = new NodeChoice(n1, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IDENTIFIER:
      case 55:
      case 56:
      case 60:
           n2 = new NodeSequence(3);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case IDENTIFIER:
        case 56:
        case 60:
          n4 = Declarator();
              n3.addNode(n4);
          break;
        default:
          jj_la1[13] = jj_gen;
          ;
        }
           n2.addNode(n3);
        n6 = jj_consume_token(55);
                  n5 = JTBToolkit.makeNodeToken(n6);
           n2.addNode(n5);
        n7 = ConstantExpression();
           n2.addNode(n7);
           n0 = new NodeChoice(n2, 1);
        break;
      default:
        jj_la1[14] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new StructDeclarator(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final EnumSpecifier EnumSpecifier() throws ParseException {
   NodeToken n0;
   Token n1;
   NodeChoice n2;
   NodeSequence n3;
   NodeOptional n4 = new NodeOptional();
   NodeToken n5;
   Token n6;
   NodeToken n7;
   Token n8;
   EnumeratorList n9;
   NodeToken n10;
   Token n11;
   NodeToken n12;
   Token n13;

   {
   }
    n1 = jj_consume_token(ENUM);
               n0 = JTBToolkit.makeNodeToken(n1);
    if (jj_2_17(3)) {
           n3 = new NodeSequence(5);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IDENTIFIER:
        n6 = jj_consume_token(IDENTIFIER);
                              n5 = JTBToolkit.makeNodeToken(n6);
              n4.addNode(n5);
        break;
      default:
        jj_la1[15] = jj_gen;
        ;
      }
           n3.addNode(n4);
      n8 = jj_consume_token(51);
                  n7 = JTBToolkit.makeNodeToken(n8);
           n3.addNode(n7);
      n9 = EnumeratorList();
           n3.addNode(n9);
      n11 = jj_consume_token(52);
                   n10 = JTBToolkit.makeNodeToken(n11);
           n3.addNode(n10);
           n2 = new NodeChoice(n3, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case IDENTIFIER:
        n13 = jj_consume_token(IDENTIFIER);
                            n12 = JTBToolkit.makeNodeToken(n13);
           n2 = new NodeChoice(n12, 1);
        break;
      default:
        jj_la1[16] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new EnumSpecifier(n0,n2);}
    throw new Error("Missing return statement in function");
  }

  static public final EnumeratorList EnumeratorList() throws ParseException {
   Enumerator n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   Enumerator n5;

   {
   }
    n0 = Enumerator();
    label_6:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 53:
        ;
        break;
      default:
        jj_la1[17] = jj_gen;
        break label_6;
      }
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = Enumerator();
        n2.addNode(n5);
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
     {if (true) return new EnumeratorList(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final Enumerator Enumerator() throws ParseException {
   NodeToken n0;
   Token n1;
   NodeOptional n2 = new NodeOptional();
   NodeSequence n3;
   NodeToken n4;
   Token n5;
   ConstantExpression n6;

   {
   }
    n1 = jj_consume_token(IDENTIFIER);
                     n0 = JTBToolkit.makeNodeToken(n1);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 54:
        n3 = new NodeSequence(2);
      n5 = jj_consume_token(54);
               n4 = JTBToolkit.makeNodeToken(n5);
        n3.addNode(n4);
      n6 = ConstantExpression();
        n3.addNode(n6);
        n2.addNode(n3);
      break;
    default:
      jj_la1[18] = jj_gen;
      ;
    }
     {if (true) return new Enumerator(n0,n2);}
    throw new Error("Missing return statement in function");
  }

  static public final Declarator Declarator() throws ParseException {
   NodeOptional n0 = new NodeOptional();
   Pointer n1;
   DirectDeclarator n2;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 60:
      n1 = Pointer();
        n0.addNode(n1);
      break;
    default:
      jj_la1[19] = jj_gen;
      ;
    }
    n2 = DirectDeclarator();
     {if (true) return new Declarator(n0,n2);}
    throw new Error("Missing return statement in function");
  }

  static public final DirectDeclarator DirectDeclarator() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeSequence n3;
   NodeToken n4;
   Token n5;
   Declarator n6;
   NodeToken n7;
   Token n8;
   NodeListOptional n9 = new NodeListOptional();
   NodeChoice n10;
   NodeSequence n11;
   NodeToken n12;
   Token n13;
   NodeOptional n14;
   ConstantExpression n15;
   NodeToken n16;
   Token n17;
   NodeSequence n18;
   NodeToken n19;
   Token n20;
   ParameterTypeList n21;
   NodeToken n22;
   Token n23;
   NodeSequence n24;
   NodeToken n25;
   Token n26;
   NodeOptional n27;
   IdentifierList n28;
   NodeToken n29;
   Token n30;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
      n2 = jj_consume_token(IDENTIFIER);
                           n1 = JTBToolkit.makeNodeToken(n2);
            Token t;
            t = n2;
            if ( !(typedefParsingStack.empty()) && (typedefParsingStack.peek()).booleanValue() )
            {
               addType(t.image);
            }
           n0 = new NodeChoice(n1, 0);
      break;
    case 56:
           n3 = new NodeSequence(3);
      n5 = jj_consume_token(56);
                  n4 = JTBToolkit.makeNodeToken(n5);
           n3.addNode(n4);
      n6 = Declarator();
           n3.addNode(n6);
      n8 = jj_consume_token(57);
                  n7 = JTBToolkit.makeNodeToken(n8);
           n3.addNode(n7);
           n0 = new NodeChoice(n3, 1);
      break;
    default:
      jj_la1[20] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
    label_7:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 56:
      case 58:
        ;
        break;
      default:
        jj_la1[21] = jj_gen;
        break label_7;
      }
        n14 = new NodeOptional();
        n27 = new NodeOptional();
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 58:
           n11 = new NodeSequence(3);
        n13 = jj_consume_token(58);
                   n12 = JTBToolkit.makeNodeToken(n13);
           n11.addNode(n12);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case SIZEOF:
        case IDENTIFIER:
        case 56:
        case 60:
        case 77:
        case 86:
        case 87:
        case 90:
        case 91:
        case 92:
        case 93:
          n15 = ConstantExpression();
              n14.addNode(n15);
          break;
        default:
          jj_la1[22] = jj_gen;
          ;
        }
           n11.addNode(n14);
        n17 = jj_consume_token(59);
                   n16 = JTBToolkit.makeNodeToken(n17);
           n11.addNode(n16);
           n10 = new NodeChoice(n11, 0);
        break;
      default:
        jj_la1[24] = jj_gen;
        if (jj_2_18(3)) {
           n18 = new NodeSequence(4);
          n20 = jj_consume_token(56);
                   n19 = JTBToolkit.makeNodeToken(n20);
           n18.addNode(n19);
          n21 = ParameterTypeList();
           n18.addNode(n21);
          n23 = jj_consume_token(57);
                   n22 = JTBToolkit.makeNodeToken(n23);
           n18.addNode(n22);
           n10 = new NodeChoice(n18, 1);
        } else {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case 56:
           n24 = new NodeSequence(3);
            n26 = jj_consume_token(56);
                   n25 = JTBToolkit.makeNodeToken(n26);
           n24.addNode(n25);
            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
            case IDENTIFIER:
              n28 = IdentifierList();
              n27.addNode(n28);
              break;
            default:
              jj_la1[23] = jj_gen;
              ;
            }
           n24.addNode(n27);
            n30 = jj_consume_token(57);
                   n29 = JTBToolkit.makeNodeToken(n30);
           n24.addNode(n29);
           n10 = new NodeChoice(n24, 2);
            break;
          default:
            jj_la1[25] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
      }
        n9.addNode(n10);
    }
     n9.nodes.trimToSize();
     {if (true) return new DirectDeclarator(n0,n9);}
    throw new Error("Missing return statement in function");
  }

  static public final Pointer Pointer() throws ParseException {
   NodeToken n0;
   Token n1;
   NodeOptional n2 = new NodeOptional();
   TypeQualifierList n3;
   NodeOptional n4 = new NodeOptional();
   Pointer n5;

   {
   }
    n1 = jj_consume_token(60);
            n0 = JTBToolkit.makeNodeToken(n1);
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case VOLATILE:
    case CONST:
      n3 = TypeQualifierList();
        n2.addNode(n3);
      break;
    default:
      jj_la1[26] = jj_gen;
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 60:
      n5 = Pointer();
        n4.addNode(n5);
      break;
    default:
      jj_la1[27] = jj_gen;
      ;
    }
     {if (true) return new Pointer(n0,n2,n4);}
    throw new Error("Missing return statement in function");
  }

  static public final TypeQualifierList TypeQualifierList() throws ParseException {
   NodeList n0 = new NodeList();
   TypeQualifier n1;

   {
   }
    label_8:
    while (true) {
      n1 = TypeQualifier();
        n0.addNode(n1);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case VOLATILE:
      case CONST:
        ;
        break;
      default:
        jj_la1[28] = jj_gen;
        break label_8;
      }
    }
     n0.nodes.trimToSize();
     {if (true) return new TypeQualifierList(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final ParameterTypeList ParameterTypeList() throws ParseException {
   ParameterList n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   NodeToken n5;
   Token n6;

   {
   }
    n0 = ParameterList();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 53:
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n6 = jj_consume_token(61);
                 n5 = JTBToolkit.makeNodeToken(n6);
        n2.addNode(n5);
        n1.addNode(n2);
      break;
    default:
      jj_la1[29] = jj_gen;
      ;
    }
     {if (true) return new ParameterTypeList(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final ParameterList ParameterList() throws ParseException {
   ParameterDeclaration n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   ParameterDeclaration n5;

   {
   }
    n0 = ParameterDeclaration();
    label_9:
    while (true) {
      if (jj_2_19(2)) {
        ;
      } else {
        break label_9;
      }
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = ParameterDeclaration();
        n2.addNode(n5);
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
     {if (true) return new ParameterList(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final ParameterDeclaration ParameterDeclaration() throws ParseException {
   DeclarationSpecifiers n0;
   NodeChoice n1;
   Declarator n2;
   NodeOptional n3 = new NodeOptional();
   AbstractDeclarator n4;

   {
   }
    n0 = DeclarationSpecifiers();
    if (jj_2_20(2147483647)) {
      n2 = Declarator();
           n1 = new NodeChoice(n2, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 56:
      case 58:
      case 60:
        n4 = AbstractDeclarator();
              n3.addNode(n4);
        break;
      default:
        jj_la1[30] = jj_gen;
        ;
      }
           n1 = new NodeChoice(n3, 1);
    }
     {if (true) return new ParameterDeclaration(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final IdentifierList IdentifierList() throws ParseException {
   NodeToken n0;
   Token n1;
   NodeListOptional n2 = new NodeListOptional();
   NodeSequence n3;
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;

   {
   }
    n1 = jj_consume_token(IDENTIFIER);
                     n0 = JTBToolkit.makeNodeToken(n1);
    label_10:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 53:
        ;
        break;
      default:
        jj_la1[31] = jj_gen;
        break label_10;
      }
        n3 = new NodeSequence(2);
      n5 = jj_consume_token(53);
               n4 = JTBToolkit.makeNodeToken(n5);
        n3.addNode(n4);
      n7 = jj_consume_token(IDENTIFIER);
                        n6 = JTBToolkit.makeNodeToken(n7);
        n3.addNode(n6);
        n2.addNode(n3);
    }
     n2.nodes.trimToSize();
     {if (true) return new IdentifierList(n0,n2);}
    throw new Error("Missing return statement in function");
  }

  static public final Initializer Initializer() throws ParseException {
   NodeChoice n0;
   AssignmentExpression n1;
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   InitializerList n5;
   NodeOptional n6 = new NodeOptional();
   NodeToken n7;
   Token n8;
   NodeToken n9;
   Token n10;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case SIZEOF:
    case IDENTIFIER:
    case 56:
    case 60:
    case 77:
    case 86:
    case 87:
    case 90:
    case 91:
    case 92:
    case 93:
      n1 = AssignmentExpression();
           n0 = new NodeChoice(n1, 0);
      break;
    case 51:
           n2 = new NodeSequence(4);
      n4 = jj_consume_token(51);
                  n3 = JTBToolkit.makeNodeToken(n4);
           n2.addNode(n3);
      n5 = InitializerList();
           n2.addNode(n5);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 53:
        n8 = jj_consume_token(53);
                     n7 = JTBToolkit.makeNodeToken(n8);
              n6.addNode(n7);
        break;
      default:
        jj_la1[32] = jj_gen;
        ;
      }
           n2.addNode(n6);
      n10 = jj_consume_token(52);
                   n9 = JTBToolkit.makeNodeToken(n10);
           n2.addNode(n9);
           n0 = new NodeChoice(n2, 1);
      break;
    default:
      jj_la1[33] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new Initializer(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final InitializerList InitializerList() throws ParseException {
   Initializer n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   Initializer n5;

   {
   }
    n0 = Initializer();
    label_11:
    while (true) {
      if (jj_2_21(2)) {
        ;
      } else {
        break label_11;
      }
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = Initializer();
        n2.addNode(n5);
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
     {if (true) return new InitializerList(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final TypeName TypeName() throws ParseException {
   SpecifierQualifierList n0;
   NodeOptional n1 = new NodeOptional();
   AbstractDeclarator n2;

   {
   }
    n0 = SpecifierQualifierList();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 56:
    case 58:
    case 60:
      n2 = AbstractDeclarator();
        n1.addNode(n2);
      break;
    default:
      jj_la1[34] = jj_gen;
      ;
    }
     {if (true) return new TypeName(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final AbstractDeclarator AbstractDeclarator() throws ParseException {
   NodeChoice n0;
   Pointer n1;
   NodeSequence n2;
   NodeOptional n3 = new NodeOptional();
   Pointer n4;
   DirectAbstractDeclarator n5;

   {
   }
    if (jj_2_22(3)) {
      n1 = Pointer();
           n0 = new NodeChoice(n1, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 56:
      case 58:
      case 60:
           n2 = new NodeSequence(2);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case 60:
          n4 = Pointer();
              n3.addNode(n4);
          break;
        default:
          jj_la1[35] = jj_gen;
          ;
        }
           n2.addNode(n3);
        n5 = DirectAbstractDeclarator();
           n2.addNode(n5);
           n0 = new NodeChoice(n2, 1);
        break;
      default:
        jj_la1[36] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new AbstractDeclarator(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final DirectAbstractDeclarator DirectAbstractDeclarator() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   NodeToken n2;
   Token n3;
   AbstractDeclarator n4;
   NodeToken n5;
   Token n6;
   NodeSequence n7;
   NodeToken n8;
   Token n9;
   NodeOptional n10 = new NodeOptional();
   ConstantExpression n11;
   NodeToken n12;
   Token n13;
   NodeSequence n14;
   NodeToken n15;
   Token n16;
   NodeOptional n17 = new NodeOptional();
   ParameterTypeList n18;
   NodeToken n19;
   Token n20;
   NodeListOptional n21 = new NodeListOptional();
   NodeChoice n22;
   NodeSequence n23;
   NodeToken n24;
   Token n25;
   NodeOptional n26;
   ConstantExpression n27;
   NodeToken n28;
   Token n29;
   NodeSequence n30;
   NodeToken n31;
   Token n32;
   NodeOptional n33;
   ParameterTypeList n34;
   NodeToken n35;
   Token n36;

   {
   }
    if (jj_2_24(2)) {
           n1 = new NodeSequence(4);
      n3 = jj_consume_token(56);
                  n2 = JTBToolkit.makeNodeToken(n3);
           n1.addNode(n2);
      n4 = AbstractDeclarator();
           n1.addNode(n4);
      n6 = jj_consume_token(57);
                  n5 = JTBToolkit.makeNodeToken(n6);
           n1.addNode(n5);
           n0 = new NodeChoice(n1, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 58:
           n7 = new NodeSequence(3);
        n9 = jj_consume_token(58);
                  n8 = JTBToolkit.makeNodeToken(n9);
           n7.addNode(n8);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case SIZEOF:
        case IDENTIFIER:
        case 56:
        case 60:
        case 77:
        case 86:
        case 87:
        case 90:
        case 91:
        case 92:
        case 93:
          n11 = ConstantExpression();
              n10.addNode(n11);
          break;
        default:
          jj_la1[37] = jj_gen;
          ;
        }
           n7.addNode(n10);
        n13 = jj_consume_token(59);
                   n12 = JTBToolkit.makeNodeToken(n13);
           n7.addNode(n12);
           n0 = new NodeChoice(n7, 1);
        break;
      case 56:
           n14 = new NodeSequence(3);
        n16 = jj_consume_token(56);
                   n15 = JTBToolkit.makeNodeToken(n16);
           n14.addNode(n15);
        if (jj_2_23(1)) {
          n18 = ParameterTypeList();
              n17.addNode(n18);
        } else {
          ;
        }
           n14.addNode(n17);
        n20 = jj_consume_token(57);
                   n19 = JTBToolkit.makeNodeToken(n20);
           n14.addNode(n19);
           n0 = new NodeChoice(n14, 2);
        break;
      default:
        jj_la1[38] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
    label_12:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 56:
      case 58:
        ;
        break;
      default:
        jj_la1[39] = jj_gen;
        break label_12;
      }
        n26 = new NodeOptional();
        n33 = new NodeOptional();
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 58:
           n23 = new NodeSequence(3);
        n25 = jj_consume_token(58);
                   n24 = JTBToolkit.makeNodeToken(n25);
           n23.addNode(n24);
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case INTEGER_LITERAL:
        case FLOATING_POINT_LITERAL:
        case CHARACTER_LITERAL:
        case STRING_LITERAL:
        case SIZEOF:
        case IDENTIFIER:
        case 56:
        case 60:
        case 77:
        case 86:
        case 87:
        case 90:
        case 91:
        case 92:
        case 93:
          n27 = ConstantExpression();
              n26.addNode(n27);
          break;
        default:
          jj_la1[40] = jj_gen;
          ;
        }
           n23.addNode(n26);
        n29 = jj_consume_token(59);
                   n28 = JTBToolkit.makeNodeToken(n29);
           n23.addNode(n28);
           n22 = new NodeChoice(n23, 0);
        break;
      case 56:
           n30 = new NodeSequence(3);
        n32 = jj_consume_token(56);
                   n31 = JTBToolkit.makeNodeToken(n32);
           n30.addNode(n31);
        if (jj_2_25(1)) {
          n34 = ParameterTypeList();
              n33.addNode(n34);
        } else {
          ;
        }
           n30.addNode(n33);
        n36 = jj_consume_token(57);
                   n35 = JTBToolkit.makeNodeToken(n36);
           n30.addNode(n35);
           n22 = new NodeChoice(n30, 1);
        break;
      default:
        jj_la1[41] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        n21.addNode(n22);
    }
     n21.nodes.trimToSize();
     {if (true) return new DirectAbstractDeclarator(n0,n21);}
    throw new Error("Missing return statement in function");
  }

  static public final TypedefName TypedefName() throws ParseException {
   NodeToken n0;
   Token n1;

   {
   }
    n1 = jj_consume_token(IDENTIFIER);
                     n0 = JTBToolkit.makeNodeToken(n1);
     {if (true) return new TypedefName(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final Statement Statement() throws ParseException {
   NodeChoice n0;
   LabeledStatement n1;
   ExpressionStatement n2;
   CompoundStatement n3;
   SelectionStatement n4;
   IterationStatement n5;
   JumpStatement n6;

   {
   }
    if (jj_2_26(2)) {
      n1 = LabeledStatement();
           n0 = new NodeChoice(n1, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case SIZEOF:
      case IDENTIFIER:
      case 50:
      case 56:
      case 60:
      case 77:
      case 86:
      case 87:
      case 90:
      case 91:
      case 92:
      case 93:
        n2 = ExpressionStatement();
           n0 = new NodeChoice(n2, 1);
        break;
      case 51:
        n3 = CompoundStatement();
           n0 = new NodeChoice(n3, 2);
        break;
      case SWITCH:
      case IF:
        n4 = SelectionStatement();
           n0 = new NodeChoice(n4, 3);
        break;
      case WHILE:
      case FOR:
      case DO:
        n5 = IterationStatement();
           n0 = new NodeChoice(n5, 4);
        break;
      case CONTINUE:
      case RETURN:
      case BREAK:
      case GOTO:
        n6 = JumpStatement();
           n0 = new NodeChoice(n6, 5);
        break;
      default:
        jj_la1[42] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new Statement(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final LabeledStatement LabeledStatement() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   NodeToken n2;
   Token n3;
   NodeToken n4;
   Token n5;
   Statement n6;
   NodeSequence n7;
   NodeToken n8;
   Token n9;
   ConstantExpression n10;
   NodeToken n11;
   Token n12;
   Statement n13;
   NodeSequence n14;
   NodeToken n15;
   Token n16;
   NodeToken n17;
   Token n18;
   Statement n19;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
           n1 = new NodeSequence(3);
      n3 = jj_consume_token(IDENTIFIER);
                           n2 = JTBToolkit.makeNodeToken(n3);
           n1.addNode(n2);
      n5 = jj_consume_token(55);
                  n4 = JTBToolkit.makeNodeToken(n5);
           n1.addNode(n4);
      n6 = Statement();
           n1.addNode(n6);
           n0 = new NodeChoice(n1, 0);
      break;
    case CASE:
           n7 = new NodeSequence(4);
      n9 = jj_consume_token(CASE);
                     n8 = JTBToolkit.makeNodeToken(n9);
           n7.addNode(n8);
      n10 = ConstantExpression();
           n7.addNode(n10);
      n12 = jj_consume_token(55);
                   n11 = JTBToolkit.makeNodeToken(n12);
           n7.addNode(n11);
      n13 = Statement();
           n7.addNode(n13);
           n0 = new NodeChoice(n7, 1);
      break;
    case DFLT:
           n14 = new NodeSequence(3);
      n16 = jj_consume_token(DFLT);
                      n15 = JTBToolkit.makeNodeToken(n16);
           n14.addNode(n15);
      n18 = jj_consume_token(55);
                   n17 = JTBToolkit.makeNodeToken(n18);
           n14.addNode(n17);
      n19 = Statement();
           n14.addNode(n19);
           n0 = new NodeChoice(n14, 2);
      break;
    default:
      jj_la1[43] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new LabeledStatement(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final ExpressionStatement ExpressionStatement() throws ParseException {
   NodeOptional n0 = new NodeOptional();
   Expression n1;
   NodeToken n2;
   Token n3;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case SIZEOF:
    case IDENTIFIER:
    case 56:
    case 60:
    case 77:
    case 86:
    case 87:
    case 90:
    case 91:
    case 92:
    case 93:
      n1 = Expression();
        n0.addNode(n1);
      break;
    default:
      jj_la1[44] = jj_gen;
      ;
    }
    n3 = jj_consume_token(50);
            n2 = JTBToolkit.makeNodeToken(n3);
     {if (true) return new ExpressionStatement(n0,n2);}
    throw new Error("Missing return statement in function");
  }

  static public final CompoundStatement CompoundStatement() throws ParseException {
   NodeToken n0;
   Token n1;
   NodeOptional n2 = new NodeOptional();
   DeclarationList n3;
   NodeOptional n4 = new NodeOptional();
   StatementList n5;
   NodeToken n6;
   Token n7;

   {
   }
    n1 = jj_consume_token(51);
            n0 = JTBToolkit.makeNodeToken(n1);
    if (jj_2_27(2147483647)) {
      n3 = DeclarationList();
        n2.addNode(n3);
    } else {
      ;
    }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
    case CONTINUE:
    case DFLT:
    case SIZEOF:
    case SWITCH:
    case RETURN:
    case WHILE:
    case BREAK:
    case CASE:
    case GOTO:
    case FOR:
    case IF:
    case DO:
    case IDENTIFIER:
    case 50:
    case 51:
    case 56:
    case 60:
    case 77:
    case 86:
    case 87:
    case 90:
    case 91:
    case 92:
    case 93:
      n5 = StatementList();
        n4.addNode(n5);
      break;
    default:
      jj_la1[45] = jj_gen;
      ;
    }
    n7 = jj_consume_token(52);
            n6 = JTBToolkit.makeNodeToken(n7);
     {if (true) return new CompoundStatement(n0,n2,n4,n6);}
    throw new Error("Missing return statement in function");
  }

  static public final StatementList StatementList() throws ParseException {
   NodeList n0 = new NodeList();
   Statement n1;

   {
   }
    label_13:
    while (true) {
      n1 = Statement();
        n0.addNode(n1);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case CONTINUE:
      case DFLT:
      case SIZEOF:
      case SWITCH:
      case RETURN:
      case WHILE:
      case BREAK:
      case CASE:
      case GOTO:
      case FOR:
      case IF:
      case DO:
      case IDENTIFIER:
      case 50:
      case 51:
      case 56:
      case 60:
      case 77:
      case 86:
      case 87:
      case 90:
      case 91:
      case 92:
      case 93:
        ;
        break;
      default:
        jj_la1[46] = jj_gen;
        break label_13;
      }
    }
     n0.nodes.trimToSize();
     {if (true) return new StatementList(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final SelectionStatement SelectionStatement() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   NodeToken n2;
   Token n3;
   NodeToken n4;
   Token n5;
   Expression n6;
   NodeToken n7;
   Token n8;
   Statement n9;
   NodeOptional n10 = new NodeOptional();
   NodeSequence n11;
   NodeToken n12;
   Token n13;
   Statement n14;
   NodeSequence n15;
   NodeToken n16;
   Token n17;
   NodeToken n18;
   Token n19;
   Expression n20;
   NodeToken n21;
   Token n22;
   Statement n23;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IF:
           n1 = new NodeSequence(6);
      n3 = jj_consume_token(IF);
                   n2 = JTBToolkit.makeNodeToken(n3);
           n1.addNode(n2);
      n5 = jj_consume_token(56);
                  n4 = JTBToolkit.makeNodeToken(n5);
           n1.addNode(n4);
      n6 = Expression();
           n1.addNode(n6);
      n8 = jj_consume_token(57);
                  n7 = JTBToolkit.makeNodeToken(n8);
           n1.addNode(n7);
      n9 = Statement();
           n1.addNode(n9);
      if (jj_2_28(2)) {
              n11 = new NodeSequence(2);
        n13 = jj_consume_token(ELSE);
                         n12 = JTBToolkit.makeNodeToken(n13);
              n11.addNode(n12);
        n14 = Statement();
              n11.addNode(n14);
              n10.addNode(n11);
      } else {
        ;
      }
           n1.addNode(n10);
           n0 = new NodeChoice(n1, 0);
      break;
    case SWITCH:
           n15 = new NodeSequence(5);
      n17 = jj_consume_token(SWITCH);
                        n16 = JTBToolkit.makeNodeToken(n17);
           n15.addNode(n16);
      n19 = jj_consume_token(56);
                   n18 = JTBToolkit.makeNodeToken(n19);
           n15.addNode(n18);
      n20 = Expression();
           n15.addNode(n20);
      n22 = jj_consume_token(57);
                   n21 = JTBToolkit.makeNodeToken(n22);
           n15.addNode(n21);
      n23 = Statement();
           n15.addNode(n23);
           n0 = new NodeChoice(n15, 1);
      break;
    default:
      jj_la1[47] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new SelectionStatement(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final IterationStatement IterationStatement() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   NodeToken n2;
   Token n3;
   NodeToken n4;
   Token n5;
   Expression n6;
   NodeToken n7;
   Token n8;
   Statement n9;
   NodeSequence n10;
   NodeToken n11;
   Token n12;
   Statement n13;
   NodeToken n14;
   Token n15;
   NodeToken n16;
   Token n17;
   Expression n18;
   NodeToken n19;
   Token n20;
   NodeToken n21;
   Token n22;
   NodeSequence n23;
   NodeToken n24;
   Token n25;
   NodeToken n26;
   Token n27;
   NodeOptional n28 = new NodeOptional();
   Expression n29;
   NodeToken n30;
   Token n31;
   NodeOptional n32 = new NodeOptional();
   Expression n33;
   NodeToken n34;
   Token n35;
   NodeOptional n36 = new NodeOptional();
   Expression n37;
   NodeToken n38;
   Token n39;
   Statement n40;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case WHILE:
           n1 = new NodeSequence(5);
      n3 = jj_consume_token(WHILE);
                      n2 = JTBToolkit.makeNodeToken(n3);
           n1.addNode(n2);
      n5 = jj_consume_token(56);
                  n4 = JTBToolkit.makeNodeToken(n5);
           n1.addNode(n4);
      n6 = Expression();
           n1.addNode(n6);
      n8 = jj_consume_token(57);
                  n7 = JTBToolkit.makeNodeToken(n8);
           n1.addNode(n7);
      n9 = Statement();
           n1.addNode(n9);
           n0 = new NodeChoice(n1, 0);
      break;
    case DO:
           n10 = new NodeSequence(7);
      n12 = jj_consume_token(DO);
                    n11 = JTBToolkit.makeNodeToken(n12);
           n10.addNode(n11);
      n13 = Statement();
           n10.addNode(n13);
      n15 = jj_consume_token(WHILE);
                       n14 = JTBToolkit.makeNodeToken(n15);
           n10.addNode(n14);
      n17 = jj_consume_token(56);
                   n16 = JTBToolkit.makeNodeToken(n17);
           n10.addNode(n16);
      n18 = Expression();
           n10.addNode(n18);
      n20 = jj_consume_token(57);
                   n19 = JTBToolkit.makeNodeToken(n20);
           n10.addNode(n19);
      n22 = jj_consume_token(50);
                   n21 = JTBToolkit.makeNodeToken(n22);
           n10.addNode(n21);
           n0 = new NodeChoice(n10, 1);
      break;
    case FOR:
           n23 = new NodeSequence(9);
      n25 = jj_consume_token(FOR);
                     n24 = JTBToolkit.makeNodeToken(n25);
           n23.addNode(n24);
      n27 = jj_consume_token(56);
                   n26 = JTBToolkit.makeNodeToken(n27);
           n23.addNode(n26);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case SIZEOF:
      case IDENTIFIER:
      case 56:
      case 60:
      case 77:
      case 86:
      case 87:
      case 90:
      case 91:
      case 92:
      case 93:
        n29 = Expression();
              n28.addNode(n29);
        break;
      default:
        jj_la1[48] = jj_gen;
        ;
      }
           n23.addNode(n28);
      n31 = jj_consume_token(50);
                   n30 = JTBToolkit.makeNodeToken(n31);
           n23.addNode(n30);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case SIZEOF:
      case IDENTIFIER:
      case 56:
      case 60:
      case 77:
      case 86:
      case 87:
      case 90:
      case 91:
      case 92:
      case 93:
        n33 = Expression();
              n32.addNode(n33);
        break;
      default:
        jj_la1[49] = jj_gen;
        ;
      }
           n23.addNode(n32);
      n35 = jj_consume_token(50);
                   n34 = JTBToolkit.makeNodeToken(n35);
           n23.addNode(n34);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case SIZEOF:
      case IDENTIFIER:
      case 56:
      case 60:
      case 77:
      case 86:
      case 87:
      case 90:
      case 91:
      case 92:
      case 93:
        n37 = Expression();
              n36.addNode(n37);
        break;
      default:
        jj_la1[50] = jj_gen;
        ;
      }
           n23.addNode(n36);
      n39 = jj_consume_token(57);
                   n38 = JTBToolkit.makeNodeToken(n39);
           n23.addNode(n38);
      n40 = Statement();
           n23.addNode(n40);
           n0 = new NodeChoice(n23, 2);
      break;
    default:
      jj_la1[51] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new IterationStatement(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final JumpStatement JumpStatement() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   NodeToken n2;
   Token n3;
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;
   NodeSequence n8;
   NodeToken n9;
   Token n10;
   NodeToken n11;
   Token n12;
   NodeSequence n13;
   NodeToken n14;
   Token n15;
   NodeToken n16;
   Token n17;
   NodeSequence n18;
   NodeToken n19;
   Token n20;
   NodeOptional n21 = new NodeOptional();
   Expression n22;
   NodeToken n23;
   Token n24;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case GOTO:
           n1 = new NodeSequence(3);
      n3 = jj_consume_token(GOTO);
                     n2 = JTBToolkit.makeNodeToken(n3);
           n1.addNode(n2);
      n5 = jj_consume_token(IDENTIFIER);
                           n4 = JTBToolkit.makeNodeToken(n5);
           n1.addNode(n4);
      n7 = jj_consume_token(50);
                  n6 = JTBToolkit.makeNodeToken(n7);
           n1.addNode(n6);
           n0 = new NodeChoice(n1, 0);
      break;
    case CONTINUE:
           n8 = new NodeSequence(2);
      n10 = jj_consume_token(CONTINUE);
                          n9 = JTBToolkit.makeNodeToken(n10);
           n8.addNode(n9);
      n12 = jj_consume_token(50);
                   n11 = JTBToolkit.makeNodeToken(n12);
           n8.addNode(n11);
           n0 = new NodeChoice(n8, 1);
      break;
    case BREAK:
           n13 = new NodeSequence(2);
      n15 = jj_consume_token(BREAK);
                       n14 = JTBToolkit.makeNodeToken(n15);
           n13.addNode(n14);
      n17 = jj_consume_token(50);
                   n16 = JTBToolkit.makeNodeToken(n17);
           n13.addNode(n16);
           n0 = new NodeChoice(n13, 2);
      break;
    case RETURN:
           n18 = new NodeSequence(3);
      n20 = jj_consume_token(RETURN);
                        n19 = JTBToolkit.makeNodeToken(n20);
           n18.addNode(n19);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case SIZEOF:
      case IDENTIFIER:
      case 56:
      case 60:
      case 77:
      case 86:
      case 87:
      case 90:
      case 91:
      case 92:
      case 93:
        n22 = Expression();
              n21.addNode(n22);
        break;
      default:
        jj_la1[52] = jj_gen;
        ;
      }
           n18.addNode(n21);
      n24 = jj_consume_token(50);
                   n23 = JTBToolkit.makeNodeToken(n24);
           n18.addNode(n23);
           n0 = new NodeChoice(n18, 3);
      break;
    default:
      jj_la1[53] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new JumpStatement(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final Expression Expression() throws ParseException {
   AssignmentExpression n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   AssignmentExpression n5;

   {
   }
    n0 = AssignmentExpression();
    label_14:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 53:
        ;
        break;
      default:
        jj_la1[54] = jj_gen;
        break label_14;
      }
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = AssignmentExpression();
        n2.addNode(n5);
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
     {if (true) return new Expression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final AssignmentExpression AssignmentExpression() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   UnaryExpression n2;
   AssignmentOperator n3;
   AssignmentExpression n4;
   ConditionalExpression n5;

   {
   }
    if (jj_2_29(2147483647)) {
        n1 = new NodeSequence(4);
      n2 = UnaryExpression();
        n1.addNode(n2);
      n3 = AssignmentOperator();
        n1.addNode(n3);
      n4 = AssignmentExpression();
        n1.addNode(n4);
        n0 = new NodeChoice(n1, 0);
    } else if (jj_2_30(3)) {
      n5 = ConditionalExpression();
        n0 = new NodeChoice(n5, 1);
    } else {
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new AssignmentExpression(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final AssignmentOperator AssignmentOperator() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeToken n3;
   Token n4;
   NodeToken n5;
   Token n6;
   NodeToken n7;
   Token n8;
   NodeToken n9;
   Token n10;
   NodeToken n11;
   Token n12;
   NodeToken n13;
   Token n14;
   NodeToken n15;
   Token n16;
   NodeToken n17;
   Token n18;
   NodeToken n19;
   Token n20;
   NodeToken n21;
   Token n22;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 54:
      n2 = jj_consume_token(54);
                  n1 = JTBToolkit.makeNodeToken(n2);
           n0 = new NodeChoice(n1, 0);
      break;
    case 62:
      n4 = jj_consume_token(62);
                   n3 = JTBToolkit.makeNodeToken(n4);
           n0 = new NodeChoice(n3, 1);
      break;
    case 63:
      n6 = jj_consume_token(63);
                   n5 = JTBToolkit.makeNodeToken(n6);
           n0 = new NodeChoice(n5, 2);
      break;
    case 64:
      n8 = jj_consume_token(64);
                   n7 = JTBToolkit.makeNodeToken(n8);
           n0 = new NodeChoice(n7, 3);
      break;
    case 65:
      n10 = jj_consume_token(65);
                    n9 = JTBToolkit.makeNodeToken(n10);
           n0 = new NodeChoice(n9, 4);
      break;
    case 66:
      n12 = jj_consume_token(66);
                    n11 = JTBToolkit.makeNodeToken(n12);
           n0 = new NodeChoice(n11, 5);
      break;
    case 67:
      n14 = jj_consume_token(67);
                     n13 = JTBToolkit.makeNodeToken(n14);
           n0 = new NodeChoice(n13, 6);
      break;
    case 68:
      n16 = jj_consume_token(68);
                     n15 = JTBToolkit.makeNodeToken(n16);
           n0 = new NodeChoice(n15, 7);
      break;
    case 69:
      n18 = jj_consume_token(69);
                    n17 = JTBToolkit.makeNodeToken(n18);
           n0 = new NodeChoice(n17, 8);
      break;
    case 70:
      n20 = jj_consume_token(70);
                    n19 = JTBToolkit.makeNodeToken(n20);
           n0 = new NodeChoice(n19, 9);
      break;
    case 71:
      n22 = jj_consume_token(71);
                    n21 = JTBToolkit.makeNodeToken(n22);
           n0 = new NodeChoice(n21, 10);
      break;
    default:
      jj_la1[55] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new AssignmentOperator(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final ConditionalExpression ConditionalExpression() throws ParseException {
   LogicalORExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   Expression n5;
   NodeToken n6;
   Token n7;
   ConditionalExpression n8;

   {
   }
    n0 = LogicalORExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 72:
        n2 = new NodeSequence(4);
      n4 = jj_consume_token(72);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = Expression();
        n2.addNode(n5);
      n7 = jj_consume_token(55);
               n6 = JTBToolkit.makeNodeToken(n7);
        n2.addNode(n6);
      n8 = ConditionalExpression();
        n2.addNode(n8);
        n1.addNode(n2);
      break;
    default:
      jj_la1[56] = jj_gen;
      ;
    }
     {if (true) return new ConditionalExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final ConstantExpression ConstantExpression() throws ParseException {
   ConditionalExpression n0;

   {
   }
    n0 = ConditionalExpression();
     {if (true) return new ConstantExpression(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final LogicalORExpression LogicalORExpression() throws ParseException {
   LogicalANDExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   LogicalORExpression n5;

   {
   }
    n0 = LogicalANDExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 73:
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(73);
                n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = LogicalORExpression();
        n2.addNode(n5);
        n1.addNode(n2);
      break;
    default:
      jj_la1[57] = jj_gen;
      ;
    }
     {if (true) return new LogicalORExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final LogicalANDExpression LogicalANDExpression() throws ParseException {
   InclusiveORExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   LogicalANDExpression n5;

   {
   }
    n0 = InclusiveORExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 74:
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(74);
                n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = LogicalANDExpression();
        n2.addNode(n5);
        n1.addNode(n2);
      break;
    default:
      jj_la1[58] = jj_gen;
      ;
    }
     {if (true) return new LogicalANDExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final InclusiveORExpression InclusiveORExpression() throws ParseException {
   ExclusiveORExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   InclusiveORExpression n5;

   {
   }
    n0 = ExclusiveORExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 75:
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(75);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = InclusiveORExpression();
        n2.addNode(n5);
        n1.addNode(n2);
      break;
    default:
      jj_la1[59] = jj_gen;
      ;
    }
     {if (true) return new InclusiveORExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final ExclusiveORExpression ExclusiveORExpression() throws ParseException {
   ANDExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   ExclusiveORExpression n5;

   {
   }
    n0 = ANDExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 76:
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(76);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = ExclusiveORExpression();
        n2.addNode(n5);
        n1.addNode(n2);
      break;
    default:
      jj_la1[60] = jj_gen;
      ;
    }
     {if (true) return new ExclusiveORExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final ANDExpression ANDExpression() throws ParseException {
   EqualityExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   ANDExpression n5;

   {
   }
    n0 = EqualityExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 77:
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(77);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = ANDExpression();
        n2.addNode(n5);
        n1.addNode(n2);
      break;
    default:
      jj_la1[61] = jj_gen;
      ;
    }
     {if (true) return new ANDExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final EqualityExpression EqualityExpression() throws ParseException {
   RelationalExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeChoice n3;
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;
   EqualityExpression n8;

   {
   }
    n0 = RelationalExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 78:
    case 79:
        n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 78:
        n5 = jj_consume_token(78);
                      n4 = JTBToolkit.makeNodeToken(n5);
              n3 = new NodeChoice(n4, 0);
        break;
      case 79:
        n7 = jj_consume_token(79);
                      n6 = JTBToolkit.makeNodeToken(n7);
              n3 = new NodeChoice(n6, 1);
        break;
      default:
        jj_la1[62] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        n2.addNode(n3);
      n8 = EqualityExpression();
        n2.addNode(n8);
        n1.addNode(n2);
      break;
    default:
      jj_la1[63] = jj_gen;
      ;
    }
     {if (true) return new EqualityExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final RelationalExpression RelationalExpression() throws ParseException {
   ShiftExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeChoice n3;
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;
   NodeToken n8;
   Token n9;
   NodeToken n10;
   Token n11;
   RelationalExpression n12;

   {
   }
    n0 = ShiftExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 80:
    case 81:
    case 82:
    case 83:
        n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 80:
        n5 = jj_consume_token(80);
                     n4 = JTBToolkit.makeNodeToken(n5);
              n3 = new NodeChoice(n4, 0);
        break;
      case 81:
        n7 = jj_consume_token(81);
                     n6 = JTBToolkit.makeNodeToken(n7);
              n3 = new NodeChoice(n6, 1);
        break;
      case 82:
        n9 = jj_consume_token(82);
                      n8 = JTBToolkit.makeNodeToken(n9);
              n3 = new NodeChoice(n8, 2);
        break;
      case 83:
        n11 = jj_consume_token(83);
                       n10 = JTBToolkit.makeNodeToken(n11);
              n3 = new NodeChoice(n10, 3);
        break;
      default:
        jj_la1[64] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        n2.addNode(n3);
      n12 = RelationalExpression();
        n2.addNode(n12);
        n1.addNode(n2);
      break;
    default:
      jj_la1[65] = jj_gen;
      ;
    }
     {if (true) return new RelationalExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final ShiftExpression ShiftExpression() throws ParseException {
   AdditiveExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeChoice n3;
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;
   ShiftExpression n8;

   {
   }
    n0 = AdditiveExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 84:
    case 85:
        n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 84:
        n5 = jj_consume_token(84);
                      n4 = JTBToolkit.makeNodeToken(n5);
              n3 = new NodeChoice(n4, 0);
        break;
      case 85:
        n7 = jj_consume_token(85);
                      n6 = JTBToolkit.makeNodeToken(n7);
              n3 = new NodeChoice(n6, 1);
        break;
      default:
        jj_la1[66] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        n2.addNode(n3);
      n8 = ShiftExpression();
        n2.addNode(n8);
        n1.addNode(n2);
      break;
    default:
      jj_la1[67] = jj_gen;
      ;
    }
     {if (true) return new ShiftExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final AdditiveExpression AdditiveExpression() throws ParseException {
   MultiplicativeExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeChoice n3;
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;
   AdditiveExpression n8;

   {
   }
    n0 = MultiplicativeExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 86:
    case 87:
        n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 86:
        n5 = jj_consume_token(86);
                     n4 = JTBToolkit.makeNodeToken(n5);
              n3 = new NodeChoice(n4, 0);
        break;
      case 87:
        n7 = jj_consume_token(87);
                     n6 = JTBToolkit.makeNodeToken(n7);
              n3 = new NodeChoice(n6, 1);
        break;
      default:
        jj_la1[68] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        n2.addNode(n3);
      n8 = AdditiveExpression();
        n2.addNode(n8);
        n1.addNode(n2);
      break;
    default:
      jj_la1[69] = jj_gen;
      ;
    }
     {if (true) return new AdditiveExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final MultiplicativeExpression MultiplicativeExpression() throws ParseException {
   CastExpression n0;
   NodeOptional n1 = new NodeOptional();
   NodeSequence n2;
   NodeChoice n3;
   NodeToken n4;
   Token n5;
   NodeToken n6;
   Token n7;
   NodeToken n8;
   Token n9;
   MultiplicativeExpression n10;

   {
   }
    n0 = CastExpression();
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 60:
    case 88:
    case 89:
        n2 = new NodeSequence(2);
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 60:
        n5 = jj_consume_token(60);
                     n4 = JTBToolkit.makeNodeToken(n5);
              n3 = new NodeChoice(n4, 0);
        break;
      case 88:
        n7 = jj_consume_token(88);
                     n6 = JTBToolkit.makeNodeToken(n7);
              n3 = new NodeChoice(n6, 1);
        break;
      case 89:
        n9 = jj_consume_token(89);
                     n8 = JTBToolkit.makeNodeToken(n9);
              n3 = new NodeChoice(n8, 2);
        break;
      default:
        jj_la1[70] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        n2.addNode(n3);
      n10 = MultiplicativeExpression();
        n2.addNode(n10);
        n1.addNode(n2);
      break;
    default:
      jj_la1[71] = jj_gen;
      ;
    }
     {if (true) return new MultiplicativeExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final CastExpression CastExpression() throws ParseException {
   NodeChoice n0;
   NodeSequence n1;
   NodeToken n2;
   Token n3;
   TypeName n4;
   NodeToken n5;
   Token n6;
   CastExpression n7;
   UnaryExpression n8;

   {
   }
    if (jj_2_31(2147483647)) {
           n1 = new NodeSequence(5);
      n3 = jj_consume_token(56);
                  n2 = JTBToolkit.makeNodeToken(n3);
           n1.addNode(n2);
      n4 = TypeName();
           n1.addNode(n4);
      n6 = jj_consume_token(57);
                  n5 = JTBToolkit.makeNodeToken(n6);
           n1.addNode(n5);
      n7 = CastExpression();
           n1.addNode(n7);
           n0 = new NodeChoice(n1, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case INTEGER_LITERAL:
      case FLOATING_POINT_LITERAL:
      case CHARACTER_LITERAL:
      case STRING_LITERAL:
      case SIZEOF:
      case IDENTIFIER:
      case 56:
      case 60:
      case 77:
      case 86:
      case 87:
      case 90:
      case 91:
      case 92:
      case 93:
        n8 = UnaryExpression();
           n0 = new NodeChoice(n8, 1);
        break;
      default:
        jj_la1[72] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new CastExpression(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final UnaryExpression UnaryExpression() throws ParseException {
   NodeChoice n0;
   PostfixExpression n1;
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   UnaryExpression n5;
   NodeSequence n6;
   NodeToken n7;
   Token n8;
   UnaryExpression n9;
   NodeSequence n10;
   UnaryOperator n11;
   CastExpression n12;
   NodeSequence n13;
   NodeToken n14;
   Token n15;
   NodeChoice n16;
   UnaryExpression n17;
   NodeSequence n18;
   NodeToken n19;
   Token n20;
   TypeName n21;
   NodeToken n22;
   Token n23;

   {
   }
    if (jj_2_33(3)) {
      n1 = PostfixExpression();
           n0 = new NodeChoice(n1, 0);
    } else {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 90:
           n2 = new NodeSequence(2);
        n4 = jj_consume_token(90);
                   n3 = JTBToolkit.makeNodeToken(n4);
           n2.addNode(n3);
        n5 = UnaryExpression();
           n2.addNode(n5);
           n0 = new NodeChoice(n2, 1);
        break;
      case 91:
           n6 = new NodeSequence(2);
        n8 = jj_consume_token(91);
                   n7 = JTBToolkit.makeNodeToken(n8);
           n6.addNode(n7);
        n9 = UnaryExpression();
           n6.addNode(n9);
           n0 = new NodeChoice(n6, 2);
        break;
      case 60:
      case 77:
      case 86:
      case 87:
      case 92:
      case 93:
           n10 = new NodeSequence(2);
        n11 = UnaryOperator();
           n10.addNode(n11);
        n12 = CastExpression();
           n10.addNode(n12);
           n0 = new NodeChoice(n10, 3);
        break;
      case SIZEOF:
           n13 = new NodeSequence(2);
        n15 = jj_consume_token(SIZEOF);
                        n14 = JTBToolkit.makeNodeToken(n15);
           n13.addNode(n14);
        if (jj_2_32(2147483647)) {
          n17 = UnaryExpression();
                 n16 = new NodeChoice(n17, 0);
        } else {
          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
          case 56:
                 n18 = new NodeSequence(3);
            n20 = jj_consume_token(56);
                         n19 = JTBToolkit.makeNodeToken(n20);
                 n18.addNode(n19);
            n21 = TypeName();
                 n18.addNode(n21);
            n23 = jj_consume_token(57);
                         n22 = JTBToolkit.makeNodeToken(n23);
                 n18.addNode(n22);
                 n16 = new NodeChoice(n18, 1);
            break;
          default:
            jj_la1[73] = jj_gen;
            jj_consume_token(-1);
            throw new ParseException();
          }
        }
           n13.addNode(n16);
           n0 = new NodeChoice(n13, 4);
        break;
      default:
        jj_la1[74] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
    }
     {if (true) return new UnaryExpression(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final UnaryOperator UnaryOperator() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeToken n3;
   Token n4;
   NodeToken n5;
   Token n6;
   NodeToken n7;
   Token n8;
   NodeToken n9;
   Token n10;
   NodeToken n11;
   Token n12;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case 77:
      n2 = jj_consume_token(77);
                  n1 = JTBToolkit.makeNodeToken(n2);
           n0 = new NodeChoice(n1, 0);
      break;
    case 60:
      n4 = jj_consume_token(60);
                  n3 = JTBToolkit.makeNodeToken(n4);
           n0 = new NodeChoice(n3, 1);
      break;
    case 86:
      n6 = jj_consume_token(86);
                  n5 = JTBToolkit.makeNodeToken(n6);
           n0 = new NodeChoice(n5, 2);
      break;
    case 87:
      n8 = jj_consume_token(87);
                  n7 = JTBToolkit.makeNodeToken(n8);
           n0 = new NodeChoice(n7, 3);
      break;
    case 92:
      n10 = jj_consume_token(92);
                   n9 = JTBToolkit.makeNodeToken(n10);
           n0 = new NodeChoice(n9, 4);
      break;
    case 93:
      n12 = jj_consume_token(93);
                   n11 = JTBToolkit.makeNodeToken(n12);
           n0 = new NodeChoice(n11, 5);
      break;
    default:
      jj_la1[75] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new UnaryOperator(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final PostfixExpression PostfixExpression() throws ParseException {
   PrimaryExpression n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeChoice n2;
   NodeSequence n3;
   NodeToken n4;
   Token n5;
   Expression n6;
   NodeToken n7;
   Token n8;
   NodeSequence n9;
   NodeToken n10;
   Token n11;
   NodeOptional n12;
   ArgumentExpressionList n13;
   NodeToken n14;
   Token n15;
   NodeSequence n16;
   NodeToken n17;
   Token n18;
   NodeToken n19;
   Token n20;
   NodeSequence n21;
   NodeToken n22;
   Token n23;
   NodeToken n24;
   Token n25;
   NodeToken n26;
   Token n27;
   NodeToken n28;
   Token n29;

   {
   }
    n0 = PrimaryExpression();
    label_15:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 56:
      case 58:
      case 90:
      case 91:
      case 94:
      case 95:
        ;
        break;
      default:
        jj_la1[76] = jj_gen;
        break label_15;
      }
        n12 = new NodeOptional();
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 58:
           n3 = new NodeSequence(3);
        n5 = jj_consume_token(58);
                  n4 = JTBToolkit.makeNodeToken(n5);
           n3.addNode(n4);
        n6 = Expression();
           n3.addNode(n6);
        n8 = jj_consume_token(59);
                  n7 = JTBToolkit.makeNodeToken(n8);
           n3.addNode(n7);
           n2 = new NodeChoice(n3, 0);
        break;
      case 56:
           n9 = new NodeSequence(3);
        n11 = jj_consume_token(56);
                   n10 = JTBToolkit.makeNodeToken(n11);
           n9.addNode(n10);
        if (jj_2_34(2147483647)) {
          n13 = ArgumentExpressionList();
              n12.addNode(n13);
        } else {
          ;
        }
           n9.addNode(n12);
        n15 = jj_consume_token(57);
                   n14 = JTBToolkit.makeNodeToken(n15);
           n9.addNode(n14);
           n2 = new NodeChoice(n9, 1);
        break;
      case 94:
           n16 = new NodeSequence(2);
        n18 = jj_consume_token(94);
                   n17 = JTBToolkit.makeNodeToken(n18);
           n16.addNode(n17);
        n20 = jj_consume_token(IDENTIFIER);
                            n19 = JTBToolkit.makeNodeToken(n20);
           n16.addNode(n19);
           n2 = new NodeChoice(n16, 2);
        break;
      case 95:
           n21 = new NodeSequence(2);
        n23 = jj_consume_token(95);
                    n22 = JTBToolkit.makeNodeToken(n23);
           n21.addNode(n22);
        n25 = jj_consume_token(IDENTIFIER);
                            n24 = JTBToolkit.makeNodeToken(n25);
           n21.addNode(n24);
           n2 = new NodeChoice(n21, 3);
        break;
      case 90:
        n27 = jj_consume_token(90);
                    n26 = JTBToolkit.makeNodeToken(n27);
           n2 = new NodeChoice(n26, 4);
        break;
      case 91:
        n29 = jj_consume_token(91);
                    n28 = JTBToolkit.makeNodeToken(n29);
           n2 = new NodeChoice(n28, 5);
        break;
      default:
        jj_la1[77] = jj_gen;
        jj_consume_token(-1);
        throw new ParseException();
      }
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
     {if (true) return new PostfixExpression(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final PrimaryExpression PrimaryExpression() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   Constant n3;
   NodeSequence n4;
   NodeToken n5;
   Token n6;
   Expression n7;
   NodeToken n8;
   Token n9;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case IDENTIFIER:
      n2 = jj_consume_token(IDENTIFIER);
                           n1 = JTBToolkit.makeNodeToken(n2);
           n0 = new NodeChoice(n1, 0);
      break;
    case INTEGER_LITERAL:
    case FLOATING_POINT_LITERAL:
    case CHARACTER_LITERAL:
    case STRING_LITERAL:
      n3 = Constant();
           n0 = new NodeChoice(n3, 1);
      break;
    case 56:
           n4 = new NodeSequence(3);
      n6 = jj_consume_token(56);
                  n5 = JTBToolkit.makeNodeToken(n6);
           n4.addNode(n5);
      n7 = Expression();
           n4.addNode(n7);
      n9 = jj_consume_token(57);
                  n8 = JTBToolkit.makeNodeToken(n9);
           n4.addNode(n8);
           n0 = new NodeChoice(n4, 2);
      break;
    default:
      jj_la1[78] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new PrimaryExpression(n0);}
    throw new Error("Missing return statement in function");
  }

  static public final ArgumentExpressionList ArgumentExpressionList() throws ParseException {
   AssignmentExpression n0;
   NodeListOptional n1 = new NodeListOptional();
   NodeSequence n2;
   NodeToken n3;
   Token n4;
   AssignmentExpression n5;

   {
   }
    n0 = AssignmentExpression();
    label_16:
    while (true) {
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case 53:
        ;
        break;
      default:
        jj_la1[79] = jj_gen;
        break label_16;
      }
        n2 = new NodeSequence(2);
      n4 = jj_consume_token(53);
               n3 = JTBToolkit.makeNodeToken(n4);
        n2.addNode(n3);
      n5 = AssignmentExpression();
        n2.addNode(n5);
        n1.addNode(n2);
    }
     n1.nodes.trimToSize();
     {if (true) return new ArgumentExpressionList(n0,n1);}
    throw new Error("Missing return statement in function");
  }

  static public final Constant Constant() throws ParseException {
   NodeChoice n0;
   NodeToken n1;
   Token n2;
   NodeToken n3;
   Token n4;
   NodeToken n5;
   Token n6;
   NodeToken n7;
   Token n8;

   {
   }
    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
    case INTEGER_LITERAL:
      n2 = jj_consume_token(INTEGER_LITERAL);
                             n1 = JTBToolkit.makeNodeToken(n2);
        n0 = new NodeChoice(n1, 0);
      break;
    case FLOATING_POINT_LITERAL:
      n4 = jj_consume_token(FLOATING_POINT_LITERAL);
                                    n3 = JTBToolkit.makeNodeToken(n4);
        n0 = new NodeChoice(n3, 1);
      break;
    case CHARACTER_LITERAL:
      n6 = jj_consume_token(CHARACTER_LITERAL);
                               n5 = JTBToolkit.makeNodeToken(n6);
        n0 = new NodeChoice(n5, 2);
      break;
    case STRING_LITERAL:
      n8 = jj_consume_token(STRING_LITERAL);
                            n7 = JTBToolkit.makeNodeToken(n8);
        n0 = new NodeChoice(n7, 3);
      break;
    default:
      jj_la1[80] = jj_gen;
      jj_consume_token(-1);
      throw new ParseException();
    }
     {if (true) return new Constant(n0);}
    throw new Error("Missing return statement in function");
  }

  static final private boolean jj_2_1(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_1();
    jj_save(0, xla);
    return retval;
  }

  static final private boolean jj_2_2(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_2();
    jj_save(1, xla);
    return retval;
  }

  static final private boolean jj_2_3(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_3();
    jj_save(2, xla);
    return retval;
  }

  static final private boolean jj_2_4(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_4();
    jj_save(3, xla);
    return retval;
  }

  static final private boolean jj_2_5(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_5();
    jj_save(4, xla);
    return retval;
  }

  static final private boolean jj_2_6(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_6();
    jj_save(5, xla);
    return retval;
  }

  static final private boolean jj_2_7(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_7();
    jj_save(6, xla);
    return retval;
  }

  static final private boolean jj_2_8(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_8();
    jj_save(7, xla);
    return retval;
  }

  static final private boolean jj_2_9(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_9();
    jj_save(8, xla);
    return retval;
  }

  static final private boolean jj_2_10(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_10();
    jj_save(9, xla);
    return retval;
  }

  static final private boolean jj_2_11(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_11();
    jj_save(10, xla);
    return retval;
  }

  static final private boolean jj_2_12(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_12();
    jj_save(11, xla);
    return retval;
  }

  static final private boolean jj_2_13(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_13();
    jj_save(12, xla);
    return retval;
  }

  static final private boolean jj_2_14(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_14();
    jj_save(13, xla);
    return retval;
  }

  static final private boolean jj_2_15(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_15();
    jj_save(14, xla);
    return retval;
  }

  static final private boolean jj_2_16(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_16();
    jj_save(15, xla);
    return retval;
  }

  static final private boolean jj_2_17(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_17();
    jj_save(16, xla);
    return retval;
  }

  static final private boolean jj_2_18(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_18();
    jj_save(17, xla);
    return retval;
  }

  static final private boolean jj_2_19(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_19();
    jj_save(18, xla);
    return retval;
  }

  static final private boolean jj_2_20(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_20();
    jj_save(19, xla);
    return retval;
  }

  static final private boolean jj_2_21(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_21();
    jj_save(20, xla);
    return retval;
  }

  static final private boolean jj_2_22(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_22();
    jj_save(21, xla);
    return retval;
  }

  static final private boolean jj_2_23(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_23();
    jj_save(22, xla);
    return retval;
  }

  static final private boolean jj_2_24(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_24();
    jj_save(23, xla);
    return retval;
  }

  static final private boolean jj_2_25(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_25();
    jj_save(24, xla);
    return retval;
  }

  static final private boolean jj_2_26(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_26();
    jj_save(25, xla);
    return retval;
  }

  static final private boolean jj_2_27(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_27();
    jj_save(26, xla);
    return retval;
  }

  static final private boolean jj_2_28(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_28();
    jj_save(27, xla);
    return retval;
  }

  static final private boolean jj_2_29(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_29();
    jj_save(28, xla);
    return retval;
  }

  static final private boolean jj_2_30(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_30();
    jj_save(29, xla);
    return retval;
  }

  static final private boolean jj_2_31(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_31();
    jj_save(30, xla);
    return retval;
  }

  static final private boolean jj_2_32(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_32();
    jj_save(31, xla);
    return retval;
  }

  static final private boolean jj_2_33(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_33();
    jj_save(32, xla);
    return retval;
  }

  static final private boolean jj_2_34(int xla) {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_34();
    jj_save(33, xla);
    return retval;
  }

  static final private boolean jj_3R_210() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_128() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_167()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_43() {
    if (jj_3R_105()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_106()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_209() {
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_205() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_210()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3_29() {
    if (jj_3R_37()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_38()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_30() {
    if (jj_3R_39()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_204() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_209()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(55)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_127()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_153() {
    if (jj_scan_token(TYPEDEF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_16() {
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_152() {
    if (jj_scan_token(EXTERN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_151() {
    if (jj_scan_token(STATIC)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_147() {
    if (jj_3R_37()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_38()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_105()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_239() {
    if (jj_scan_token(85)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_150() {
    if (jj_scan_token(REGISTER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_20() {
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_191() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_16()) {
    jj_scanpos = xsp;
    if (jj_3R_204()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_194() {
    if (jj_3R_34()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_77() {
    if (jj_scan_token(DFLT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(55)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_105() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_147()) {
    jj_scanpos = xsp;
    if (jj_3_30()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_238() {
    if (jj_scan_token(84)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_149() {
    if (jj_scan_token(AUTO)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_140() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_163() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_194()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_139() {
    if (jj_3R_185()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_162() {
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_138() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_109() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_149()) {
    jj_scanpos = xsp;
    if (jj_3R_150()) {
    jj_scanpos = xsp;
    if (jj_3R_151()) {
    jj_scanpos = xsp;
    if (jj_3R_152()) {
    jj_scanpos = xsp;
    if (jj_3R_153()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_230() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_238()) {
    jj_scanpos = xsp;
    if (jj_3R_239()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_221()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_76() {
    if (jj_scan_token(CASE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_127()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(55)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_221() {
    if (jj_3R_229()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_230()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_103() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_138()) {
    jj_scanpos = xsp;
    if (jj_3R_139()) {
    jj_scanpos = xsp;
    if (jj_3R_140()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_31() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_162()) {
    jj_scanpos = xsp;
    if (jj_3R_163()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_75() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(55)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_201() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_105()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_9() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_235() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_191()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_137() {
    if (jj_3R_105()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_201()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_159() {
    if (jj_3R_191()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_235()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_35() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_75()) {
    jj_scanpos = xsp;
    if (jj_3R_76()) {
    jj_scanpos = xsp;
    if (jj_3R_77()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_113() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_8() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_234() {
    if (jj_scan_token(83)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_14() {
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_146() {
    if (jj_scan_token(91)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_233() {
    if (jj_scan_token(82)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_48() {
    if (jj_3R_112()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_113()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_19() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_31()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_145() {
    if (jj_scan_token(90)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_232() {
    if (jj_scan_token(81)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_111() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_7() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_68() {
    if (jj_3R_31()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_19()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_231() {
    if (jj_scan_token(80)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_228() {
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_119() {
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_144() {
    if (jj_scan_token(95)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_13() {
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_10() {
    if (jj_3R_22()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_111()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_34() {
    if (jj_3R_43()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_176() {
    if (jj_scan_token(RETURN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_228()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_63() {
    if (jj_3R_112()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_119()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_222() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_231()) {
    jj_scanpos = xsp;
    if (jj_3R_232()) {
    jj_scanpos = xsp;
    if (jj_3R_233()) {
    jj_scanpos = xsp;
    if (jj_3R_234()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_218()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_143() {
    if (jj_scan_token(94)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_110() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_118() {
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_82() {
    if (jj_3R_131()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_218() {
    if (jj_3R_221()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_222()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_175() {
    if (jj_scan_token(BREAK)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_186() {
    if (jj_3R_43()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_47() {
    if (jj_3R_109()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_110()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_81() {
    if (jj_3R_130()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_15() {
    if (jj_3R_22()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_118()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_80() {
    if (jj_3R_129()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_20() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_47()) {
    jj_scanpos = xsp;
    if (jj_3_10()) {
    jj_scanpos = xsp;
    if (jj_3R_48()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_69() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(61)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_174() {
    if (jj_scan_token(CONTINUE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_142() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_186()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_79() {
    if (jj_3R_46()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_26() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_15()) {
    jj_scanpos = xsp;
    if (jj_3R_63()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_30() {
    if (jj_3R_68()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_69()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_78() {
    if (jj_3R_128()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_26() {
    if (jj_3R_35()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_173() {
    if (jj_scan_token(GOTO)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_141() {
    if (jj_scan_token(58)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(59)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_6() {
    if (jj_3R_19()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_104() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_141()) {
    jj_scanpos = xsp;
    if (jj_3R_142()) {
    jj_scanpos = xsp;
    if (jj_3R_143()) {
    jj_scanpos = xsp;
    if (jj_3R_144()) {
    jj_scanpos = xsp;
    if (jj_3R_145()) {
    jj_scanpos = xsp;
    if (jj_3R_146()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_36() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_26()) {
    jj_scanpos = xsp;
    if (jj_3R_78()) {
    jj_scanpos = xsp;
    if (jj_3R_79()) {
    jj_scanpos = xsp;
    if (jj_3R_80()) {
    jj_scanpos = xsp;
    if (jj_3R_81()) {
    jj_scanpos = xsp;
    if (jj_3R_82()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_131() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_173()) {
    jj_scanpos = xsp;
    if (jj_3R_174()) {
    jj_scanpos = xsp;
    if (jj_3R_175()) {
    jj_scanpos = xsp;
    if (jj_3R_176()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_224() {
    if (jj_scan_token(79)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_42() {
    if (jj_3R_103()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_104()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_223() {
    if (jj_scan_token(78)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_164() {
    if (jj_3R_112()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_49() {
    if (jj_3R_19()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_25() {
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_159()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_124() {
    Token xsp;
    if (jj_3R_164()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_164()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_21() {
    Token xsp;
    if (jj_3R_49()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_49()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_219() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_223()) {
    jj_scanpos = xsp;
    if (jj_3R_224()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_211()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_211() {
    if (jj_3R_218()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_219()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_117() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_73() {
    if (jj_3R_33()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_50() {
    if (jj_3R_114()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_188() {
    if (jj_scan_token(54)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_32()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_72() {
    if (jj_3R_124()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_19() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_50()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_156() {
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_188()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_33() {
    if (jj_scan_token(60)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_72()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_73()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_25() {
    if (jj_3R_30()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_227() {
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_215() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_25()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_212() {
    if (jj_scan_token(77)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_206()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_182() {
    if (jj_scan_token(93)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_4() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_220() {
    if (jj_3R_127()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_226() {
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_181() {
    if (jj_scan_token(92)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_206() {
    if (jj_3R_211()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_212()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_5() {
    if (jj_3R_21()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_180() {
    if (jj_scan_token(87)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_193() {
    if (jj_3R_205()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_214() {
    if (jj_scan_token(58)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_220()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(59)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_179() {
    if (jj_scan_token(86)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_225() {
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_45() {
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_178() {
    if (jj_scan_token(60)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_208() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_214()) {
    jj_scanpos = xsp;
    if (jj_3R_215()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_177() {
    if (jj_scan_token(77)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_161() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_193()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_18() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_45()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3_5()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_46()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_172() {
    if (jj_scan_token(FOR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_225()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_226()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_227()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_157() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_156()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_23() {
    if (jj_3R_30()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_132() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_177()) {
    jj_scanpos = xsp;
    if (jj_3R_178()) {
    jj_scanpos = xsp;
    if (jj_3R_179()) {
    jj_scanpos = xsp;
    if (jj_3R_180()) {
    jj_scanpos = xsp;
    if (jj_3R_181()) {
    jj_scanpos = xsp;
    if (jj_3R_182()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_114() {
    if (jj_3R_156()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_157()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_207() {
    if (jj_scan_token(76)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_195()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_2() {
    if (jj_3R_18()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_18() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_30()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_166() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_23()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_195() {
    if (jj_3R_206()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_207()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_192() {
    if (jj_3R_127()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_3() {
    if (jj_3R_19()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_213() {
    if (jj_3R_127()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_44() {
    if (jj_3R_18()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_171() {
    if (jj_scan_token(DO)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(WHILE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(50)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_160() {
    if (jj_scan_token(58)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_192()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(59)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_165() {
    if (jj_scan_token(58)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_213()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(59)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_12() {
    if (jj_3R_25()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_17() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_44()) {
    jj_scanpos = xsp;
    if (jj_3_3()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_122() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_160()) {
    jj_scanpos = xsp;
    if (jj_3_18()) {
    jj_scanpos = xsp;
    if (jj_3R_161()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_32() {
    if (jj_3R_37()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_24() {
    Token xsp;
    if (jj_3_12()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_12()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_170() {
    if (jj_scan_token(WHILE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_24() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_34()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_196() {
    if (jj_scan_token(75)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_183()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_134() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_40()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_121() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_133() {
    if (jj_3R_37()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_183() {
    if (jj_3R_195()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_196()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_130() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_170()) {
    jj_scanpos = xsp;
    if (jj_3R_171()) {
    jj_scanpos = xsp;
    if (jj_3R_172()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_126() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_24()) {
    jj_scanpos = xsp;
    if (jj_3R_165()) {
    jj_scanpos = xsp;
    if (jj_3R_166()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_208()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_190() {
    if (jj_scan_token(UNION)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_1() {
    if (jj_3R_17()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_189() {
    if (jj_scan_token(STRUCT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_120() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_86() {
    if (jj_scan_token(SIZEOF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_133()) {
    jj_scanpos = xsp;
    if (jj_3R_134()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_158() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_189()) {
    jj_scanpos = xsp;
    if (jj_3R_190()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_65() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_120()) {
    jj_scanpos = xsp;
    if (jj_3R_121()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_122()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_85() {
    if (jj_3R_132()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_41()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_184() {
    if (jj_scan_token(74)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_135()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_84() {
    if (jj_scan_token(91)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_37()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_135() {
    if (jj_3R_183()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_184()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_83() {
    if (jj_scan_token(90)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_37()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_202() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_33() {
    if (jj_3R_42()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_23() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_37() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_33()) {
    jj_scanpos = xsp;
    if (jj_3R_83()) {
    jj_scanpos = xsp;
    if (jj_3R_84()) {
    jj_scanpos = xsp;
    if (jj_3R_85()) {
    jj_scanpos = xsp;
    if (jj_3R_86()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_136() {
    if (jj_scan_token(73)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_98()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_11() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_23()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(51)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_24()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(52)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_125() {
    if (jj_3R_33()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_98() {
    if (jj_3R_135()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_136()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_74() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_125()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_126()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_22() {
    if (jj_3R_33()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_64() {
    if (jj_3R_33()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_115() {
    if (jj_3R_158()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_11()) {
    jj_scanpos = xsp;
    if (jj_3R_202()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_169() {
    if (jj_scan_token(SWITCH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_27() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_64()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_65()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_34() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_22()) {
    jj_scanpos = xsp;
    if (jj_3R_74()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_127() {
    if (jj_3R_39()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_28() {
    if (jj_scan_token(ELSE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_102() {
    if (jj_3R_37()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_31() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_40()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_41()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_123() {
    if (jj_scan_token(54)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_127()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_100() {
    if (jj_3R_34()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_168() {
    if (jj_scan_token(IF)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_28()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_155() {
    if (jj_scan_token(VOLATILE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_66() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_123()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_154() {
    if (jj_scan_token(CONST)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_40() {
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_100()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_101() {
    if (jj_scan_token(56)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_40()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(57)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_41()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_99() {
    if (jj_scan_token(72)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(55)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_39()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_129() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_168()) {
    jj_scanpos = xsp;
    if (jj_3R_169()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_39() {
    if (jj_3R_98()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_99()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_112() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_154()) {
    jj_scanpos = xsp;
    if (jj_3R_155()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_41() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_101()) {
    jj_scanpos = xsp;
    if (jj_3R_102()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_21() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_32()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_67() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_66()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_62() {
    if (jj_3R_117()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_216() {
    if (jj_3R_32()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3_21()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_97() {
    if (jj_scan_token(71)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_61() {
    if (jj_3R_116()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_29() {
    if (jj_3R_66()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_67()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_96() {
    if (jj_scan_token(70)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_245() {
    if (jj_scan_token(89)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_60() {
    if (jj_3R_115()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_95() {
    if (jj_scan_token(69)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_244() {
    if (jj_scan_token(88)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_59() {
    if (jj_scan_token(UNSIGNED)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_94() {
    if (jj_scan_token(68)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_243() {
    if (jj_scan_token(60)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_58() {
    if (jj_scan_token(SIGNED)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_93() {
    if (jj_scan_token(67)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_57() {
    if (jj_scan_token(DOUBLE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_187() {
    if (jj_3R_36()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_92() {
    if (jj_scan_token(66)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_56() {
    if (jj_scan_token(FLOAT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_203() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_217() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_91() {
    if (jj_scan_token(65)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_240() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_243()) {
    jj_scanpos = xsp;
    if (jj_3R_244()) {
    jj_scanpos = xsp;
    if (jj_3R_245()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_236()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_148() {
    Token xsp;
    if (jj_3R_187()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_187()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_55() {
    if (jj_scan_token(LONG)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_90() {
    if (jj_scan_token(64)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_54() {
    if (jj_scan_token(INT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_236() {
    if (jj_3R_41()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_240()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_200() {
    if (jj_scan_token(STRING_LITERAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_89() {
    if (jj_scan_token(63)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_53() {
    if (jj_scan_token(SHORT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_28() {
    if (jj_scan_token(IDENTIFIER)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_199() {
    if (jj_scan_token(CHARACTER_LITERAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_71() {
    if (jj_scan_token(51)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_216()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_217()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(52)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_88() {
    if (jj_scan_token(62)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_52() {
    if (jj_scan_token(CHAR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_27() {
    if (jj_3R_21()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_198() {
    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_70() {
    if (jj_3R_105()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_87() {
    if (jj_scan_token(54)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_51() {
    if (jj_scan_token(VOID)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_17() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_28()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(51)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_29()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(52)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_197() {
    if (jj_scan_token(INTEGER_LITERAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_108() {
    if (jj_3R_148()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_185() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_197()) {
    jj_scanpos = xsp;
    if (jj_3R_198()) {
    jj_scanpos = xsp;
    if (jj_3R_199()) {
    jj_scanpos = xsp;
    if (jj_3R_200()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_32() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_70()) {
    jj_scanpos = xsp;
    if (jj_3R_71()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_107() {
    if (jj_3R_21()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_38() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_87()) {
    jj_scanpos = xsp;
    if (jj_3R_88()) {
    jj_scanpos = xsp;
    if (jj_3R_89()) {
    jj_scanpos = xsp;
    if (jj_3R_90()) {
    jj_scanpos = xsp;
    if (jj_3R_91()) {
    jj_scanpos = xsp;
    if (jj_3R_92()) {
    jj_scanpos = xsp;
    if (jj_3R_93()) {
    jj_scanpos = xsp;
    if (jj_3R_94()) {
    jj_scanpos = xsp;
    if (jj_3R_95()) {
    jj_scanpos = xsp;
    if (jj_3R_96()) {
    jj_scanpos = xsp;
    if (jj_3R_97()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_22() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_51()) {
    jj_scanpos = xsp;
    if (jj_3R_52()) {
    jj_scanpos = xsp;
    if (jj_3R_53()) {
    jj_scanpos = xsp;
    if (jj_3R_54()) {
    jj_scanpos = xsp;
    if (jj_3R_55()) {
    jj_scanpos = xsp;
    if (jj_3R_56()) {
    jj_scanpos = xsp;
    if (jj_3R_57()) {
    jj_scanpos = xsp;
    if (jj_3R_58()) {
    jj_scanpos = xsp;
    if (jj_3R_59()) {
    jj_scanpos = xsp;
    if (jj_3R_60()) {
    jj_scanpos = xsp;
    if (jj_3R_61()) {
    jj_scanpos = xsp;
    lookingAhead = true;
    jj_semLA = isType(getToken(1).image);
    lookingAhead = false;
    if (!jj_semLA || jj_3R_62()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_116() {
    if (jj_scan_token(ENUM)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3_17()) {
    jj_scanpos = xsp;
    if (jj_3R_203()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_46() {
    if (jj_scan_token(51)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_107()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_108()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(52)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_242() {
    if (jj_scan_token(87)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_241() {
    if (jj_scan_token(86)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_237() {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_241()) {
    jj_scanpos = xsp;
    if (jj_3R_242()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_229()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_106() {
    if (jj_scan_token(53)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_105()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_167() {
    if (jj_3R_137()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_229() {
    if (jj_3R_236()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_237()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static private boolean jj_initialized_once = false;
  static public CParserTokenManager token_source;
  static ASCII_CharStream jj_input_stream;
  static public Token token, jj_nt;
  static private int jj_ntk;
  static private Token jj_scanpos, jj_lastpos;
  static private int jj_la;
  static public boolean lookingAhead = false;
  static private boolean jj_semLA;
  static private int jj_gen;
  static final private int[] jj_la1 = new int[81];
  static final private int[] jj_la1_0 = {0x0,0xa0a0000,0x10000,0xa0a0000,0x94240000,0x10000,0x0,0x0,0x84000000,0x0,0x0,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x406880,0x0,0x0,0x0,0x10000,0x0,0x10000,0x0,0x0,0x0,0x0,0x406880,0x0,0x0,0x0,0x406880,0x0,0x0,0x406880,0x0,0x61c0e880,0x100000,0x406880,0x61d0e880,0x61d0e880,0x800000,0x406880,0x406880,0x406880,0x20000000,0x406880,0x41008000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x406880,0x0,0x400000,0x0,0x0,0x0,0x6880,0x0,0x6880,};
  static final private int[] jj_la1_1 = {0x11008000,0x80,0x1,0x80,0x1366,0x1,0x8000,0x8000,0x0,0x200000,0x400000,0x1,0x200000,0x11008000,0x11808000,0x8000,0x8000,0x200000,0x400000,0x10000000,0x1008000,0x5000000,0x11008000,0x8000,0x4000000,0x1000000,0x1,0x10000000,0x1,0x200000,0x15000000,0x200000,0x200000,0x11088000,0x15000000,0x10000000,0x15000000,0x11008000,0x5000000,0x5000000,0x11008000,0x5000000,0x110cec00,0x8010,0x11008000,0x110cec10,0x110cec10,0x2000,0x11008000,0x11008000,0x11008000,0x4800,0x11008000,0x400,0x200000,0xc0400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x10000000,0x11008000,0x1000000,0x10000000,0x10000000,0x5000000,0x5000000,0x1008000,0x200000,0x0,};
  static final private int[] jj_la1_2 = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3cc02000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3cc02000,0x0,0x0,0x0,0x3cc02000,0x0,0x0,0x3cc02000,0x0,0x3cc02000,0x0,0x3cc02000,0x3cc02000,0x3cc02000,0x0,0x3cc02000,0x3cc02000,0x3cc02000,0x0,0x3cc02000,0x0,0x0,0xff,0x100,0x200,0x400,0x800,0x1000,0x2000,0xc000,0xc000,0xf0000,0xf0000,0x300000,0x300000,0xc00000,0xc00000,0x3000000,0x3000000,0x3cc02000,0x0,0x3cc02000,0x30c02000,0xcc000000,0xcc000000,0x0,0x0,0x0,};
  static final private JJCalls[] jj_2_rtns = new JJCalls[34];
  static private boolean jj_rescan = false;
  static private int jj_gc = 0;

  public CParser(java.io.InputStream stream) {
    if (jj_initialized_once) {
       // System.out.println("ERROR: Second call to constructor of static parser.  You must");
       // System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
       // System.out.println("       during parser generation.");
      throw new Error();
    }
    jj_initialized_once = true;
    jj_input_stream = new ASCII_CharStream(stream, 1, 1);
    token_source = new CParserTokenManager(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 81; i++) jj_la1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  static public void ReInit(java.io.InputStream stream) {
    ASCII_CharStream.ReInit(stream, 1, 1);
    CParserTokenManager.ReInit(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 81; i++) jj_la1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  public CParser(java.io.Reader stream) {
    if (jj_initialized_once) {
       // System.out.println("ERROR: Second call to constructor of static parser.  You must");
       // System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
       // System.out.println("       during parser generation.");
      throw new Error();
    }
    jj_initialized_once = true;
    jj_input_stream = new ASCII_CharStream(stream, 1, 1);
    token_source = new CParserTokenManager(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 81; i++) jj_la1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  static public void ReInit(java.io.Reader stream) {
    ASCII_CharStream.ReInit(stream, 1, 1);
    CParserTokenManager.ReInit(jj_input_stream);
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 81; i++) jj_la1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

  public CParser(CParserTokenManager tm) {
    if (jj_initialized_once) {
       //  System.out.println("ERROR: Second call to constructor of static parser.  You must");
       // System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
       // System.out.println("       during parser generation.");
      throw new Error();
    }
    jj_initialized_once = true;
    token_source = tm;
    token = new Token();
    jj_ntk = -1;
    jj_gen = 0;
    for (int i = 0; i < 81; i++) jj_la1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
  }

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

  static final private Token jj_consume_token(int kind) throws ParseException {
    Token oldToken;
    if ((oldToken = token).next != null) token = token.next;
    else token = token.next = CParserTokenManager.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();
  }

  static final 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 = CParserTokenManager.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);
    }
    return (jj_scanpos.kind != kind);
  }

  static public final Token getNextToken() {
    if (token.next != null) token = token.next;
    else token = token.next = CParserTokenManager.getNextToken();
    jj_ntk = -1;
    jj_gen++;
    return token;
  }

  static public final Token getToken(int index) {
    Token t = lookingAhead ? jj_scanpos : token;
    for (int i = 0; i < index; i++) {
      if (t.next != null) t = t.next;
      else t = t.next = CParserTokenManager.getNextToken();
    }
    return t;
  }

  static final private int jj_ntk() {
    if ((jj_nt=token.next) == null)
      return (jj_ntk = (token.next=CParserTokenManager.getNextToken()).kind);
    else
      return (jj_ntk = jj_nt.kind);
  }

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

  static 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];
      }
      boolean exists = false;
      for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements(); ) {
        int[] oldentry = (int[])(e.nextElement());
        if (oldentry.length == jj_expentry.length) {
          exists = true;
          for (int i = 0; i < jj_expentry.length; i++) {
            if (oldentry[i] != jj_expentry[i]) {
              exists = false;
              break;
            }
          }
          if (exists) break;
        }
      }
      if (!exists) jj_expentries.addElement(jj_expentry);
      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
    }
  }

  static public final ParseException generateParseException() {
    jj_expentries.removeAllElements();
    boolean[] la1tokens = new boolean[96];
    for (int i = 0; i < 96; i++) {
      la1tokens[i] = false;
    }
    if (jj_kind >= 0) {
      la1tokens[jj_kind] = true;
      jj_kind = -1;
    }
    for (int i = 0; i < 81; 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;
          }
        }
      }
    }
    for (int i = 0; i < 96; i++) {
      if (la1tokens[i]) {
        jj_expentry = new int[1];
        jj_expentry[0] = i;
        jj_expentries.addElement(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.elementAt(i);
    }
    return new ParseException(token, exptokseq, tokenImage);
  }

  static public final void enable_tracing() {
  }

  static public final void disable_tracing() {
  }

  static final private void jj_rescan_token() {
    jj_rescan = true;
    for (int i = 0; i < 34; i++) {
      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;
          }
        }
        p = p.next;
      } while (p != null);
    }
    jj_rescan = false;
  }

  static final 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;
  }

}

class JTBToolkit {
   static NodeToken makeNodeToken(Token t) {
      return new NodeToken(t.image.intern(), t.kind, t.beginLine, t.beginColumn, t.endLine, t.endColumn);
   }
}
